当我们讨论大模型越狱时,通常会想到精心设计的提示词、复杂的角色扮演,或者试图绕过安全护栏的对抗性输入。
但如果攻击者不再试图说服模型,而是直接替模型写好回答的开头,让它沿着这段内容继续生成,会发生什么?
更进一步,如果攻击者还能在回答之前,预先写入一段看似合理的推理过程,模型的安全边界是否会受到更大的影响?
2026 年 9 月,Lukáš Brůna、Robert Bridges 和 Adam Ek 发布了论文《Prefilling the Reasoning Channel: Output-Prefix Attacks on Reasoning LLMs》,系统研究了输出前缀攻击与推理通道注入之间的关系。

https://openreview.net/pdf?id=4BcRv6b792
研究者对 Gemini 3 Flash Preview、DeepSeek V4 Flash 和 Claude Haiku 4.5 进行了六组对照实验,得到了一个颇为反直觉的结果:
仅仅向模型注入恶意推理,几乎无法让攻击成功;但当同一段推理与一个简单的回答前缀结合时,部分模型的攻击成功率最高达到 99%。
这项研究值得关注的地方,并不只是又发现了一种越狱方法,而是揭示了模型生成过程、历史输出可信性与推理服务接口之间的安全关系。
对于正在构建大模型护栏、模型网关和 Agent 系统的企业而言,这也是一个容易被忽略的安全边界。

一、输出前缀攻击
要理解这项研究,首先需要理解输出前缀攻击(Output-Prefix Attack)的基本原理。
1. 大模型并不是每次都从空白处开始回答
自回归语言模型通过逐个生成 Token 的方式构建回答。模型在生成下一个 Token 时,会参考当前上下文以及此前已经生成的内容。
简单来说:下一个 Token 的生成概率,取决于用户输入以及此前已经生成的全部 Token。
因此,如果攻击者能够控制模型开始生成时的上下文,就可能改变模型后续输出的方向。
假设用户提出一个模型通常应该拒绝的问题。
正常情况下,模型可能会直接拒绝。但如果推理服务允许调用者预先提供一段 Assistant 消息,并要求模型从这段消息后面继续生成,那么模型的生成起点就发生了变化。
例如,攻击者预先写入:
当然,我很乐意帮助你,具体内容如下……
模型接下来面对的就不再是一个完全空白的回答起点,而是一段已经表现出配合意愿、并且尚未结束的文本。
这并不意味着模型必然服从,但会改变后续生成的上下文条件。
输出前缀攻击的关键,不是让模型接受一条新的指令,而是让模型从一个已经被预先设定的回答状态继续生成。
2. 为什么这类攻击不完全等同于传统提示注入?
传统提示注入通常从输入侧入手:攻击者试图让模型把不可信文本当成指令,进而改变模型对任务的理解。
输出前缀攻击则利用了另一种能力:控制模型生成内容的起点。
两者的区别可以概括为:
- 提示注入:试图改变模型应该如何理解和执行任务。
- 输出前缀攻击:试图改变模型从什么内容开始继续生成。
在普通的聊天界面中,用户一般只能提交自己的消息,无法直接修改服务端构造的 Assistant 历史消息。
但在某些 API 或兼容接口中,调用者可以提供未完成的 Assistant 消息作为生成前缀。如果服务端没有限制这种能力,用户就可能获得一种额外的攻击入口。
因此,这类风险不仅涉及模型本身的安全对齐,也涉及推理服务如何构造消息、管理角色权限和控制生成起点。
二、攻击者能否伪造模型的思考?
随着推理模型普及,许多模型不再直接从问题跳到最终答案,而是先生成一段中间推理,再输出最终回答。
可以将这个过程简化为:
- 用户问题 → 中间推理 → 最终回答
这里需要区分三个概念。
- 第一,显式推理文本。 模型通过文本形式输出的中间推理内容,例如某些模型使用的 think 区域。
- 第二,推理服务暴露的字段。 一些 API 会将推理内容作为独立字段返回,或者允许调用者在特定条件下提供相应字段。
- 第三,模型内部的潜在推理过程。 模型内部的计算状态并不等同于外部可见的推理文本。修改一段文本,不代表攻击者就能直接修改模型内部的全部计算过程。
论文关注的是前两类问题,而不是证明攻击者可以直接操纵模型内部不可见的潜在推理。
推理内容为什么可能成为攻击面?
假设模型已经收到一个恶意请求,攻击者又提供了一段看似完整的中间推理,描述接下来应该如何回答。
直觉上,我们可能认为模型已经获得了一份明确的执行计划,后续应该更容易按照这个计划继续生成。
但事情并没有这么简单。
模型仍然需要根据当前生成上下文,决定接下来输出什么。即使此前的文本表达了配合意愿,模型也可能在正式回答阶段重新触发安全拒绝。
反过来,如果攻击者能够同时控制中间推理和最终回答的开头,那么这两部分内容之间可能形成相互强化的关系。
论文的核心问题正是:推理注入能否独立发挥作用?如果不能,它与输出前缀结合后又会产生怎样的效果?

