论文:Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents
作者与团队: Jenny Zhang、Shengran Hu、Cong Lu、Robert Lange、Jeff Clune;英属哥伦比亚大学(UBC)、Vector Institute、Sakana AI 等。v3(2026)
核心方法
保留多个仍可工作的 Agent 版本,形成版本树;每轮选择一个父版本继续改进,让暂时较弱的分支也有机会发展。
问题
如果只沿当前最优 Agent 改进,暂时较弱、但后续可能有价值的分支会被丢掉。
修改实例
初始编辑工具主要读取和覆盖整个文件。后续版本加入按行查看、按字符串替换等操作,让 Agent 能查看和修改局部代码;这些工具也用于之后的自修改。
每轮过程
- 选父版本:从档案中选择父版本,偏好分数高、后代较少的版本,因此非最优版本也有机会继续发展。
- 诊断:由独立的 o1 诊断模型阅读父版本失败任务的日志,提出一个通用能力改进,写成问题描述和实现建议。
- 实现:父版本的编码 Agent 按这份说明修改自己的代码副本,产出一份自修改补丁。
- 评测:论文采用分级评测,先用少量题筛选,再扩大表现较好候选的评测范围,SWE-bench 最多 200 题。
- 入档:满足基本条件即可入档,例如评测记录齐全、能产出非空的任务补丁。默认的 keep_all 设置会保留得分较差但仍可工作的候选,档案因此形成多条谱系(DGM_outer.py)。
版本与修改范围
- 保存版本关系:每次候选有独立标识,保存对 Agent 自身的补丁、父版本标识和评测记录。沿父版本链依次应用补丁,可以重建对应版本(版本恢复实现)。
- 开放代码修改:主要修改
coding_agent.py、tools/、prompts/、utils/等。一项改进可同时修改工具、注册代码和使用提示,无需局限于一个模块。改进指令要求聚焦通用能力,避免针对某道题硬编码。 - 固定外层流程:模型权重、档案维护、父版本选择和评测协议保持固定。这里规定的是实验修改范围,不代表已有严格的文件权限白名单;全部 R:改进策略 并未开放自修改。
评测集与判分
| 基准 | 任务 → Agent 交付 | 判分 |
|---|---|---|
| SWE-bench Verified | 真实仓库 Issue → 仓库补丁 | 用测试判定是否修复 |
| Polyglot(搜索阶段用 50 题) | 多语言编程题 → 代码 | 用测试判定 |
这些题同时用于搜索过程中的打分,不能当作完全未见过的独立验收集。
退步检查与代码审核
- 保留旧版:修改失败后,原有分支仍可选用。得分下降的候选也可能入档,供后续探索;入档不等于通过上线验收,也不代表有线上自动回滚机制。
- 组件自测:自测指引给出工具和辅助函数的 pytest 命令;完整 Agent 的表现由外层编码基准评测。
- 修改后分析:仓库提供可选诊断,让模型结合代码差异、前后日志和测试结果分析收益及退步。主循环默认关闭,开启后的分析结果也未用作强制入档条件。
- 人工检查:论文团队在隔离环境中运行实验,并观察代码改动和日志;没有建立每次自修改都必须经过独立代码审核的流程。
结果
80 次自修改搜索,基于 Claude 3.5 Sonnet,在从 SWE-bench Verified 抽取的 200 题上评估:
- 初始:20.0%
- 搜索中发现的最佳 Agent:50.0%
最佳版本不一定是最后产生的候选,也并非每个候选都做满 200 题。
适用范围
这些结果是关于性能提升和版本探索的证据,不能证明改进会无限持续加速。
延伸阅读:Sakana AI 作者解读(自修改流程、版本谱系与可视化案例)。
更新于 2026-11-09 · 研究方法