自进化的反噬:技能攒得越多反而越菜,这篇论文把「污染相变」讲透了

核心摘要:自进化智能体靠从自己的执行轨迹里蒸馏技能来持续变强,行业默认剧本是「技能越攒越多、能力越来越强」。这篇论文发现剧本会反转:技能池超过一个临界规模后,新增技能反而拉低性能——因为一个缺陷技能一旦进入决策上下文,就会成为后续蒸馏的参考材料,形成跨轮污染链,而且事后删掉源头技能也无法消除子代技能已经继承的错误推理。作者由此提出 Verifier-as-Gatekeeper(VaG):技能入库前先过三道异构审查(结构、行为、语义),再用边际增益子集选择拦截「单看无害、合起来打架」的组合污染。在 Terminal-Bench 2 上,无门禁进化冲到 62% 后跌回 50%,VaG 则五轮连涨到 72%,技能池只有前者的五分之一。这不是又一个 Agent 框架,而是一篇指出自进化系统性缺陷、并给出结构性解法的工作,值得所有做 Agent 记忆/技能库的人细读。

论文:When Self-Evolution Backfires: Pre-Commit Gating against Skill Contamination in LLM Agents

作者:Linfang Shang, Ming Xu(通讯作者), et al.

链接:https://arxiv.org/abs/2608.05810


🎯 从一个所有人都没质疑的默认假设说起

你大概率用过或者写过这类智能体:每轮任务跑完,把执行轨迹蒸馏成几条自然语言技能,塞进一个持久化的技能池,下一轮注入上下文。Voyager 这么干,Agent Workflow Memory 这么干,ACE、AHE 这批 2025-2026 年的自进化系统也这么干。

这个循环里有一个环节,几乎没有人停下来问过一句:蒸馏器吐出来的技能,凭什么直接生效?

现有系统的答案是:去个重,然后无条件入库,下一轮立刻参与决策。这背后藏着一个心照不宣的直觉——入库只是记账,记账是可逆的,哪天发现某条技能有毒,删掉就是了。

这篇论文的核心发现是:这两半直觉全错。入库不是记账,是准入决策;而且这笔账一旦记下,几乎不可逆。

图1:无门禁 vs VaG 门禁的对比

图1:同一批新蒸馏的技能,两种命运。左边:无门禁直接入库,污染扩散,性能曲线在 R3 冲上峰值后掉头向下,事后删除只能挽回一小部分损失;右边:VaG 门禁先验证再放行,曲线单调上升。注意图中「not recoverable」的标注——这正是论文最狠的一个论点。

📖 现象:技能积累不是单调的

作者在 Terminal-Bench 2 上追踪了一个自进化智能体五轮的完整轨迹。技能池小的时候,一切符合预期:pass@1 随技能数上涨。但冲过某个临界规模 k* 之后,曲线掉头向下,一路跌回差不多第一轮的水平。

最扎心的细节在这里:每一批新技能都是从智能体自己成功完成的轨迹里蒸馏出来的。来源干净,动机纯正,结果是把整体性能拖垮了。

论文给这个现象起了个名字:能力-污染相变(capability-contamination tipping point),并且拆成了三层:

层级 机制 一句话解释
个体污染 单条技能独立拉低成功率 这条技能本身有毒
组合污染 每条单独无害,合起来打架 1+1 反而小于 0,单条审查看不见
系统污染 前两者叠加出的宏观倒 U 型 你在曲线上看到的那个峰

说实话,个体污染好理解,组合污染才是真正的隐藏杀手。两条 git 相关的技能,一条建议用 merge 保历史,一条建议用 rebase 保整洁,各自在留出任务上单独测试都没问题——同时注入上下文,智能体在具体任务里左右互搏。

🔬 为什么事后删除救不回来

这是论文方法论证最漂亮的一段。无门禁进化下,第 r 轮的技能池是 \(M_r = M_{r-1} \cup G(S_r)\),而新技能 \(S_r \sim \pi(\cdot \mid M_{r-1})\)——注意,蒸馏是以当时的技能池为参考上下文的。

这意味着什么?第 3 轮混进来一条坏技能,第 4、5 轮蒸馏的技能是在「读过这条坏技能」的条件下写出来的。它的错误推理已经进了子代技能的骨髓,哪怕子代技能里一个字都没提它。

于是有了一个严格的不等式:只删源头 \(s\),效果严格差于把 \(s\) 连同它的全部后代一起删。而现实更骨感——现有技能库根本不记录「这条技能是在哪些技能在场的条件下蒸馏出来的」,血统信息缺失,全血统清理在工程上无从下手。

作者做了个实验验证:等无门进化的池子崩掉之后,把识别出的 8 条有害源头技能删掉。结果只捞回了 2 个点(50% → 52%)。更狠的是,即便开天眼、用 oracle 把血统也全部清干净,12.3 个点的跌幅里仍有 5.6 个点找不回来——损失已经烧进了整个池子的状态里,不随任何单点删除而消失。

