← 返回资料站  /  Recursive Self-Improvement
论文 自我修改代码

A Self-Improving Coding Agent (SICA)

SICA:一个真的在改自己代码库的编码 agent
一句话Bristol 团队让一个编码 agent 直接编辑自己的代码库来自我改进:跑 15 轮迭代后,在 SWE-bench Verified 的 50 题随机子集上从 17% 提到最高 53%,全部代码 MIT 开源;但起点 agent 被刻意做弱,且 15 轮花了约 $7,000 API 费。

这是什么

SICA(Self-Improving Coding Agent)要回答的问题很直接:一个带基本编码工具的 LLM agent,能不能不靠梯度更新、只靠读自己的运行记录 + 改自己的 Python 代码,把自己在基准上的成绩提上去。它和 ADAS 最大的区别在于'自指':ADAS 用一个固定的 meta-agent 去设计目标 agent,而 SICA 里 meta-agent 和目标 agent 是同一份代码库——每轮从 archive 里挑历史表现最好的那个版本,让它读 archive、找改进点、直接改代码,改完的新版本再上 benchmark 评测入库。

这是 ICLR 2025 workshop 论文(arXiv 2504.15228,2025-04),作者 Maxime Robeyns、Martin Szummer、Laurence Aitchison。底层模型不动,主体用 Sonnet 3.5 (v2),另配一个 o3-mini 的 reasoning sub-agent;学习信号完全来自 LLM 对基准结果和执行 trace 的反思。代码库 MIT 开源(390 stars),自带 Docker 沙箱、benchmark runner 和一个可视化 agent 执行事件流的 web UI,论文自己称之为'data-efficient、非梯度的学习机制'。

SICA 的自指改进循环:每轮从 archive 中所有历史版本(Agent 0, 1, 2, …)里按 utility 挑出最好的一个当 meta-agent,让它改出下一代 Agent 的代码,新 agent 再跑同一组 benchmark 入库。与 ADAS 的区别是 meta-agent 不固定,它本身就是被改进的对象。
SICA 的自指改进循环:每轮从 archive 中所有历史版本(Agent 0, 1, 2, …)里按 utility 挑出最好的一个当 meta-agent,让它改出下一代 Agent 的代码,新 agent 再跑同一组 benchmark 入库。与 ADAS 的区别是 meta-agent 不固定,它本身就是被改进的对象。

机制与做法

自指改进循环与 utility 函数

循环每轮做两件事:先在固定 benchmark 集(SWE-bench Verified 50 题子集、LiveCodeBench 50 题、两个自造的文件编辑/符号定位合成基准)上评测当前 agent,结果存入 archive;然后取 archive 中 utility 最高的历史版本当 meta-agent,让它在自己的代码库上实现一个改进,产出下一代。

'最好'由一个手写 utility 定义:U = 0.5·score + 0.25·(1 − cost/$10) + 0.25·(1 − time/300s),超时再乘 0.5 惩罚。也就是说选代标准不只看正确率,还压成本和时延——这个分数只用来挑下一轮的 meta-agent 和 base agent,不做任何权重更新。

初始 agent:工具、sub-agent、异步 overseer

起点 agent 给得比较克制:开/关文件、整文件 overwrite、shell、计算器、提交答案,外加一个读 archive 统计的工具——注意初始没有 diff 式编辑工具,文件修改只能整个重写。sub-agent(coding / problem-solver / reasoning 三个)像工具一样被调用,返回字符串;作用一是任务分解,二是控制上下文长度:meta-improvement 一轮要跑约一小时,sub-agent 返回时其上下文即被丢弃,只留摘要。

长时间自主运行靠一个异步 overseer 兜底:一个每 30 秒(或关键事件时)在并发线程里跑的 LLM,看整个 callgraph 和事件流的文本表示,判断是否死循环或跑偏,可以往 agent 上下文里插提醒,严重时直接 cancel。上下文布局也刻意设计成 append-only(system prompt → core prompt 含打开的文件和目录树 → assistant 消息流),文件编辑先以 diff 追加、积累到一定量再合并,以保住 KV cache 降低成本。

agent 自己发明了什么

15 轮迭代里 agent 给自己加的东西,按论文 Figure 2 标注依次是:'smart edit' 工具(diff/range 编辑,替代整文件重写,第 1 轮就出现,是最大的一次跳升)、代码上下文摘要、文件编辑后验证、AST 符号定位器(第 9 轮,符号定位基准从 ~0.31 升到 0.40+)、混合符号定位。方向都很合理——但也基本是现成编码 agent(Aider、SWE-agent 等)早就有的标配组件,agent 是在重新发明它们。