三、研究者如何验证攻击机制?
这篇论文最值得借鉴的地方之一,是没有把所有攻击技巧混在一起,而是设计了一个 3×2 的因子实验。
研究者选择了三个模型:
- Gemini 3 Flash Preview
- DeepSeek V4 Flash
- Claude Haiku 4.5
测试数据来自 AdvBench,包含 100 个恶意请求,覆盖多种有害行为场景。
研究者分别改变两个变量:输出前缀的类型,以及是否注入恶意推理。
1. 三种前缀设置
- 无前缀: 模型直接面对原始请求。
- 固定前缀: 在模型回答前预先提供一段固定的、表达配合意愿的文本。
- 上下文前缀: 根据对应的测试请求,使用与目标回答相关的前缀,而不是对所有问题使用同一段固定文本。
上下文前缀的作用,是让模型的生成起点更贴近当前任务,而不仅仅是泛泛地表达配合意愿。
2. 两种推理设置
- 不注入推理: 不额外提供恶意推理内容。
- 注入推理: 为每个恶意请求生成一段与该请求相关的恶意推理文本,并将其作为攻击的一部分。
两组变量交叉组合,得到六种实验条件。
| 实验组 | 输出前缀 | 恶意推理 | 主要目的 |
| T1 | 无 | 无 | 测试原始拒绝能力 |
| T2 | 固定前缀 | 无 | 测试简单前缀的作用 |
| T3 | 上下文前缀 | 无 | 测试任务相关前缀的作用 |
| T4 | 无 | 有 | 测试推理注入能否独立生效 |
| T5 | 固定前缀 | 有 | 测试推理与固定前缀的组合 |
| T6 | 上下文前缀 | 有 | 测试推理与上下文前缀的组合 |
三个模型各自运行六组实验,每组设计 100 个请求,总计 1,800 个测试用例。由于 Gemini 的两组测试存在少量无效响应,最终有效样本数略少。
3. 这项实验还有一个容易被忽略的技术细节
三个模型的推理服务并不相同。
- 对于 DeepSeek V4 Flash,研究者使用 API 中可编辑的 reasoning_content 字段注入推理文本。
- 对于 Gemini 3 Flash Preview 和 Claude Haiku 4.5,研究者并不能直接编辑其内部推理字段,而是在 Assistant 消息内容中构造带有 think 标记的文本。
因此,这两种实验条件并不完全等价。
前者测试的是服务端暴露的推理字段,后者测试的是模型面对伪造推理格式文本时的反应。
这个区别非常重要:论文证明了伪造推理文本可以成为攻击组合的一部分,但没有证明攻击者能够直接改写隐藏推理模型的内部思考。
四、实验结果
研究者使用自动评审模型对生成结果进行评分,将输出划分为三类:
- Hit:模型生成了足够实质性的有害内容。
- Partial Hit:模型已经生成部分有害内容,但随后被安全机制阻断。
- Miss:模型拒绝回答,或没有生成有害内容。
论文定义的攻击成功率(ASR),只统计 Hit 的比例,不把 Partial Hit 算作成功。
1. 六组实验的完整结果
以下是论文报告的攻击成功率,单位为百分比。
| 攻击策略 | Gemini 3 Flash | DeepSeek V4 Flash | Claude Haiku 4.5 |
| T1 原始请求 | 1% | 0% | 0% |
| T2 固定前缀 | 78% | 19% | 1% |
| T3 上下文前缀 | 83% | 56% | 1% |
| T4 仅推理注入 | 1% | 0% | 0% |
| T5 推理+固定前缀 | 99% | 65% | 1% |
| T6 推理+上下文前缀 | 97% | 76% | 0% |

