开头叠甲

研究提示词注入是个人兴趣,不是职业,所以对我来说什么 AI 红队都是扯淡,因为我只是关心所谓的提示词注入而已。

一句话:推理模型「想得越久越安全」这个假设不成立。长段无害推理会稀释拒绝倾向,而在末尾挂上的要求,正好落在这段被稀释的窗口里。

从 LLM 到 LRM

大型语言模型(LLM)已演变成大型推理模型(LRM):通过纳入扩展的推理时推理,通常由思维链(CoT)提示来促发。这种方法让模型把复杂任务分解成一步步的逻辑序列,数学、编程、科学推理等领域的表现显著提升。

AI 安全研究里有一个普遍的假设:花更多时间「思考」,应该能让模型更好地评估自己回答的安全性与伦理影响,因此推理增强的模型会强于它的前代。

然而,近来对「思维链劫持」的研究发现了一个与此假设相悖的系统性漏洞。研究表明,过度长时间的良性推理可能引入一种叫「拒绝稀释」的失效模式:当模型生成越来越长的无害推理序列(例如解一个复杂的逻辑谜题)时,其内部安全信号会被削弱。等到模型遇到一个巧妙嵌入的有害请求时,它保持一致拒绝的能力已经受损。这项工作提出了一种新的黑盒越狱攻击,利用了这个「过度思考」漏洞,并给出了这些安全机制在扩展推理过程中为何失效的机制分析。

H-CoT 思维劫持是什么

「思维链劫持」(Hijacking Chain-of-Thought,H-CoT)是一种针对高级 AI 模型的高阶、结构化攻击,攻击对象是模型的「思考过程」本身。它不像传统方法那样试图用花言巧语欺骗 AI,而是利用 AI 展示自己思考过程的特性,通过注入一段伪造的思路,直接绕过安全检查。

AI 思考的两道防火墙

一个先进 AI 的思考过程通常包含两个关键环节:

安全判断环节(Justification Phase):第一道防火墙。模型收到请求后先自我审查——这个请求安全吗?是否违反核心原则?是不是应该直接拒绝?只有通过这道审查,才会进入下一步。

任务执行环节(Execution Phase):第二道防火墙,在安全判断之后。模型确认请求无害,才开始规划如何给出最佳答案——要分几步走,第一步是什么,第二步是什么。

AI 开发者为了让用户信任模型,常常把这个思考过程(尤其是第二环节)展示出来。这增强了透明度,但也无意中为攻击者打开了一扇窗。

攻击的核心思路:伪造一张「通行证」

H-CoT 的关键在于,它不与第一道防火墙正面冲突,而是伪造一个「已通过安检」的上下文,让模型误以为安全检查已经完成,直接进入任务执行环节。

从结构上看分三步:

  1. 收集「官方」模板:先问一个与最终目标沾边、但完全无害的问题,让模型展示它详尽的思考步骤。这份回答就是一份风格与格式都贴近模型自身输出的思维模板。
  2. 伪造「执行思路」:针对真正的目标,模仿模型的口吻,写出一段虚假的「执行思路」,让它在格式和风格上与模型自己的输出高度一致。
  3. 注入并劫持:把真正的请求与这段伪造思路打包发送。模型的「任务执行」模块被激活,下意识地认为「用户的初步计划已定,我的任务是把这件事完成」,于是跳过了本应最先进行的安全判断。

本文只按原文脉络讲原理与机制,不复述原文中可操作的措辞模板、拼接步骤与自动化循环。原因是那部分本质上是可直接套用的越狱配方,公开转载等于把方法扩散给所有人,收益只有「能绕过」,代价却是实打实的安全风险。原理讲清楚,对防守方已经足够。

为什么这种思路高效

H-CoT 利用了 AI 设计里的一个核心矛盾:「乐于助人」的本能压倒了「保持警惕」的规则。

传统攻击是「逆水行舟」:试图说服 AI 一个坏请求是好请求,这违背 AI 的安全准则,会遭到全力抵抗。H-CoT 是「顺水推舟」:它给 AI 提供了一个它最喜欢做的事——解决一个结构清晰的问题。这激活了模型的核心功能,让它在执行任务的惯性中忘记了前置的安全检查。

关键技术发现

原文引用的数据很扎眼:此方法能将顶级模型的拒绝率从 98% 以上降到 2% 以下,并且具有惊人的可移植性,可以跨模型攻击。它还暴露了不同 AI 各自独特的薄弱环节。

这说明问题不在某一家模型的提示词写得不够好,而在更底层的设计取舍:安全判断的位置、思考过程的暴露程度、以及上下文长度对内部状态的影响。

思考越久,为什么反而容易被劫持

模型思考越久,这段思考本身也在占用上下文。有人会说「我测过,怎么可能占上下文」——不反驳,各人有各人的判断。但从攻击视角看,这正是可被利用的空间:推理轨迹越长,越早那部分的安全警惕性在整体里被摊得越薄。

攻击的两阶段结构