关键结果

实证核查

有水分机制真实、代码全开源、数据表和论文数字对得上,而且论文自己报告了负面结果,这些都加分;但 '17%→53%' 这个头条数字水分不小:起点 agent 被刻意做弱(连 diff 编辑都没有)、50 题子集噪声大、53% 取的是最高轮,且最终 agent 也没超过当时现成编码 agent 的水平;无第三方复现,仓库发布两周后即停更。
摘要:'performance gains from 17% to 53% on a random subset of SWE Bench Verified'。
source/data/main_table.dat 显示 SWE 列 iter 0 = 0.167,最高 0.533(iter 14),最后一轮 0.510——53% 是取最高轮而非终点;且这是 50 题固定随机子集(非 500 题全集),中途第 13 轮曾跌回 0.267,噪声很大。另外 iteration 0 的 agent 只有整文件 overwrite 没有 diff 编辑工具(03_methods.tex),第一轮加上 'smart edit' 就大幅跳升——起点弱化让增益显得更大;当时(2025 年初)现成 agent 在 SWE-bench Verified 全集上已能到 60%+,SICA 终点并未达到 SOTA,论文也未与任何外部 agent 对比。
论文/README:agent 'works on its own codebase',自主自我改进,代码开源可复跑。
仓库(MaximeRobeyns/self_improving_coding_agent,MIT,390 stars)结构与论文一致:base_agent/、runner.py、benchmarks、Docker 沙箱、web 可视化都在,README 的 quickstart 完整。但复跑门槛是真实的:论文承认 15 轮花了约 $7,000 API 费(04_experiments.tex);仓库 pushed_at 停在 2025-04-23(发布后约两周即停更),全部 issue 只有 4 个、无人报告复现成功;issue #4 指出自改进循环直接采纳自我编辑、且排名依据的 score 文件 agent 自己可写,没有 integrity/review gate——即基准分数存在被 agent 自己污染(reward hacking)的通道,框架未设防。
这是一个通用的 'data-efficient, non gradient-based learning mechanism'。
论文自己的第二组实验就打了折扣:在 AIME/GPQA 上,自改进不但没帮助,agent 系统(76% 平均)还低于裸 o3-mini(87%/79%),作者归因为脚手架组件打断 reasoning 模型的思维链(04_experiments.tex §4.1)。改进主要出现在'初始工具明显残缺'的维度(文件编辑、符号定位),agent 发明的都是 Aider/SWE-agent 等已有的标配组件;模型本身够强的领域几乎无提升——机制成立,但'学习'的上限受制于起点有多缺。

与我们方向的关系

对 rsi 方向来说,SICA 是目前最容易上手的'真·自改代码'实验平台:整个循环(评测→archive→meta-agent 改自己→再评测)不到一个中型代码库的量,MIT 协议,Docker 隔离和事件流可视化都是现成的,utility 函数、benchmark 集、初始工具集都是单文件可改的实验旋钮。想做'自改进能走多远/会不会 reward hack'类实验,fork 它比从零搭快得多——issue #4 指出的'分数文件 agent 可写'恰好是现成的 reward hacking 研究切入点。

两个可直接借鉴的设计:一是 utility 里把 cost/time 和 score 一起计入,避免自改进朝'烧钱换分'退化;二是异步 overseer(并发 LLM 看 callgraph 判断跑偏、可插话可 kill),这是让 agent 无人值守跑一小时以上的关键组件。同时它的负面结果是个重要提醒:自改进的收益 ≈ 初始脚手架的缺陷大小,在模型本身已强的任务上,加脚手架可能是负收益——设计自改进实验时 baseline 必须给足,否则曲线好看只是因为起点被做弱了。

阅读笔记

复跑注意:必须在提供的 Docker 容器里跑(agent 能执行任意 shell);完整 15 轮约 $7,000,可用小 benchmark 集 + 便宜模型先跑通流程。仓库 2025-04-23 后停更,依赖的模型名(Sonnet 3.5 v2、o3-mini)现在需要自己换新。论文数字全部来自 source/data/*.dat,与正文一致。

材料清单

TeX 源码
已存档:Raw/a-self-improving-coding-agent-sica/source/
代码仓库github.com/MaximeRobeyns/self_improving_coding_agent
390★ · 最近推送 2025-04-23
论文 PDF (OpenReview)openreview.net/pdf?id=rShJCyLsOr
workshop 版本,附录含全部 prompt 和 trace 示例
GitHub issue #4github.com/MaximeRobeyns/self_improving_coding_agent/issues/4
指出自改进循环缺少完整性校验、分数文件 agent 可写的问题

同类条目