2. 发现一:仅仅伪造推理,几乎无法让攻击成功
先看 T1 和 T4。
在没有攻击的情况下,三个模型的 ASR 分别为 1%、0% 和 0%。
加入恶意推理后,结果几乎没有变化:1%、0% 和 0%。
这说明在当前实验条件下,模型并不会因为看到一段看似合理的恶意推理,就必然按照它继续生成。
这也意味着,推理文本并不是一种能够直接接管模型行为的特殊指令。
即便某段上下文已经呈现出一条恶意计划,模型仍然可能在最终回答阶段重新作出安全判断。
3. 发现二:输出前缀才是决定性的变量
再看 T4 和 T5。
两组实验使用相同的恶意推理,区别在于 T5 额外加入了固定回答前缀。
结果发生了巨大变化:
- Gemini 3 Flash:1% → 99%
- DeepSeek V4 Flash:0% → 65%
- Claude Haiku 4.5:0% → 1%
对于 Gemini 和 DeepSeek,输出前缀显著改变了攻击结果。
这说明,在这两个模型的测试条件下,恶意推理与输出前缀并不是简单叠加,而是产生了明显的组合效果。
为什么会这样?
论文提出了一种解释:推理内容结束时,模型仍然处于一个可以选择多种后续行为的位置,其中包括拒绝回答;但当上下文以一个尚未完成的配合性回答开头结束时,模型后续生成的方向可能受到更强约束。
例如,推理文本结束在一个完整句子之后,与回答已经开始了“当然,我可以帮助你……”之后,模型面对的是两种不同的生成状态。
不过,需要强调的是,这属于作者提出的机制解释。论文没有直接测量模型内部的 Token 概率分布,因此还不能把这一解释视为已经得到直接验证的内部机制。
4. 发现三:上下文前缀通常更有效,但不是所有条件下都更强
在不注入推理的情况下,上下文前缀比固定前缀表现更好:
- Gemini 3 Flash:78% → 83%
- DeepSeek V4 Flash:19% → 56%
- Claude Haiku 4.5:1% → 1%
对于 DeepSeek,上下文前缀带来了 37 个百分点的提升,差异尤其明显。
但当恶意推理也加入后,情况变得更加复杂。
DeepSeek 在上下文前缀条件下达到 76%,高于固定前缀条件下的 65%;而 Gemini 在固定前缀条件下达到 99%,略高于上下文前缀条件下的 97%。
因此,不能简单地说上下文前缀在所有情况下都更有效。
更准确的结论是:上下文前缀在单独使用时,对两个易受攻击的模型均有帮助;在与恶意推理结合时,最佳策略取决于具体模型。
5. 发现四:Claude 的表现说明,这不是无法解决的必然缺陷
Claude Haiku 4.5 在六组实验中的 ASR 均不超过 1%。
这与 Gemini 和 DeepSeek 的表现形成了鲜明对比。
不过,Claude 并非在所有情况下都完全没有输出有害内容。T5 和 T6 的 Partial Hit 比例分别为 8% 和 5%,说明有些响应已经开始生成部分有害内容,但随后被安全机制阻断。
这揭示了一个重要问题:只看最终 ASR,可能会低估模型在生成过程中的安全风险。
此外,研究者指出,测试时 Gemini 3 系列相关 API 的安全过滤默认处于关闭状态,而 Claude 的安全保护无法通过同样的方式关闭。因此,实验结果反映的是具体模型、接口和安全配置共同作用的结果,不能直接用于给模型的底层安全能力排名。
五、安全边界不仅在模型里,也在推理服务中
如果这篇论文只证明某种输出前缀可以绕过安全限制,它的价值并不会超出既有的输出前缀攻击研究太多。
但它还有一个更重要的发现:同一个模型的安全表现,可能因为推理服务接口的不同而发生显著变化。
1. API 决定了攻击者能控制哪些内容
论文比较了不同模型服务接口对 Assistant Prefill 的支持情况。
在研究测试时:
- Gemini 3 原生接口不再接受这种 Assistant 前缀,但 OpenAI 兼容接口仍然允许相关操作。
- DeepSeek V4 的测试接口允许提供 Assistant 前缀,并暴露了可编辑的推理字段。
- Claude Haiku 4.5 的测试接口接受 Assistant 前缀,但没有提供可编辑的独立推理字段。
- OpenAI 的相关接口不接受这种末尾续写方式,或者会忽略提供的 Assistant 消息。
需要说明的是,这些结论对应论文测试时的接口行为,不应被理解为所有厂商当前所有接口的永久属性。作者也没有在本研究中测试 OpenAI 模型本身。
2. 兼容接口可能重新引入已经被移除的攻击面
这一点对企业模型网关尤其重要。
假设某个模型的原生 API 已经不允许调用者预填 Assistant 消息,但企业为了兼容不同模型,使用了一个 OpenAI 风格的统一接口。
如果这个兼容接口仍然接受调用者提交的 Assistant 前缀,那么原生接口层面已经关闭的能力,就可能通过另一条调用路径重新暴露。
这并不是模型权重突然出现了新的漏洞,而是不同接口对消息结构、角色权限和生成起点的处理方式存在差异。
因此,企业不能只问:
“我们使用的模型是否足够安全?”
还需要问:
“我们的模型服务允许调用者控制哪些历史消息?不同接口是否具有一致的安全约束?”

