既要像人话,又要藏住意图:越狱 Prompt 的鱼与熊掌困境
COLDAttack、PiF 等方法不再只追求“让模型越狱成功”,还会主动提升攻击 Prompt 的自然度,让它越来越像正常用户请求。
越狱 Prompt 正在变得越来越难识别。
早期很多自动化越狱攻击,会在正常问题后面拼上一串人类难以理解的字符、单词和 Token。
对安全系统来说,这类攻击其实并不难发现,因为正常用户通常不会这样说话。
于是,一个很直接的防御思路就是检查一句话“像不像人话”:如果语言结构明显异常,就将其视为可疑输入。
但攻击者很快开始反过来优化这一点。
COLDAttack、PiF 等方法不再只追求“让模型越狱成功”,还会主动提升攻击 Prompt 的自然度,让它越来越像正常用户请求。
于是问题发生了变化:如果一段攻击文字已经写得和普通自然语言差不多,我们还能从哪里发现它?
2026 年 9 月,来自澳大利亚机器学习研究所、阿德莱德大学和莫纳什大学的研究人员提出 SAFEGuard。

它没有继续押注某一种单一特征,而是指出了优化型越狱攻击背后的一个关键矛盾:
攻击者可以努力让文字更像正常语言,也可以努力隐藏模型内部的有害语义,但想把两件事同时做好,往往会越来越困难。
某种意义上,这正是一场属于越狱 Prompt 的“鱼与熊掌困境”。
越狱检测,过去主要盯着两件事
第一条路线最直观:看输入像不像正常语言。
很多早期优化型越狱 Prompt 都会出现大量奇怪字符、特殊 Token 和不符合正常语法的词串。机器判断这种异常,常用的指标就是困惑度(Perplexity,PPL)。
可以简单理解为:大模型觉得这句话“顺不顺”。正常语言中的词通常符合模型学到的语言规律,因此困惑度较低;如果一句话里突然出现大量莫名其妙的 Token,模型会觉得这些词出现在这里非常意外,困惑度就会上升。
因此早期防御逻辑很简单:不像人话,就拦。
这种方法对很多乱码型攻击非常有效,但问题也很明显:只要攻击者把“语言自然度”本身加入优化目标,困惑度就会逐渐失去区分能力。
COLDAttack、PiF 等攻击正是在做这件事——让攻击 Prompt 尽量保留自然语言结构,从而混入正常输入分布。
于是,第二条检测路线开始出现:不再只看表面文字,而是看模型内部把这段输入理解成了什么。
这类方法会准备一些已知的有害请求,再观察它们在模型内部会产生怎样的梯度变化。
这里不必把“梯度”理解得太复杂,可以近似看作:为了让模型回答这个请求,模型内部哪些参数最敏感,以及它们会朝什么方向变化。
如果很多有害请求会产生相似的变化模式,就可以得到一种粗略的“有害语义指纹”。当一个新的 Prompt 虽然写得很自然,但触发的梯度模式仍然与已知有害请求高度相似,就说明它的外表可能变了,但模型内部仍然知道它想做什么。

两类方法都有自己的盲区
如果只看语言流畅度,那么面对已经“学会说人话”的攻击,就很容易漏掉。论文发现,像 COLDAttack、PiF 这类高流畅度攻击,虽然表面上已经非常自然,但它们在模型内部仍然比较接近真正的有害请求。换句话说,文字藏住了,语义却没有真正藏住。
但只看有害语义,同样不是万能的。
一些优化型攻击会加入大量特殊 Token 或对抗后缀,这些结构不仅能帮助攻击越狱,还会扰乱模型内部对 Prompt 的表示。原本一个直接的有害请求,在模型内部可能明显位于“有害区域”;经过这些奇怪 Token 扰动以后,它的内部表征可能逐渐向正常区域偏移。
论文把这种现象称为 Representation Shift,表征漂移。
这时就会出现一种反直觉情况:这个 Prompt 实际上仍然能成功攻击模型,但从内部表示上看,它却已经没有那么像传统的有害请求了,于是单纯依赖梯度匹配的检测器也可能失效。
研究人员把不同攻击放在一起分析后,发现了一个非常清晰的规律:高流畅度攻击往往保留更多有害语义,而那些更擅长隐藏有害语义的攻击,往往又会产生更不自然的语言结构。
于是,越狱攻击开始面临一种天然的矛盾:
想让 Prompt 更像正常语言,就必须更多依赖自然语言本身表达攻击意图,于是有害语义更容易暴露; 想把有害语义进一步藏起来,就往往需要引入更多机器优化出来的特殊结构,于是语言自然度又会下降。
这就是 SAFEGuard 最核心的观察,也是这篇论文真正值得关注的地方。