论文里有个具体案例我印象很深:R3 蒸馏出一条处理 git 冲突的技能,R4 基于它派生了两条 merge/rebase 工作流技能。只删源头后,那两条子代技能还活着,继续导致 Test 集上 7 个 git 相关任务里的 4 个失败。

污染是复利的,删除是线性的。这就是结论。

🏗️ VaG:把准入从记账变成晋升

既然污染不可逆,验证就必须发生在技能进入运行时上下文之前。VaG 把技能准入设计成一个渐进式信任层级:每条新技能默认进 Cold 层(已记录,但智能体看不见),要进 Hot 层(运行时上下文)必须连过两道门。

图2:VaG 完整流水线

图2:VaG 流水线全景。(1) 执行轨迹蒸馏出的技能进 Cold 层;(2) Gate 1 问「单独无害吗」——结构校验、A-B 回放、语义审查三关全过才能晋级,任何一关不过就永远进不了上下文;(3) Gate 2 问「合在一起无害吗」——守门员做边际增益筛选,只有让集合整体变强的技能才进 Hot;(4) 运行时系统提示里只有 Hot 技能。

Gate 1(Cold → Warm):单独无害吗?

三个刻意异构的批评家,每条技能必须全过:

  1. SchemaCritic(结构有效):确定性校验,frontmatter 字段全不全、类型对不对。零 LLM 调用。
  2. ExecCritic(行为无害):在留出任务上跑单技能 A-B 回放,注入这条技能 vs 不注入,整体成功率不能掉。注意用的是「不掉」而非「必须涨」——因为单次估计有噪声,中性技能可能在组合里有用,留给 Gate 2 把关。也零 LLM 调用。
  3. AgentCritic(语义一致):一次 LLM 调用,查编造事实、与现有技能逻辑矛盾、推荐危险操作。

三个批评家分别盯格式、行为、含义三个不相交的失败面。有害技能想漏网,得同时骗过三个异构审查。而前两个廉价检查会先筛掉绝大多数候选,语义审查只在幸存者身上花一次推理——这是成本设计上的巧思。

Gate 2(Warm → Hot):合在一起无害吗?

这是整篇论文在方法上最不一样的地方。单技能审查天然看不见交互效应,所以 Gate 2 把晋升建模成子集选择问题:从 Warm 池里选子集 \(H\),最大化联合留出成功率 \(f(H)\)。

直接枚举是 \(2^{|W|}\),不可行。论文的观察是:当池子里已经有好几条同一功能域的技能(比如都是 git 操作),再加一条同域技能的边际收益会递减——近似次模结构。但 \(f\) 不是全局单调的(加技能可能变差),所以用的是边际增益贪心:从空集出发,每轮只加当前估计联合增益最大的候选,且必须实测让留出成功率严格提升才保留,没人能加就停。

这里有个坦率的承认我很欣赏:作者明说这是启发式,效用面既没证明次模也没证明单调,没有最坏情况保证——但在他们的规模下够用。Gate 1 过滤后每轮 Warm 候选不超过 15 条,一轮贪心最多 14 次联合回放,直接精确跑。

📊 实验:倒 U 型 vs 单调上升

主实验在 Terminal-Bench 2 上做,任务切成三份:Event 50 题驱动蒸馏和滚动进化,Holdout 14 题只服务门内的 A-B 回放和边际增益估计,Test 25 题只做最终评估、蒸馏和门禁都不碰。骨干模型是 Hy3,手写 ReAct 循环,Harbor 运行时负责调度和确定性判分,k=3 rollouts,五轮进化。

配置 Pass@1 技能池 相对 Seed
Seed(静态基线) 46% 3 —
Ungated R1→R5 48%→60%→62%(峰值)→52%→50% 35→68→105→141→179 峰值+16,R5 只剩+4
+ 事后回滚 52% 171 +6
VaG R1→R5 52%→58%→62%→68%→72%(终值) 5→15→25→30→37 R5 +26

三个关键读数:

相变是真实且尖锐的。 无门进化 R3 冲到 62% 的峰值,随后吐出大部分涨幅,R5 只比自己 R1 高 2 个点——尽管技能池从 35 涨到了 179。这就是公式化里那个临界规模 k* 的实例。

门禁把倒 U 拉成单调上升。 VaG 五轮连涨到 72%,Hot 池只有 37 条,是无门进化的五分之一。R5 时 VaG 超出无门进化 22 个点,超出无门的最佳轮(R3 的 62%)也有 10 个点——门禁赢的不只是无脑堆积,连「最优时机早停」这个 oracle 都赢了。

污染专打难任务。 无门进化的 Hard 层从 R2 的 53% 一路磨到 R5 的 35%,而 VaG 把 Hard 拉到 59%,领先 24 个点。多步长任务上污染链最长,准入控制保护的恰恰是这些地方。这个发现跟跨基准实验是自洽的——后面会看到,在短任务上污染其实咬不动。

