论文:A Self-Improving Coding Agent
作者与团队: Maxime Robeyns、Martin Szummer、Laurence Aitchison;University of Bristol、iGent AI。2025,v2
核心方法
让编码 Agent 修改自己的工具和执行流程,保存各版代码与评测结果,再选择下一轮的改进起点。
问题
Agent 的工具、上下文管理和控制流程长期依赖人工调整。
修改实例
初始 Agent 编辑文件时只能整文件覆盖。论文观察到,它在迭代中自己加入了按 diff、按行区间的局部编辑工具,减少整文件重写的开销。执行任务和实施自修改使用同一份 Agent 代码,因此新工具也能用于后续自修改。
每轮过程
- 选起点:论文规则是按任务效果、美元成本和耗时算出综合评分(utility),选出档案中的最佳 Agent。它既是本轮的修改者,也是新版本的起点。
- 复制候选:把起点代码复制到新目录,作为候选版本。历史档案以只读方式挂载,候选目录可写(runner.py)。
- 诊断与修改:Agent 阅读历史日志和变更记录,判断瓶颈,然后在候选副本里改代码。
- 评测入档:候选运行基准任务。代码、成绩、费用/耗时和运行轨迹一起存入对应的
agent_i目录,进入下一轮。
公开代码也允许选择成绩接近最佳的较新版本;这里的综合评分选优描述的是论文规则。
版本与修改范围
- 保存内容:每个候选是一份 Agent 实现及其评测记录。评测题中产出的仓库修复补丁另外记录。
- 可改:Agent 实现本身。代码按工具、Prompt、子 Agent 编排等模块组织,但修改不限于预设插槽,一次改进可以跨多个模块。官方自改进指令列出了几个方向:编辑效率、传统开发工具、推理编排、代码质量、删除收益不足的复杂组件。指令同时要求只做最少的必要变更。
- 不改:不训练模型权重;外层评测与版本选择流程保持固定。历史档案只读是明确的隔离措施,不能扩写成整套系统都有文件修改白名单。
评测集与判分
(编码实验,题目固定,各版本做同一批题):
| 任务 | Agent 交付 | 判分 |
|---|---|---|
| SWE-bench Verified 随机 50 题(真实仓库 Issue) | 对仓库的修改 | 运行测试,判定是否解决 |
| LiveCodeBench 50 题 | 程序代码 | 运行测试判定 |
| 文件编辑:按要求修改已有文件 | 编辑后的文件 | 与目标内容的接近程度 |
| 符号定位:从代码引用寻找定义 | 文件路径、行号和列号 | 定义位置是否正确 |
这些题的成绩用于比较版本和指导后续修改。文件编辑题由历史 commit 的前后内容构造;论文另有 AIME、GPQA 推理实验。
退步检查与代码审核
- 保留旧版:新候选不会覆盖历史代码,可继续从旧版改进。综合评分用于选版本,但无法保证每项能力都不退步。
- 自测:指令要求已有 pytest 仍能运行,必要时补充有意义的测试,并至少做一次 Agent 端到端测试、检查运行轨迹。这些是提示里的要求,不是不可绕过的 CI。
- 运行监督:监督 Agent(overseer)定期检查跑偏或循环,可提醒、终止执行。论文与公开主流程没有展示每版必须通过的独立代码审核批准环节。
结果
(大部分 Agent 使用 Claude 3.5 Sonnet v2,推理子 Agent 使用 o3-mini;Table 1,SWE-bench Verified 随机子集):
- 初始:17%
- 第 14 轮:53%
- 第 15 轮:51%
适用范围
评估使用随机子集,且任务时限较短,不能写成完整 SWE-bench 榜单成绩,也不代表每轮都会提升。
更新于 2026-11-09 · 研究方法