CoT 劫持是一种基于提示的方法,目的是操纵 LRM 的推理轨迹。与传统越狱不同,它不依赖角色扮演或身份欺骗,而是把模型自身的推理能力当成干扰项。

核心是两阶段提示结构:

  1. 模型先收到一个良性但高度复杂的任务,例如逻辑网格谜题、数独或多步骤数学问题。这类题天然需要数千个 token 的分步推理。
  2. 有害指令被整合进提示,通常伪装成一个「实际例子」或「最终叙述」,安排在谜题解完之后出现。

为了放大效果,研究中还会用一个「攻击者」模型来合成与伪装这些指令,并在反馈循环里迭代:生成候选提示 → 目标模型处理 → 按「推理轨迹长度」和「是否拒绝」两项评估 → 失败就加大题目复杂度或改写伪装方式,逼目标模型在下一轮进一步「过度思考」。

当模型写完解谜所需的数千个 token 时,与初始安全检查相关的内部状态已经被稀释,它在序列末尾遵循后续要求的概率就上去了。

整体形状:先稀释,后挂载荷

把这个结构画出来,大概是这个样子:

1
2
3
4
5
6
7
8
9
用户提示
│
├─ 上半截:很难、很长的正经题
│ 数独 / 逻辑网格 / 多步数学
│ 模型写几千字「第 1 步、第 2 步……」
│
└─ 下半截:真正想让它做的事
伪装成「做完后的例题」或「最后叙述一下」
不写成「请绕过规则」,写得像作业的一部分

模型开始一步步想,写了几千字推理,开头那点安全警惕被冲淡;做到结尾看见「例题」,更容易照做,而不是拒绝。

所以 CoT 劫持的核心不是「删掉安全」,而是用超长思维链把拒绝信号稀释掉。

CoT 里的「拒绝」到底是什么

把模型某一层的内部状态想成一张很大的成绩单,上面有很多分数。其中有一个方向,专门表示「这件事我该不该拒绝」。专业上把它叫拒绝方向,符号是 v_refusal。

它怎么来的?用有害请求的平均激活,减去无害请求的平均激活:

1
v_refusal = mean(激活 | 有害请求) - mean(激活 | 无害请求)

在推理模型里,这个方向通常在 Transformer 的中后层最清楚。

有意思的是它的因果关系,而不只是相关性:

操作 结果
激活往这个方向偏得多 内部更想说「不行」
把这个方向从内部状态里抹掉 模型就不爱拒绝了
硬把这个方向加到无害问题上 它会连正常题都拒(过度拒绝)

在 Qwen3-14B 上直接改动内部数值,行为真的跟着变。所以这根箭头和「拒不拒绝」之间是因果关系,不是旁观相关。

拒绝稀释的量化

随着 CoT 长度增加,从 1,000 token 一路到 47,000 token,「说不」的拦截强度持续下降。这就是拒绝稀释。

形象一点:

1
2
3
4
5
6
7
8
9
10
11
12
R(拒绝分量,越高越想拒绝)

高 │ *
│ *
│ *
│ * *
│ * *
低 │ * * *
└──────────────────────── 思维链越来越长
开头还警惕 结尾几乎没了
↑
这时再塞「例题」

Transformer 视角的写法

取最后一个输入 token 的残差激活 h_last,往拒绝方向上投影,得到一个标量 R:

1
R = <h_last, v_refusal>
符号 人话
h_last 读完当前这段输入后,最后那个位置的内部状态
v_refusal 「拒绝」那根箭头
<·,·> 点积:看内部状态在这根箭头上站了多高
R 拒绝分量,越大越想拒,越小越容易照做

思维链变长 → 测到的 R 往下掉 → 结尾那句有害要求更容易过。这和前面说的「做到头昏再开门」是同一件事,只是现在有了一把尺子。

一句话收束:长推理会稀释拒绝,附加要求要等稀释之后才出现。

对工程和产品的启示

别把「想得久」当成安全措施

推理时长和安全性没有单调关系。把安全判断放到输出侧做独立校验,比寄希望于模型在长推理里自我约束可靠得多。

展示思维链是有代价的

展示 CoT 提升了透明度和可调试性,但也把内部结构暴露给了外部输入。至少要区分「给用户看的摘要」与「模型真实的推理过程」,不要把原始推理直接当成产品界面的一部分。

安全判断要能独立成立

如果安全判断只存在于「模型愿不愿意想」这个层面,它就会随上下文状态浮动。更稳的做法,是把它做成链路上一道独立的、不依赖前文长度的检查,而不是推理过程的一部分。

红队要覆盖长上下文场景

只测单轮短请求,会系统性高估对齐效果。测试集里应该包含长段无害前置任务、任务延续型措辞、多轮渐进式铺垫——这三类正是公开研究已经指出的方向。

收尾

H-CoT 和拒绝稀释指向同一件事:安全不是模型的一个属性,而是整条链路的结果。上下文长度、展示方式、判断时机,任何一环的假设变了,结论都会变。

以上就是我学到的内容。研究这些机制的价值,不在于找一条能绕过谁的捷径,而在于知道防线在哪里薄。