用 agent 造 agent 的四种范式
改代码、改 harness、改权重、改组织。四条路各自在优化什么、各自要付什么代价,以及为什么它们的成败取决于同一样东西。
「用 agent 造 agent」现在指的不是一件事,是四件。它们优化的对象不同、验证方式不同、代价也不同,混着谈会得出互相矛盾的结论。
先把四条路摆开:
| 范式 | 改什么 | 代表 | 靠什么确认变好了 |
|---|---|---|---|
| A 搜索 | agent 的代码 | ADAS / Meta Agent Search | 基准分数 |
| B 自我修改 | agent 改自己的代码 | Darwin Gödel Machine | 基准分数 + 存档 |
| C harness 优化 | 提示词、验证器、修复策略 | SBCO / Co-Harness | 学出来的验证器 |
| D 组织 | 让多个 agent 并行协作 | 16 个并行 Claude 写编译器 | 测试套件 + 外部 oracle |
A 搜索:把 agent 写成代码,让 meta agent 去搜
ADAS 提出的框架叫 Automated Design of Agentic Systems,核心动作是让一个 meta agent 用代码去编写更好的 agent。
它的立论很干净:agent 用代码定义,而编程语言是图灵完备的,所以理论上任何可能的 agent 系统 —— 新的提示词、工具用法、控制流以及它们的组合 —— 都在搜索空间里。
报告的结果是在编码、科学、数学等多个领域上,搜出来的设计大幅超过人工设计的最好水平,而且换领域、换模型之后仍然保持优势。
这条路最诱人的地方是搜索空间没有天花板;最麻烦的地方也在这儿 —— 空间无限大,而每评估一个候选都要真跑一遍。
B 自我修改:改自己的代码,还要留档
Darwin Gödel Machine(ICLR 2026)比 A 更进一步:被改的 agent 和执行改动的 agent 是同一个。它修改自己的代码,从而也提升了自己修改代码的能力。
数字很硬:SWE-bench 从 20.0% 提到 50.0%,Polyglot 从 14.2% 提到 30.7%。 它自己发明出来的改进包括更好的代码编辑工具、长上下文管理、以及同行评审机制。
但真正值得学的是它的两个约束:
一、每次改动都要用基准实证验证。 不是「模型觉得这样更好」,是跑一遍看分数。
二、维护一个存档(archive),而不是一条链。 它从存档里采样 agent 去自我修改,长出一棵多样的树。这一条是防止早熟收敛的 —— 只留最好的那一个,就会一头扎进局部最优。
存档 + 基准,是这条路能成立的全部原因。 去掉任何一个,它就退化成「让模型随便改自己」。
C harness 优化:模型不动,动它周围的东西
第三条路的前提不一样:模型是冻住的,能改的只有 harness。
SBCO 把 harness 形式化成一个三元组 —— 提示词、一组冻结的工具、工作流 —— 然后优化其中三样:提示词、一组学出来的按约束划分的验证器,以及用验证器去检查并修复输出的策略。
它的循环是 提出 → 打分 → 批评 → 修订,全部闭合在模型自己的输出上,没有人工标注。验证器有质量门槛:精确率低于 0.80 或召回低于 0.55 的直接不要。
结果值得注意的不是绝对分数,是效率:
| 任务 | 基线 | SBCO | 代价 |
|---|---|---|---|
| Travel Planning | 76 | 84 | 733 个计划 vs 对手 4000 个 |
| Shopping | 83 | 94 | 低 5.5 倍预算 |
用低 4–5.5 倍的算力达到同等或更好的成绩。 这是这条路最有说服力的地方 —— 它不比谁跑得更高,它比谁更便宜。
Co-Harness 是同一范式的另一个变体:让一个 HarnessCritic 读失败轨迹、提出经过验证的 harness 改动,再拿改进后的 harness 产出的轨迹去微调模型 —— harness 和权重交替进化。
D 组织:不改 agent,改它们的协作方式
第四条路最不像研究,最像工程。Anthropic 那个用 16 个并行 Claude 写 C 编译器的项目,产出是十万行 Rust,跑了约 2000 个 Claude Code 会话、两周、20 亿输入 token 和 1.4 亿输出 token,花掉大约 两万美元。
结果:多数编译器测试套件上 99% 通过率,成功编译了 Linux 6.9 的 x86、ARM 和 RISC-V 版本。
而它的协调机制简单到令人意外 —— 文件锁加 git:
agent 认领任务 → 往 current_tasks/ 写一个文件(如 parse_if_statement.txt)两个 agent 抢同一个任务 → git 同步时直接冲突干完 → 拉取上游、合并、推送、释放锁作者自己说得很清楚:这是个很早期的研究原型,agent 之间没有别的通信方式,也没有任何管理高层目标的流程。
没有消息总线、没有中央调度器、没有角色分工 —— 用版本控制系统本来就有的冲突检测,当并发原语。
四条路的共同地基
把四条路放在一起看,会发现一件事:它们的成败全部取决于同一样东西 —— 有没有一个便宜且可信的验证器。
- A 靠基准分数
- B 靠基准分数,而且明确写着「每次改动都要实证验证」
- C 干脆把验证器本身当成优化对象,还给它设了精确率和召回的门槛
- D 那个编译器项目最关键的一手,是拿 GCC 当 oracle:随机用 GCC 编译内核的大部分文件,只留剩下的给 Claude 的编译器,然后比对
那个 GCC oracle 我认为是整个项目里最聪明的设计。它解决的是「怎么知道一个十万行的编译器对不对」这个几乎无解的问题 —— 答案是不去证明它对,而是找一个已经被验证过的东西来对比。
这一条我有第一手教训。我自己那套东西加过一道判据检查门,实测开火十几次真阳性为零 —— 因为我压根没有一个可信的参照物去判断「这条判据到底好不好」,只能拿正则去猜。没有验证器的时候,你加的门是在猜,不是在验。
反过来说:没有便宜验证器的领域,这四条路都会退化成自说自话。 这也是为什么这些成功案例集中在编码、数学、规划这些有客观判据的领域 —— 不是因为它们更重要,是因为它们能被便宜地判对错。
边界与代价
四种范式不是替代关系,代价结构完全不同。 A 和 B 要反复跑基准,算力开销在评估上;C 的开销在学验证器;D 的开销是真金白银的 token(两万美元买十万行代码)。选哪条取决于你哪种资源便宜。
「大幅超过人工设计」这类结论要看基准边界。 ADAS 报告的优势是在它选的那些任务上。搜索出来的 agent 会不会过拟合到评估方式,是这类工作的通病 —— 而它恰恰很难自证。
D 那条路的成本容易被低估。 两周、两万美元、二十亿输入 token,换来的是一个「多数测试 99% 通过、但生成代码明显不如 GCC 高效」的编译器。它证明了可行性,没有证明经济性。
四条路我都没有第一手数据。 这一篇是读来的,不是跑出来的。
下一篇
上面那条「共同地基」值得单独展开:验证器不只是这四条路都需要的东西,它还决定了自我改进的上限在哪。
下一篇拆这个 —— 包括那个用 GCC 当 oracle 的做法为什么比它看起来更深刻。