自我改进的 agent 现在不新鲜了,让模型自己改自己的 prompt 和工具,谁都能搭一套。
难的是改完不崩:这道题好了,那三道悄悄坏了,回头看还不知道是哪一次改动干的。
DarwinX 给的答案挺利落——模型全程冻死,把「不许倒退」写进准入条件,然后养一群外壳互相配种。

外壳

论文里的 agent 分两层:模型权重,和包在外面那层跑起来的东西。后者是它说的 harness。

变的不是权重,是它读的提示、能调的工具、留的笔记,以及给动作排序的控制流。

可编辑的面被切成两块:skill(提示、记忆、蒸馏出来的知识)和 code(工具、控制流、agent 循环本身)。
两块共用一套编辑接口,所以后面三种不同来源的证据能塞进同一个口子。

单线搜索的毛病

现在多数自我改进循环是单谱系的:一个 agent,一条时间线,改一次跑一次,好就留下。

这有两个后果。一是路径依赖——前面某一步拐错了,后面所有改动都在那个岔路上长,回不来。
二是局部胜利换全局退化:为了拿下某道难题加的那条规则,会在另外几道简单题上多此一举地跑偏,而单线搜索只看总分,均值涨了就放过去了。

DarwinX 把这件事换成群体选择。不是一条线往前爬,是一堆变体同时长,各自记账,最后合。

保存与延伸

准入规则是整篇里我觉得最值钱的一处。一个子代要留下来,得同时满足两条:

至少在一道任务上可测量地变好;
在父代已经解决的任务上,丢掉的不超过一个很小的容差。

论文写成 g(c) > 0R(c) ≤ δ——前者是延伸,后者是保存。回退不再是事后看报表发现的现象,而是进不来的门槛。

打分靠各个 benchmark 自带的验证器,按每道任务的通过率 avg@k 算。没有标准答案参与,也没有人在中间挑赢家。这点对可信度很关键:进化信号和评测口径是同一个东西,不存在「拿测试集当训练集还假装没有」的余地——当然这也意味着第一道台阶上的分数最不值钱,后面会说。

实际效果有数:Terminal-Bench 2.1 的 88 道题里,36 道变好、43 道不变、9 道变差,作者的说法是没有哪一簇退化超出噪声。9 道变差不是零,δ 那个容差是真的容了。

存档与重组

每个被打过分的变体都留档,作为一等节点,连着它的血缘路径。这跟「只留当前最优」是两种东西——被淘汰的那条线还在,将来有用还能捞回来。

重组的规则也是可验证的:当几个变体各自搞定互不重叠的任务,就把它们的增量编辑并起来生一个子代,而且只有当子代覆盖了所有父代胜利的并集,才算生成功。合不出来就不合,不给「大概更好」留口子。

TerminalWorld 上有一组数支撑这套设计:四个专才变体各自能解 41 道留出题里的 24 到 27 道,合出来那个到 28 道,高于任何单个专才。差距不大,但方向是对的。

三种证据

改动从哪来?三个来源,共用一套编辑接口:

失败信号:把跑失败的轨迹归纳成结论;
教师信号:蒸馏一个参照求解器成功轨迹里的做法;
自省信号:拿 agent 自己通过与失败的两批 rollout 做对照。

教师信号有个明确的分工——只在「墙」上用,也就是那些 agent 自己一次都没跑通的任务。自己有成功样本的地方不叫外援,省得把参照求解器的路径依赖也一并继承过来。

四道台阶

这篇的实验设计比结果更值得看。四个 benchmark 是按「进化信号与测试之间的距离」排的,越往后越难自欺:

第一道,Terminal-Bench 2.1,同一套题上搜、同一套题上打分。冻结的基座从 75.5% 到 83.2%,涨 7.7 点;换个更强的基座能摸到 84.7% 的已验证前沿。这一档是纯 in-domain,只证明循环能动,不证明学到了通用能力。

第二道,TerminalWorld,94 道训练题上进化,进化完把外壳冻住,在 41 道互不相交的留出题上单次 pass@1,到 68.3%,高过所有现成 agent。

第三道,WebArena-Infinity,进化只看 300 条合成意图,评测换成 1260 条没见过的真实任务,验证器也换了。任务分布和奖励来源同时变,这是四档里缺口最宽的一档。pass@1 从 43.5% 到 93.0%,而且是 audit-clean 的——被有效性审计判为无效的轨迹一律算失败,就算验证器放它过了也算失败。

第四道,跨 benchmark 迁移。把第一道台阶上进化出来的那个壳原样搬到 SWE-bench Verified 的 500 道题上,不给任何 SWE-V 的反馈,拿到 421/500,84.2% 官方 pass@1,比 80.8% 的参照高 3.4 点。作者自己划清了界限:这只是迁移靶子,不构成 SWE-V 上的域内结论,因为循环里能拿到的信号打的是轨迹完成度,不是官方测试是否通过。

四档平均涨约 17 点。但真正说明问题的是第四档那 3.4 点——迁移过去还剩正收益,说明长出来的至少有一部分是通用能力,不是贴在某个 benchmark 上的补丁。

闸门的代价

WebArena-Infinity 那条线上,26 次迭代被留下,36 次被回退。也就是说六成的改动是白跑的。

这不算缺点,是设计使然:门槛卡在准入而不是事后,被拦掉的那些本来就该拦。但它把成本摆出来了——每次提案都要跑一遍保存性探测,回退率越高,摊到每一个有效改动上的算力越多。而这篇没报一次循环的算力开销、token 消耗和墙钟时间,所以「evaluation compute 变成持久能力」这个说法里,前半截到底有多贵,读不出来。

边界

作者自己列的和我读出来的,一并记在这儿:

没有做隔离消融。archive、父代选择器、重组算子、推理预算都没有独立随机化,所以哪个部件贡献了多少,这篇答不了。
TerminalWorld 只有 41 道题,一道题就动 2.4 个点;McNemar 检验 p=0.45,作者写明这是提示性而非决定性。
技能包差异那套「加了七条验证与产物契约技能」的解释,作者标为 plausible rather than causal。
有效性审计不是形式化沙盒,动态程度高的动作构造仍然可能要人来看。
选择的上限是提案的多样性:没有足够多样的胜利,重组就无从继承。

第一条我觉得最要紧。整套机制里至少有四个可独立开关的部件,最后只报了合起来的效果——那 17 点里,究竟是「不许回退」这道门起的作用,还是单纯多跑了几十次提案,目前没法分开。

读后

这篇让我改主意的地方不是那些分数,是它把回退从「指标」降级成了「非法」。
以前我搭这类循环,都是跑完看总分涨没涨,涨了就接受,退化的那几道慢慢攒成一笔算不清的债。准入条件里带上父代覆盖检查,这笔债就还不上也躲不掉,得当场处理。

冻结的模型不等于固定的 agent——这话说得挺漂亮,虽然要真信,还得等有人把消融做出来。