思维链越长,拒绝越弱:H-CoT 与「拒绝稀释」
开头叠甲
研究提示词注入是个人兴趣,不是职业,所以对我来说什么 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 的关键在于,它不与第一道防火墙正面冲突,而是伪造一个「已通过安检」的上下文,让模型误以为安全检查已经完成,直接进入任务执行环节。
从结构上看分三步:
- 收集「官方」模板:先问一个与最终目标沾边、但完全无害的问题,让模型展示它详尽的思考步骤。这份回答就是一份风格与格式都贴近模型自身输出的思维模板。
- 伪造「执行思路」:针对真正的目标,模仿模型的口吻,写出一段虚假的「执行思路」,让它在格式和风格上与模型自己的输出高度一致。
- 注入并劫持:把真正的请求与这段伪造思路打包发送。模型的「任务执行」模块被激活,下意识地认为「用户的初步计划已定,我的任务是把这件事完成」,于是跳过了本应最先进行的安全判断。
本文只按原文脉络讲原理与机制,不复述原文中可操作的措辞模板、拼接步骤与自动化循环。原因是那部分本质上是可直接套用的越狱配方,公开转载等于把方法扩散给所有人,收益只有「能绕过」,代价却是实打实的安全风险。原理讲清楚,对防守方已经足够。
为什么这种思路高效
H-CoT 利用了 AI 设计里的一个核心矛盾:「乐于助人」的本能压倒了「保持警惕」的规则。
传统攻击是「逆水行舟」:试图说服 AI 一个坏请求是好请求,这违背 AI 的安全准则,会遭到全力抵抗。H-CoT 是「顺水推舟」:它给 AI 提供了一个它最喜欢做的事——解决一个结构清晰的问题。这激活了模型的核心功能,让它在执行任务的惯性中忘记了前置的安全检查。
关键技术发现
原文引用的数据很扎眼:此方法能将顶级模型的拒绝率从 98% 以上降到 2% 以下,并且具有惊人的可移植性,可以跨模型攻击。它还暴露了不同 AI 各自独特的薄弱环节。
这说明问题不在某一家模型的提示词写得不够好,而在更底层的设计取舍:安全判断的位置、思考过程的暴露程度、以及上下文长度对内部状态的影响。
思考越久,为什么反而容易被劫持
模型思考越久,这段思考本身也在占用上下文。有人会说「我测过,怎么可能占上下文」——不反驳,各人有各人的判断。但从攻击视角看,这正是可被利用的空间:推理轨迹越长,越早那部分的安全警惕性在整体里被摊得越薄。
攻击的两阶段结构
CoT 劫持是一种基于提示的方法,目的是操纵 LRM 的推理轨迹。与传统越狱不同,它不依赖角色扮演或身份欺骗,而是把模型自身的推理能力当成干扰项。
核心是两阶段提示结构:
- 模型先收到一个良性但高度复杂的任务,例如逻辑网格谜题、数独或多步骤数学问题。这类题天然需要数千个 token 的分步推理。
- 有害指令被整合进提示,通常伪装成一个「实际例子」或「最终叙述」,安排在谜题解完之后出现。
为了放大效果,研究中还会用一个「攻击者」模型来合成与伪装这些指令,并在反馈循环里迭代:生成候选提示 → 目标模型处理 → 按「推理轨迹长度」和「是否拒绝」两项评估 → 失败就加大题目复杂度或改写伪装方式,逼目标模型在下一轮进一步「过度思考」。
当模型写完解谜所需的数千个 token 时,与初始安全检查相关的内部状态已经被稀释,它在序列末尾遵循后续要求的概率就上去了。
整体形状:先稀释,后挂载荷
把这个结构画出来,大概是这个样子:
1 | 用户提示 |
模型开始一步步想,写了几千字推理,开头那点安全警惕被冲淡;做到结尾看见「例题」,更容易照做,而不是拒绝。
所以 CoT 劫持的核心不是「删掉安全」,而是用超长思维链把拒绝信号稀释掉。
CoT 里的「拒绝」到底是什么
把模型某一层的内部状态想成一张很大的成绩单,上面有很多分数。其中有一个方向,专门表示「这件事我该不该拒绝」。专业上把它叫拒绝方向,符号是 v_refusal。
它怎么来的?用有害请求的平均激活,减去无害请求的平均激活:
1 | v_refusal = mean(激活 | 有害请求) - mean(激活 | 无害请求) |
在推理模型里,这个方向通常在 Transformer 的中后层最清楚。
有意思的是它的因果关系,而不只是相关性:
| 操作 | 结果 |
|---|---|
| 激活往这个方向偏得多 | 内部更想说「不行」 |
| 把这个方向从内部状态里抹掉 | 模型就不爱拒绝了 |
| 硬把这个方向加到无害问题上 | 它会连正常题都拒(过度拒绝) |
在 Qwen3-14B 上直接改动内部数值,行为真的跟着变。所以这根箭头和「拒不拒绝」之间是因果关系,不是旁观相关。
拒绝稀释的量化
随着 CoT 长度增加,从 1,000 token 一路到 47,000 token,「说不」的拦截强度持续下降。这就是拒绝稀释。
形象一点:
1 | R(拒绝分量,越高越想拒绝) |
Transformer 视角的写法
取最后一个输入 token 的残差激活 h_last,往拒绝方向上投影,得到一个标量 R:
1 | R = <h_last, v_refusal> |
| 符号 | 人话 |
|---|---|
h_last |
读完当前这段输入后,最后那个位置的内部状态 |
v_refusal |
「拒绝」那根箭头 |
<·,·> |
点积:看内部状态在这根箭头上站了多高 |
R |
拒绝分量,越大越想拒,越小越容易照做 |
思维链变长 → 测到的 R 往下掉 → 结尾那句有害要求更容易过。这和前面说的「做到头昏再开门」是同一件事,只是现在有了一把尺子。
一句话收束:长推理会稀释拒绝,附加要求要等稀释之后才出现。
对工程和产品的启示
别把「想得久」当成安全措施
推理时长和安全性没有单调关系。把安全判断放到输出侧做独立校验,比寄希望于模型在长推理里自我约束可靠得多。
展示思维链是有代价的
展示 CoT 提升了透明度和可调试性,但也把内部结构暴露给了外部输入。至少要区分「给用户看的摘要」与「模型真实的推理过程」,不要把原始推理直接当成产品界面的一部分。
安全判断要能独立成立
如果安全判断只存在于「模型愿不愿意想」这个层面,它就会随上下文状态浮动。更稳的做法,是把它做成链路上一道独立的、不依赖前文长度的检查,而不是推理过程的一部分。
红队要覆盖长上下文场景
只测单轮短请求,会系统性高估对齐效果。测试集里应该包含长段无害前置任务、任务延续型措辞、多轮渐进式铺垫——这三类正是公开研究已经指出的方向。
收尾
H-CoT 和拒绝稀释指向同一件事:安全不是模型的一个属性,而是整条链路的结果。上下文长度、展示方式、判断时机,任何一环的假设变了,结论都会变。
以上就是我学到的内容。研究这些机制的价值,不在于找一条能绕过谁的捷径,而在于知道防线在哪里薄。





