论文:A Self-Improving Coding Agent

作者与团队: Maxime Robeyns、Martin Szummer、Laurence Aitchison;University of Bristol、iGent AI。2025,v2

核心方法

让编码 Agent 修改自己的工具和执行流程,保存各版代码与评测结果,再选择下一轮的改进起点。

问题

Agent 的工具、上下文管理和控制流程长期依赖人工调整。

修改实例

初始 Agent 编辑文件时只能整文件覆盖。论文观察到,它在迭代中自己加入了按 diff、按行区间的局部编辑工具,减少整文件重写的开销。执行任务和实施自修改使用同一份 Agent 代码,因此新工具也能用于后续自修改。

每轮过程

  1. 选起点:论文规则是按任务效果、美元成本和耗时算出综合评分(utility),选出档案中的最佳 Agent。它既是本轮的修改者,也是新版本的起点。
  2. 复制候选:把起点代码复制到新目录,作为候选版本。历史档案以只读方式挂载,候选目录可写(runner.py)。
  3. 诊断与修改:Agent 阅读历史日志和变更记录,判断瓶颈,然后在候选副本里改代码。
  4. 评测入档:候选运行基准任务。代码、成绩、费用/耗时和运行轨迹一起存入对应的 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 榜单成绩,也不代表每轮都会提升。

返回 RSI 专题 · 检索论文与资料

更新于 2026-11-09 · 研究方法