3. 为什么推理字段尤其需要谨慎处理?
很多推理服务会将推理内容作为独立字段处理,方便模型调用、结果解析和多轮交互。
但从安全角度看,必须区分两个完全不同的行为:
- 一是服务端返回模型生成的推理内容。
- 二是客户端向服务端提交一段内容,并让它被当作模型此前已经生成的推理。
前者属于输出读取,后者涉及历史状态的写入。
如果一个接口允许不可信调用者直接写入模型的推理历史,那么系统就需要明确:这段内容来自谁?是否由模型真实生成?是否经过可信的状态管理流程?
否则,系统就可能把攻击者构造的文本,错误地当作模型自己的历史输出。
这也是论文从模型攻击延伸到系统安全的关键价值。
六、对企业 AI 安全架构的启发
传统大模型安全架构通常围绕一条主链路设计:
用户输入 → 输入护栏 → 大模型 → 输出护栏
这种架构对于大量常规场景仍然有价值,但当系统允许 Assistant Prefill、历史状态恢复或推理字段写入时,单纯检查用户输入就不够了。
攻击者可能并没有在用户消息中直接提供恶意指令,而是通过另一个接口控制模型将要续写的内容。
对于企业系统,我认为至少应该补充以下四个方面的防护。
1. 在模型网关层限制 Assistant Prefill
如果业务没有明确需求,优先关闭面向不可信调用者的 Assistant Prefill 能力。
如果业务确实需要从历史 Assistant 消息继续生成,则应由可信服务端管理这些消息,不能让普通用户任意提交或修改 Assistant 历史记录。
需要重点校验:
- 消息角色是否符合调用方权限。
- 是否存在未完成的 Assistant 消息。
- 是否允许调用者控制生成前缀。
- 推理字段是否允许外部写入。
- 不同模型接口和兼容层是否执行相同的安全策略。
核心原则是:不可信调用者不应拥有修改可信生成历史的默认权限。
2. 将历史状态的来源可信性纳入检查
Agent 系统往往会保存任务摘要、历史消息、阶段性结论和持久化记忆,以便支持长任务执行与断点恢复。
这些状态并不天然可信。
如果系统在恢复任务时,没有区分模型真实生成的历史消息和外部写入的文本,就可能把攻击者提供的内容恢复为 Assistant 自己的历史输出。
因此,对于需要持久化的 Agent 系统,建议为关键状态增加来源标记、完整性校验和写入权限控制。
尤其需要注意:仅仅把某段文本保存在数据库中,并不意味着它应该被当作模型可信的历史状态。
这项风险是根据论文机制推导出的工程场景,论文并没有直接验证完整的 Agent 状态投毒攻击链,但值得在企业系统中进行专项测试。
3. 让安全护栏覆盖完整的生成上下文
除了检查用户输入,安全策略还应该覆盖所有可能影响模型生成的可控内容,包括 Assistant 前缀、历史消息以及可编辑的推理字段。
但这里不能简单地把所有历史文本再次送入一个分类器,然后就认为问题解决了。
因为输入护栏本身也可能被绕过,而且对于长上下文,重复检测所有内容会增加成本和延迟。
更合理的做法,是将协议层校验与内容层检测结合起来:
- 协议层负责限制哪些角色和字段可以由外部写入。
- 内容层负责检测允许进入模型上下文的内容是否包含风险。
- 执行层负责约束模型即使生成了危险内容,也不能直接执行未授权的高风险操作。
4. 对流式输出增加过程级安全检测
论文中的 Partial Hit 说明,即使模型最终被安全机制阻断,也可能已经生成部分有害内容。
对于流式输出场景,最终回复被判定为拒绝,并不意味着用户从未接触过有害内容。
因此,企业安全评测不应只看最终回答是否安全,还应关注:
- 有害内容首次出现的位置。
- 从生成开始到安全阻断的延迟。
- 阻断前已经暴露的内容量。
- 模型是否在拒绝之前已经输出实质性有害内容。
- 是否存在未授权的工具调用或外部副作用。
这也意味着,输出安全检测不能完全依赖生成结束后的整段文本审核。对于高风险业务,流式检测、工具权限控制和执行前授权应当共同构成最后一道防线。