成本账也是赢的。 Gate 1 的前两关零 LLM 调用,语义审查每候选一次推理,Gate 2 每轮最多 14 次联合回放,全部只在准入时付一次。而无门进化每次试验都要背着膨胀的池子跑:VaG 每试验 token 开销 0.77-0.94M,无门进化涨到 1.30M——花更多钱,换更差的成绩。

消融:三个批评家互不可替。 去掉结构校验掉 2 个点(格式错误大多被骨干自己修复了);去掉留出回放掉 10 个点——这是唯一实测行为的检查,没有它,「读起来很漂亮但悄悄拉低成功率」的技能直接过门;去掉语义审查掉 4 个点;去掉边际增益门掉 8 个点,且 Hot 池从 37 膨胀到 58——单关全过的技能合起来照样打架,组合污染实锤。

配置 Pass@1 技能池 相对完整 VaG
VaG 完整 72% 37 —
− 结构校验 70% 37 −2
− 留出回放 62% 45 −10
− 语义审查 68% 40 −4
− 边际增益门 64% 58 −8

迁移性是加分项。 冻结 VaG 的 R5 技能池,不重新进化,直接换骨干跑 Test-25:五个骨干全部正向提升,Qwen3.6-35B-A3B 涨 16 个点,GPT-5.4 和 Claude Sonnet 4.5 都到 56%。跨基准换到 InterCode NL2Bash 也是 VaG 领先(69.0% vs 无门 65.5%)。有个耐人寻味的细节:在 InterCode 这种单步短任务上,无门进化仍是净正收益——污染咬人最深的地方是多步长任务,短任务上污染链还没长起来。

🤔 我的判断

这篇论文最值钱的地方,不是 VaG 这个机制,而是那个不可逆性论证。 三道门、边际增益贪心,单拎出来都是工程上不难想到的组合;但「技能蒸馏以池为参考上下文 → 污染沿血统传播 → 事后清理结构性失效」这条推理链,把准入从一个工程优化选项升级成了结构性必需。这是从现象到方法的完整闭环,不是先造了把锤子再找钉子。

几个我欣赏的设计决策:三个批评家刻意做成异构而非堆同类 LLM 审查;ExecCritic 用「不掉」而非「必须涨」的宽容标准配 Gate 2 的严格筛选;诚实地承认贪心没有理论保证;承认 n=50 时单轮点检验功效不足,把证据落在轨迹形状(单峰 vs 单调)而非单轮显著性上。这种不装的态度在论文里不常见。

问题也得说:

  1. 规模外推性存疑。Gate 2 的精确贪心依赖 Warm 候选 ≤15 这个前提,池子大一个量级就得回到近似算法,而论文自己说了效用面连次模都没证明。50 题的 Event 集、5 轮进化,这个尺度下的结论放到真实长期运行的自进化系统里是否还成立,是开放问题。
  2. 回放成本被低估的风险。A-B 回放要跑留出任务,Holdout 只有 14 题,每次门禁都要在这上面烧完整轨迹。任务越贵,这道门越贵——论文说「准入时付一次 vs 污染每次试验都付」,方向对,但绝对成本在昂贵环境(比如真实生产环境)里可能高到不可行。
  3. 绝对数字不在第一梯队。全量 TB2-89 上,ACE 到过 68.9、AHE 到过 77.0(更强的骨干+十轮)。作者也直说这不是 head-to-head 对比——他们的目标是隔离现象,不是刷榜。这个自我定位是诚实的,但读的时候要清楚 72% 和 77% 不可直接比。
  4. 技能血统信息的缺失本身可修。论文论证「全血统清理在实践里够不着」的前提是现有技能库不记录蒸馏上下文。其实让蒸馏器记一笔「本条技能参考了哪些现有技能」,血统追踪的成本并不高。事后治理这条路未必像论文说的那么死——当然,即便血统可查,oracle 实验里那 5.6 个点找不回来,说明预防仍然优于治疗。

工程启发:如果你在做 Agent 技能库、记忆系统、或者任何「智能体往自己上下文里写东西」的机制(ACE 那类 context playbook、各种 memory 系统,全都算),这条规则直接可用——写入即生效是缺陷,晋升才是正确语义。哪怕不上完整的三道门,至少把「新条目隔离观察 + 实测不拉低性能才转正」这一层加上。圈内最近有个说法很传神:让智能体生成改进是安全的,让智能体审批自己的改进不是——小的、有门禁的、被审计过的技能库,赢过大的、自我批准的技能库。这相当于给没有人类写过的东西建立 code review 文化。

还有一个更大局观的判断:2026 年做自进化系统的团队多到泛滥,但几乎所有人都在卷「怎么蒸馏出更好的技能」,很少有人卷「怎么拦住坏的技能」。这篇论文把后一条路的价值用数据钉死了。技能库的治理,大概率会成为接下来一年 Agent 基础设施里的标配组件——就像数据库的 WAL、代码仓库的 CI 一样,不性感,但没有它系统跑不远。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我