SAFEGuard:既看“像不像人话”,也看“藏没藏住意图”
SAFEGuard 的核心设计其实并不复杂。既然不同攻击会在不同地方露出破绽,那就同时检查两个地方。
第一阶段先做流畅度检测。如果 Prompt 本身存在明显语言异常,就可以直接判为可疑攻击;
如果语言看起来正常,再进入第二阶段做梯度匹配,检查它在模型内部是否仍然接近已知有害请求。
于是整个逻辑可以概括为:
外表不正常,直接拦;外表正常,但内部仍然像有害请求,也拦。
只有当一段 Prompt 在语言层面看起来正常,同时在模型内部也不像有害请求时,才真正放行。
不过,作者并没有简单地直接使用传统困惑度。因为困惑度有一个明显问题:它对一些“罕见但合法”的表达也可能过于敏感。比如专业术语、少见人名、代码、缩写,都可能因为出现频率低而导致困惑度升高,从而把正常用户误判成攻击者。
所以 SAFEGuard 又增加了一个指标:跨层分布距离 JSD。
大模型处理一个 Token,需要经过很多 Transformer 层。
对于正常语言来说,随着层数加深,前后文逐渐融合,模型通常会越来越清楚这句话在表达什么,因此浅层和深层的预测分布会发生明显变化。
但一些机器搜索出来的奇怪 Token 不一样,它们对模型来说可能从浅层开始就缺乏清晰语义,到了深层仍然“不知道这是什么”,于是不同层之间的变化反而较小。
因此,困惑度关注的是:
这个词出现在这里奇不奇怪?
而跨层 JSD 关注的是:
模型经过这么多层处理以后,有没有逐渐形成对它的理解?
前者更敏感,后者更稳定。SAFEGuard 把二者结合起来,形成混合流畅度指标,从而降低因为单个罕见词导致的误报。

为什么还要用“滑动窗口”?
SAFEGuard 在流畅度检测里还加入了一个很工程化但很重要的设计:滑动窗口。
现实中的攻击 Prompt 不一定整段都是乱码。更常见的情况是,前面几百个 Token 都很正常,只有最后十几个 Token 是机器优化出来的攻击后缀。如果直接对整个 Prompt 求平均,那几十个异常 Token 很容易被大量正常文本稀释掉。
因此,SAFEGuard 不只看整段 Prompt 的平均流畅度,而是像拿着一个放大镜一样,对输入进行局部扫描。论文默认每次观察约 10 个 Token,每次向后移动 3 个 Token,再从所有局部片段中找到最异常的一段。
这样一来,攻击者就很难通过“大量正常文字包住少量异常后缀”的方式,把局部异常藏进整体平均值里。
这套设计其实也反映出一个很现实的安全原则:
很多攻击不是整体异常,而是局部异常。
如果检测系统只看宏观平均值,很容易把真正危险的局部信号冲淡。
实验结果
论文最有意思的实验,不是总平均分,而是把不同类型攻击拆开以后看。
以 Llama-2-7B 为例,对 COLDAttack,如果只看流畅度,检测率只有 4.6%。原因很简单:它已经写得非常像正常语言了。但如果看梯度匹配,检测率可以达到 99.3%,说明它虽然在文字层面完成了伪装,模型内部却仍然能识别出其有害语义。
而对于 Adaptive,情况恰好相反。流畅度检测可以达到 100%,因为这类攻击产生的输入在语言层面非常异常;虽然它更擅长扰乱有害语义,但根本过不了第一关。
最终,两类信号组合后:
COLDAttack:100%
Adaptive:100%
PiF:99.2%
这组结果很好地验证了论文的核心假设:不同越狱攻击可以逃过其中一种检测,但很难同时逃过两种完全不同的检测信号。
从这个角度看,SAFEGuard 的价值并不只是“多加了一个特征”,而是针对不同攻击机制设计了互补信号。
局限性
前面的数字很漂亮,但这篇论文也有几个必须看到的限制。
首先,SAFEGuard 对不同模型的表现差异很大。在 Llama-2-7B 上,它的平均检测率可以达到 99.8%;但换到 Llama-3.1-8B 后,平均检测率只有 72.02%,其中对 COLDAttack 只有 31.7%,对 PiF 只有 23%。这说明它高度依赖一个前提:模型内部本身要能够比较清楚地区分有害和正常语义。
更有意思的是,研究人员发现,仅仅把梯度匹配时假定的回答从 “Sure” 换成 “Certainly”,Llama-3.1-8B 上的检测率就可以从 72.02% 提高到 94.33%。这说明所谓“有害梯度”并不是一种完全稳定、纯粹的安全特征,它仍然会受到模型语言习惯、回答风格和 Token 表达方式影响。
其次是误报问题。论文在校准阶段希望把正常请求误报率控制在 1% 左右,但真正面对未见过的正常数据时,Llama-2-7B 的误报率约为 4.45%,Llama-2-13B 为 4.72%,Mistral 则达到 5.98%。换句话说,每 100 个正常请求中,可能有四五个被错误拦截。对于普通消费者产品来说,这一水平显然偏高,因此作者也明确指出,它目前更适合高安全场景。
如果攻击者知道 SAFEGuard 怎么工作呢?
任何防御方法真正需要面对的,都不是“昨天的攻击”,而是知道防御机制之后重新优化出来的攻击。
论文也专门测试了这一点。研究人员修改 COLDAttack,让攻击者同时追求三个目标:
- 越狱成功
- 语言保持自然
- 梯度还不能像有害请求
也就是说,攻击者真正开始尝试“鱼和熊掌都要”。
结果 SAFEGuard 的检测率确实下降了。面对普通 COLDAttack 时,检测率是 87.39%;面对专门针对 SAFEGuard 优化后的 Adaptive-COLDAttack,则下降到 76%。
这说明 SAFEGuard 显然不是不可绕过的。不过,这组实验反而揭示了一个更现实的防御价值:当攻击者需要同时满足越来越多目标时,攻击成本会明显上升。
语言要自然、语义要隐藏、攻击还要成功,这些目标之间会逐渐互相牵制。安全系统真正能做到的,往往不是找到一个“永远无法绕过”的规则,而是不断增加攻击者需要同时满足的约束条件。

