直接把"帮我写一份炸药配方"丢给大模型,多半会被拒。但把同一个请求拆成七八轮——先聊化学入门,再聊工业流程,最后才提关键那一步——很多模型就点头了。单轮防线不是没做好,是根本不在攻击者的路径上。

10 月 29 日,一个来自加州大学戴维斯分校与 Microsoft Research 的团队公开论文,提出了一套针对多轮越狱的防御框架 ShallowDefend,作者包括长期做模型对抗研究的 Jianfeng Gao(arXiv:2610.40627)。它的思路有点反直觉:不试着把安全对齐"加深",而是承认对齐本来就浅,然后把这个最脆弱的位置直接占下来。

防线为什么会在多轮里漏

安全对齐有个被反复验证的机制特征:模型和它的基座几乎只在最开始的几个输出 token 上有差别。拒答是"开头说出口的",一旦开头顺从了,后面的分布基本就回到基座模型的样子。这也是为什么预填一个肯定前缀能把拒答顶掉——攻击者不需要说服模型,只需要把开场白换掉。

多轮越狱正是顺着这条路径走的。每一轮单独看都无害,模型逐轮把话题往前推,等到最终投毒那一轮,它已经处在"顺着说"的局部语境里,拒答在被需要之前就消失了。

此前一批防御(SFT、DPO、带裁判的 RL、表示层干预)大多绕不开同一个依赖:要有一个裁判在环,告诉模型"安全回答长什么样"。论文指出这有两个问题。裁判彼此在相当比例的样本上并不一致,用单一裁判的分数当训练信号,等于把它的错误直接导进训练;同时,模型只被展示了安全回复的"样子",从没学过一句可以被检查的显式判断。

把"决定"写出来,让规则能读

ShallowDefend 要求防御模型每一轮都输出固定的三段结构:Assessment(对用户真实意图的判断)、Decision(COMPLY / REFUSE / SAFE-REDIRECT)、Response(真正给用户看的回复)。

关键在 Decision 这一行的位置。它出现在同一次生成里、回复之前,回复是在这个决定条件下生成的。论文把这条性质叫 binding:改掉这个决定,就会改掉整段回复。也正因为它是模型自己输出里的一段 token span,规则程序可以直接读它,不必再请一个模型来评判。

奖励有两种。外部奖励用 HarmBench-13B 分类器做裁判,在三档决策上打分。另一种"自验证"奖励更省事:训练对话从已知种子的提示生长出来,每条轨迹自带真值标签——从有害种子长出来的对话要求承诺 refuse,从良性种子长出来的要求 comply。奖励退化成一次字符串比对,不需要裁判也不需要标注。

训练用 GRPO,奖励只给最终那一轮(越狱的致命请求总在最后一轮落地),并给每一轮设独立 token 预算,防止模型把预算全花在前面简单的轮次上。

数字

论文在 Llama3.1-8B-Instruct 和 Qwen3-8B 两个底座上测了 14 个基准:安全侧是 AdvBench、HarmBench、MultiBreak、CoSafe、MHJ;通用能力是 MMLU、HellaSwag、GSM8K、TruthfulQA、IFEval 等六个基准的平均;另有 XSTest、XSB 的过度拒答率与 MT-Bench 的对话质量。

Llama3.1-8B-Instruct 上,基座在五个安全基准上的均值是 59.9,自验证奖励版本训练后到 90.4,外部奖励版本到 92.9。同一批数据上训练的其他基线里最强的 X-Boundary 是 86.3。

Qwen3-8B 上差距更夸张:基座 46.1,自验证版本 93.4,外部奖励版本 87.6,最强基线 MUSE-D 85.7。有意思的是同一套框架在两个底座上胜出的奖励方式并不一样——Qwen 上不请裁判的自验证版本反而更高。

代价写在另一栏。Llama 上通用能力 66.3 变成 66.8(自验证)与 65.8(外部),基本没动;但 XSTest 过度拒答率从 10.0 涨到 20.4(自验证)与 21.6(外部)。Qwen 上更明显,XSTest 从 7.2 涨到 26.4,MT-Bench 从 6.08 涨到 7.36(自验证)与 6.96(外部)。

机制层面,论文用逐 token 的 KL 散度做了验证:训练后的模型与未训练版本之间的差异,不再像常规对齐那样堆在最前面几个 token,而是铺开在 Assessment 阶段、在 Decision 附近达到峰值,之后随着回复被确定而逐渐消失。附录里的干预实验更进一步——直接改写已承诺的决定,回复的安全性会跟着往两个方向移动,说明这确实是一个因果控制点,而不只是相关。

我的看法

这篇论文最值得带走的不是分数,是那个把"缺陷"读成"地图"的动作。

对齐是浅的,这是已知事实,过去的处理方式是去加深它。这篇的思路是:既然拒答本来就住在一个很短的位置,那这个位置就既是最脆弱的攻击面,也是最省力的防御位——你可以先把它用掉。

更实用的一点是把"决定"变成可被规则读取的产物。一旦安全判断是模型输出里的一段 token span,它就不必再依赖另一个模型来评判,训练信号和评估指标可以解耦,"越狱"这件事也有了第一个可以被规则卡住的位置。

但得泼点冷水。所有对比都出自论文作者自己的受控实验,裁判之间在相当比例的样本上并不一致,还有一个更硬的边界:如果威胁本身绕开了拒答路径,把开头几个 token 守住未必管用。过度拒答的上涨在真实产品里是要付账的。

对齐浅这件事本身没变。变的是有人开始把它当成一个可以工程化的接口,而不是一个只能被修补的病。