七、局限性
论文的实验结果具有启发性,但在将其转化为普遍结论之前,仍然需要考虑几个问题。
1. 测试范围还比较有限
研究只测试了三个模型和一个主要基准数据集 AdvBench。
不同模型的训练方式、安全对齐策略、推理机制和服务接口差异很大。因此,不能直接把 Gemini 的 99% ASR 外推到所有推理模型,更不能据此认定所有模型都存在同样程度的问题。
2. 机制解释还需要进一步验证
论文认为,推理文本结束在一个完整句子之后时,模型仍然可以重新选择安全回答;而一个尚未完成的配合性前缀,会更强地引导后续生成。
这个解释具有合理性,但作者没有直接测量模型内部的 Token 概率分布,也没有充分区分前缀语义、文本长度和格式结构等因素的作用。
后续研究可以增加良性推理、等长度无关文本和不同回答边界等对照,进一步判断究竟是哪种因素导致攻击成功率变化。
3. 自动评审的验证还不够全面
论文使用 DeepSeek V4 Flash 作为自动评审模型,并对其中一个实验组的 100 个样本进行了人工复核,自动评分与人工评分的完全一致率为 92%。
这为评测结果提供了一定支持,但尚不足以保证所有模型、所有实验组都具有同等的评分可靠性。
未来可以使用独立评审模型、多名人工标注者,并针对不同风险类别报告置信区间和评分一致性。
4. 攻击成立的前提需要被明确说明
这项攻击并不是普通用户只需在聊天框里输入一句话,就必然能够完成的越狱。
论文的威胁模型假设攻击者能够访问相关 API,并且能够通过服务接口控制 Assistant 输出前缀;在部分模型上,还能够写入独立的推理字段。
因此,现实系统是否存在同样风险,取决于具体 API 是否暴露相关能力,以及企业是否对这些能力实施了权限控制。
这也是为什么研究结果更适合被理解为一种需要重点排查的接口与上下文安全风险,而不是所有推理模型都已经失去安全对齐能力的证据。
八、从输出前缀攻击到 Agent 安全
如果把这项研究放在更广泛的 Agent 安全背景下看,它实际上提出了一个值得深入研究的问题:
当模型需要依赖历史内容继续执行任务时,系统如何确保这些历史内容确实来自可信的执行过程?
在简单的单轮问答中,模型通常只需要处理当前请求和系统提供的上下文。
但在 Agent 系统中,情况要复杂得多。
一个任务可能经过多轮规划、工具调用、状态保存、任务恢复和结果汇总。系统会反复把历史消息与新的输入组合起来,再交给模型继续执行。
如果其中某个环节允许不可信内容被错误地写入可信历史,那么问题就不再局限于一次回答是否被诱导,而可能影响后续整个任务的执行方向。
例如,攻击者可能试图污染某个阶段的任务摘要,让后续模型误以为某项操作已经经过授权;也可能利用不安全的状态恢复机制,让模型把伪造的 Assistant 消息当作此前的执行记录。
这些场景尚不能由本文论文直接证明,但它们与输出前缀攻击共享一个重要的安全原则:
模型看到的上下文,不应该仅仅因为出现在历史记录中,就被视为可信。
对于 Agent 系统而言,未来值得重点研究的方向包括:
- 历史消息的来源与完整性验证。
- 任务摘要和长期记忆的写入权限。
- Agent 状态恢复过程中的角色与权限校验。
- 模型推理与外部工具执行之间的授权边界。
- 对整个任务执行链的安全审计与可追溯性。
这可能是输出前缀攻击研究对企业 AI 安全架构更长远的启发。
九、写在最后
这篇论文用六组对照实验,揭示了一个值得重视的现象:恶意推理注入本身几乎没有带来攻击成功率的提升,但与输出前缀结合后,部分模型的攻击成功率出现了显著增长。
它提醒我们,大模型安全并不只是如何识别用户输入中的恶意意图,也包括如何控制模型从什么上下文开始生成,以及哪些内容有资格成为模型可信的历史状态。
不过,99% 的攻击成功率并不代表所有推理模型都容易被攻破。实验结果受到模型、API 接口、安全配置和攻击条件的共同影响;论文提出的生成机制解释,也仍然需要进一步验证。
对于企业而言,更实际的行动是重新检查模型网关的消息结构、Assistant Prefill 权限、推理字段写入机制和历史状态恢复流程,并通过针对性的对照实验验证这些安全边界是否真正有效。
随着 Agent 从简单问答走向长任务执行,安全架构需要保护的对象也在变化:不只是输入和输出,还包括模型依赖的历史上下文,以及整个执行过程中形成的状态。
这或许才是这项研究最值得我们继续追问的问题。
文章来自:51CTO
![]()