启发
如果只看实验结果,很容易把 SAFEGuard 理解成“又一个新的越狱检测算法”。
但我认为,它更重要的意义在于:它解释了为什么现有越狱检测器会失效。
过去的大模型护栏,大多在观察“用户写了什么”,因此我们会使用敏感词、分类模型、向量匹配、大模型裁判以及各种规则系统。这些方法的共同点,是主要分析输入内容本身。
SAFEGuard 则进一步问了一层:
模型内部到底是怎么理解这段输入的?
它观察不同 Transformer 层之间的变化,观察 Prompt 在模型内部落在哪一片语义区域,也观察它产生的梯度和已知有害请求是否相似。换句话说,安全检测开始从“检查输入文本”,逐渐走向“检查模型处理输入的过程”。
这也是近年来大模型安全一个很值得关注的趋势:安全能力正在从模型外围,逐步向模型内部和推理运行时下沉。
当攻击越来越多地开始操纵模型如何解释上下文、如何形成内部状态、如何决定下一步行为时,安全系统自然也不能永远只站在模型外面。
它距离真正落地,还有多远?
SAFEGuard 有一个非常明确的限制:它是一种白盒方法。
它需要访问模型的中间层状态,还需要计算梯度,因此无法直接部署在只提供 API 的闭源模型上,例如 GPT、Claude、Gemini 等。它更适合 Llama、Mistral 或其他企业私有化部署的开源权重模型。
从性能上看,它也不是完全不可用。论文测试中,最理想情况下第一阶段就发现攻击,耗时约 0.09 秒;如果需要进一步进行梯度匹配,则约为 0.67 秒。相比之下,这个延迟并不算不可接受。
真正明显的成本在显存。Llama-2-7B 在梯度阶段大约需要 25.7 GB 显存,Llama-2-13B 则接近 49.6 GB。因此,更现实的产品形态可能并不是让每一个大型业务模型都直接跑一遍 SAFEGuard,而是单独部署一个较小的白盒安全模型,专门读取这些内部安全信号,再与规则、分类器等外部护栏联合判断。
这也意味着,未来的大模型护栏可能不再只是“一个分类模型”,而更像一个由多种信号共同组成的安全系统:
内容语义、语言异常、内部状态、行为轨迹,各自提供不同证据。
写在最后
SAFEGuard 最有意思的地方,并不是它提出了一种多复杂的算法。恰恰相反,它的核心逻辑非常简单:
攻击如果在文字上留下破绽,就看文字;如果文字伪装得很好,就去看模型内部是不是仍然暴露了有害语义。
它真正抓住的是优化型越狱攻击背后的一组矛盾:
既要像人话,又要藏住意图。
这两件事都可以分别做到,但越想同时做到,攻击者就越需要在多个目标之间不断妥协。
所以从安全角度看,真正值得追求的也许从来不是:
“找到一个永远无法绕过的检测器。”
而是:
不断增加攻击者需要同时满足的条件,让一次成功绕过变得越来越贵。
对于越狱 Prompt 来说,鱼可以要,熊掌也可以要。
只是两样都想拿走的时候,
账单就开始变贵了。
同专题推荐
查看专题AgentSpy:如何让 AI Agent 的真实行为变得可观测
但这里存在一个容易被忽视的问题:Agent 的执行日志,真的能够完整反映它做过的事情吗?
大模型自我反思微调,让Agent学会抵御未知的提示注入
这种思路确实有效,但也存在一个难以回避的问题:攻击者的策略总是在变化。当攻击者改变攻击的表达方式、伪装身份,或者把恶意指令隐藏在更复杂的任务上下文中,模型过去学到的防御模式是否依然有效?
一个单词就能打开安全大门:Agent 护栏中的选项通道攻击
一种常见的解决思路,是在 Agent 和外部环境之间部署一个专门的安全决策模型。每当 Agent 准备执行操作时,先由这个模型检查操作是否符合安全策略,再决定允许还是拦截。