← 返回 2026-08-06

自进化代码智能体 Self-Evolving Coding Agents

Hao Zhou, Haichuan Hu, Ye Shang, Quanjun Zhang 📅 2026-08-04 👍 6 2026-08-11 18:30
LLM Agent 代码智能体 强化学习 综述 自我进化 软件工程

系统综述让代码智能体从软件反馈中持续自我进化的方法与分类框架

前置知识

代码智能体(Coding Agent)

区别于单纯生成代码的模型,代码智能体是把大语言模型作为决策核心、嵌入真实开发环境的交互式系统:它能检查仓库结构、编辑多文件、调用命令行工具、运行测试、诊断失败、生成补丁。代表系统有 SWE-agent、OpenHands、AutoDev、Agentless 等,通常围绕一个协调模型调用与工具使用的脚手架(scaffold)组织。

本文所有讨论都建立在「智能体在软件环境中行动」这一前提上;不理解代码智能体与传统代码生成模型的差别,就无法理解「进化」到底进化的是哪一层。

自进化智能体(Self-Evolving Agent)

指能够根据自身执行轨迹、环境反馈与累积经验,修改自身行为或内部组件(提示、记忆、工具、策略、架构)的智能体。它不是简单地换个提示重跑,也不必每次都更新权重,而是把过往尝试转化为持久的适应。经典工作如 Reflexion(语言反馈)、Voyager(可执行技能库)、ExpeL/AGENT KB(经验记忆)。

这是本文的概念母体;论文要做的事,就是把这个通用范式特化到软件工程场景,并划清它与通用自进化智能体的边界。

SWE-bench 及其变体

SWE-bench 收集真实 GitHub issue 及对应 pull request,配合执行式验证,成为仓库级 issue 解决的标杆基准。其变体 SWE-bench Lite / Verified / SWE-Bench Pro 进一步细化难度与验证质量;SWE-Gym 把这类任务改造成可执行的训练/评估环境。它们长时程、工具密集、反馈丰富的特性使其成为研究智能体自进化的天然土壤。

论文几乎所有被综述的系统都以这类仓库级基准作为进化的「选择压力」来源;理解 SWE-bench 才能理解作者为何反复强调执行式反馈的可靠性问题。

智能体脚手架(Agent Scaffold)

脚手架是实现智能体的源代码与执行框架:它编排模型调用、仓库检查、文件编辑、shell 命令、测试执行、工具使用与控制流。框架自进化类工作(如 SICA、Darwin Gödel Machine)就是把脚手架本身当作可修改的软件制品,让智能体编辑、运行、评估自己的实现,再据此保留更优变体。

「把智能体自己的代码当成可进化对象」是本文一个独特且高风险的类别;不先理解脚手架概念,就无法理解这一类为何比改提示或加记忆更危险。

强化学习与自博弈在编码中的应用

把测试通过、编译诊断、验证器判断等可执行信号转化为训练信号,通过 SFT、RL 或偏好优化更新模型侧组件。自博弈(self-play)让 bug 生成器与修复器互相对抗,如 Self-play SWE-RL 让智能体在真实仓库里造 bug、修 bug、用验证结果改进求解器;coder–verifier 共进化(CURE、ZeroCoder)则让生成器与单元测试器互相提升。

模型自进化是综述五大类别之一,且作者特别强调「自博弈需要跨迭代的信息增益,否则只会强化已有偏见」,这是理解该类局限的关键。

研究动机

以 SWE-agent、OpenHands、AutoDev 为代表的当代代码智能体,虽已在真实开发流程中能检查仓库、编辑文件、跑测试、生成补丁,但它们部署后基本是静态的:基础模型、提示、工具接口、记忆机制和控制流大多被冻结。这种静态假设在软件工程里很难成立——代码库持续演进、API 与依赖不断变化、不同仓库的约定各异、修 bug 往往需要反复的定位—打补丁—执行—修订循环。同时,软件工程本身提供极其丰富的可执行反馈:单元测试、编译错误、运行时轨迹、lint 警告、CI 日志、代码评审。如果智能体不能从这些反馈里累积经验,就会在不同任务上重复相似错误,也无法适应项目特定上下文。更关键的是,已有的自进化智能体综述(Gao 等 2026、Fang 等 2025)聚焦于通用任务环境,缺乏对软件工程特有需求(仓库理解、迭代调试、代码正确性、可维护性)的专门分析,导致「自进化代码智能体」作为一个研究问题始终边界模糊、缺乏系统刻画。

本文的目标是本文作为一篇引导性综述(guiding synthesis),目标是为这个仍在快速涌现、边界尚不稳定的领域搭建一个连贯的概念与分析框架。具体包括四点:第一,厘清自进化代码智能体的概念,把它与代码生成模型、传统代码智能体、通用自进化智能体明确区分;第二,提出以「进化对象」为中心的分类法,统一比较那些分别进化框架、记忆、技能/工具、模型侧组件、工作流与拓扑结构的异质系统;第三,补充两个正交维度——进化发生的时机(任务中/任务后/阶段式)以及驱动进化的软件特有证据(结果证据/环境反馈/轨迹派生证据);第四,综合评估实践与开放挑战,推动评估从一次性任务成功走向正确性、可维护性、鲁棒性、成本、安全性与跨设置泛化,最终为设计更自适应、更可靠、更具软件意识的智能体系统奠定基础。

与已有工作不同的是,本文的独特切入角度在于:它抓住了「软件工程是研究自进化智能体的天然领域」这一被普遍忽视但对齐性极强的判断。与通用自进化场景(反馈多来自文本批评、用户偏好或标量奖励)不同,代码智能体作用于可执行制品,能获得具体且可重复的信号——单元测试、编译诊断、运行时轨迹、静态分析、仓库历史、CI 日志、代码评审都可成为适应的证据。这让进化既更可行也更危险:测试可能不完备、日志可能含糊、基准信号可能被过拟合、通过本地检查的补丁仍可能损害可维护性或安全。作者据此把异质机制收拢进统一框架,并维护了一份配套论文清单(github.com/zhouhao1024/Awesome-Self-Evolving-Coding-Agents),填补了「专门面向软件工程的自进化智能体」这一长期空白。

核心方法

本文是综述,因此「方法」指的是作者组织文献的分析框架。直觉上,作者把自进化类比成需要两个要素的过程:一是「会变化的东西」(进化对象),二是「选择压力」(证据与时机)。围绕三个研究问题(RQ1:智能体哪些组件在进化、通过什么机制;RQ2:进化何时发生、由什么软件特有证据驱动;RQ3:应如何评估),作者构建分层分析:先在第 2 节厘清代码智能体、自进化智能体、自进化代码智能体三者边界(表 1),再在第 3 节建立以进化对象为中心的分类法,第 4 节叠加时机与证据两个正交维度,第 5 节讨论基准与指标,第 6 节归纳挑战。整套框架不强行划定刚性边界,而是把异质适应机制放进可比较的坐标系,使后续研究者能快速定位一个系统「进化的是什么、何时进化、靠什么证据」。

全文最核心的贡献是以「进化对象(object of evolution)」为中心的分类法,把现有工作归为五类:智能体框架自进化、记忆自进化、技能与工具自进化、模型自进化、工作流与拓扑自进化。它的本质区别在于:不把自进化当成单一技术(比如只看作反思或只看作 RL),而是当成作用在智能体系统不同制品上的一族适应过程——框架源码、记忆库、技能库、模型策略、协作图都可以是被进化的对象。这一视角让 SICA(改自己脚手架)、SWE-Exp(建经验库)、CODESKILL(蒸馏技能)、Self-play SWE-RL(更新模型)、SEW(进化工作流图)等表面差异巨大的系统第一次能在同一张表(表 2)里按对象/时机/证据/领域对照。作者同时强调,软件工程的特异性在于进化锚定于可执行制品与仓库级上下文,这既是优势(反馈具体可重复)也是风险(反馈可能误导、被过拟合)。

方法步骤详情

综述的分析步骤可拆为五步。第一步(第 2 节)建立概念地基,用表 1 在核心理念/反馈来源/变化对象三列上对比代码智能体、自进化智能体与自进化代码智能体。第二步(第 3 节)按进化对象归纳五大类别,每类列举代表系统:框架类含 SICA、SIFT、STOP、Darwin/Mendel/Huxley Gödel Machine;记忆类含 SWE-Exp、EvoCoder、Subtask Memory、EvoRepair、Repository Memory、SAGE;技能/工具类含 CODESKILL、GSkill、Socratic-SWE、EffiSkill、Live-SWE-Agent;模型类含 Self-play SWE-RL、Agent-RLVR、ReVeal、CURE、ZeroCoder、Sol-Ver、ACE;工作流/拓扑类含 SEW、AFlow、EvoAgentX、SEMAG、EvoMAC、AgentConductor。第三步(第 4.1 节)叠加时机维度,区分任务中(Live-SWE-Agent 边解题边造工具)、任务后(SWE-Exp 把轨迹抽象成经验)、阶段式(Self-play SWE-RL 批量自博弈训模型)。第四步(第 4.2 节)叠加证据维度,区分结果证据(基准通过率决定哪些变体存活)、环境反馈(编译/测试/运行时输出驱动在线适应)、轨迹派生证据(完整尝试记录支持记忆与技能)。第五步(第 5–6 节)综述评估实践与开放挑战。表 2 把约 22 个代表系统在四列上落位,是整套分析的产物。

技术新颖性

与已有的通用自进化智能体综述(Gao 等 2026、Fang 等 2025)相比,本文的技术新颖性有三点。其一,首次专门面向软件工程,把进化锚定在可执行制品与仓库级上下文,而非通用的文本批评或标量奖励。其二,提出「进化对象」分类法,并用时机与证据两个正交维度补全,使异质系统可比,这是以往综述没有提供的分析坐标。其三,明确划出一条关键边界:并非所有面向 SWE 的模型后训练都算自进化——只有当训练信号「闭合环绕智能体自身不断演化的尝试」时才算;据此 SWE-RL 被归为「面向 SWE 的模型优化」而非自进化智能体,SWE-Gym/R2E-Gym 是基础设施,SWE-RM 是「学到的证据」而非智能体本身。这种辨析对厘清领域边界、避免概念泛化很有价值。

The overview of self-evolving coding agents.
Figure 1: The overview of self-evolving coding agents.
Taxonomy of self-evolving coding agents by the primary object of evolution.
Figure 2: Taxonomy of self-evolving coding agents by the primary object of evolution.

实验结果

作为综述,本文核心发现是一组结构化判断。第一,自进化代码智能体可稳定归为五类,表 2 落位清晰:框架类(SICA/SIFT/STOP/DGM 等)多为阶段式、靠结果证据;记忆类(SWE-Exp/EvoCoder/Subtask Memory/EvoRepair/Repository Memory/SAGE)多为任务后、靠轨迹派生证据;技能/工具类(CODESKILL/GSkill/Socratic-SWE/EffiSkill)多为任务后,而 Live-SWE-Agent 是少见的任务中、环境反馈驱动;模型类(Self-play SWE-RL/Agent-RLVR/ReVeal/CURE/ZeroCoder/Sol-Ver/ACE)多为阶段式、靠环境或对抗证据;工作流/拓扑类(SEW/AFlow/EvoAgentX/SEMAG/EvoMAC/AgentConductor)横跨任务中与阶段式。第二,作者论证软件工程是自进化天然领域:单元测试、编译诊断、运行时轨迹、CI 日志、代码评审都是具体可重复的信号,使仓库级 issue 解决(SWE-bench 系)成为核心评估设置。第三也是最关键的警示——执行式反馈虽丰富却脆弱:测试可能不完备、日志可能含糊、基准信号可能被过拟合,一旦误导性反馈被存进记忆、蒸馏成技能、选成工作流或用于更新模型,危害会跨任务放大。第四,援引 Liu 等 2026 指出自博弈必须具备「跨迭代的可学习信息增益」,否则只会制造冗余数据或强化已有偏见,即「生成更多数据不等于进化」。第五,当前评估强于测功能正确性与基准成功(如 $\text{Pass@k}$、resolve rate),弱于衡量长期可维护性、鲁棒性、安全性与「在进化设置之外是否仍有效」。

Conceptual boundary of self-evolving coding agents.
Table 1: Conceptual boundary of self-evolving coding agents.
Classification of representative self-evolving coding-agent papers.
Table 2: Classification of representative self-evolving coding-agent papers.
查看结构化数据
任务指标本文基线提升
仓库级 issue 解决(SWE-bench / Lite / Verified / SWE-Bench Pro) resolve rate / $\text{Pass@k}$ / 测试通过率 综述将其定位为自进化代码智能体的核心评估设置:仓库上下文、执行结果、失败尝试与补丁结果都可成为未来适应的经验来源 传统代码智能体(如 SWE-agent、OpenHands)一次性评估单任务,不跨任务积累经验 自进化系统(SWE-Exp、Repository Memory、CODESKILL 等)利用累积经验改善后续任务,但需额外评估成本、token、检索开销与跨仓库泛化
可执行训练/评估环境(SWE-Gym、R2E-Gym) 执行式验证信号 / verifier 判断 综述将其归为支撑阶段式进化的基础设施,提供可执行任务、轨迹与验证器信号 纯离线数据集(无执行闭环) 把训练信号闭合到智能体自身执行尝试上(如 Agent-RLVR、Self-play SWE-RL),但作者强调基础设施本身不等于自进化智能体
函数级与竞赛式编程(HumanEval / MBPP / APPS / CodeContests / LiveCodeBench) $\text{Pass@k}$ / 通过率 / 竞赛得分 综述将其作为补充证据,用于评估代码生成、算法推理与工作流优化(如 SEMAG、SEW、AgentConductor) 单一生成器一次性作答 工作流/拓扑自进化系统在这类任务上展示按任务难度自适应协作,但无法替代仓库级长时程评估

局限与改进

作者坦承本领域仍在快速涌现、概念边界尚不稳定,因此把本文定位为「引导性综述」而非对成熟范式的盘点,分类之间也不互斥——一个系统可能同时进化框架、记忆与模型。作为综述,本文没有运行任何实验,所有判断都建立在被引文献自报指标之上,而这些系统恰恰是本文重点警示的「对基准噪声与泄漏敏感、可复现性存疑」的对象,存在循环依赖风险。从我的观察看,本文缺乏定量元分析:没有汇总统计各类自进化究竟平均带来多少提升,也没有在统一评测条件下重跑代表系统做受控对比,读者难以判断「五类进化对象哪一类性价比最高」。此外,对象中心分类法虽然清晰,却较少刻画类别之间的耦合与共进化(例如 Socratic-SWE 既蒸馏技能又间接训模型,横跨两类),对「进化对象之间如何相互驱动」着墨不足。

独立分析的弱点

第一,缺定量综合。综述罗列大量系统却没有元分析,读者无法判断哪类进化对象收益最大、成本最低;改进方向是搭建统一受控评测台,在相同基础模型、基准与预算下重跑 SICA、SWE-Exp、CODESKILL、SEW 等,给出每类进化的边际收益—成本曲线。第二,边界标准难操作化。作者用「训练信号是否闭合环绕智能体自身不断演化的尝试」区分自进化与普通后训练,据此排除 SWE-RL,但这判据缺可机械检验的形式;改进方向是给出形式化定义(如闭环含「智能体自身产生任务/轨迹→执行验证→反哺同一智能体」三段)。第三,未充分刻画对象间共进化:Socratic-SWE、Self-play SWE-RL 实际同时驱动技能与模型,单一主对象分桶反而掩盖协同;改进方向是增加「共进化图」刻画多对象如何互相供给证据。第四,基准中心视角可能把「进化到能过 SWE-bench」等同于「真正提升软件工程能力」,污染与过拟合解法薄弱;改进方向是引入持续更新的私留集(如 LiveCodeBench 思路)与维护性/安全性专测。第五,自改写脚手架(SICA 类让智能体编辑自身代码)是潜在注入与失控向量,安全分析偏浅;改进方向是为自修改引入沙箱、回滚、形式化校验与人在回路审批。

未来方向

作者明确提出的方向包括:验证反馈可靠性、修订陈旧记忆、审计学到的技能、约束自修改、评估超越即时任务成功的长期软件质量,并区分「真正进步」与「记忆/重复调参/过拟合公开验证信号」,以及探索从软件工程反馈获得的进化能否迁移到非编码领域。在成果基础上可延伸的方向有:多对象共进化(框架↔记忆↔模型↔工作流)的动力学建模与稳定性分析;用形式化方法验证自修改的安全性;人在回路的进化(把人类 code review 作为高质量证据源);成本感知的进化策略(决定何时值得触发昂贵的阶段式更新);把轨迹派生证据用于课程学习,自动生成由易到难的修复任务;以及把 SWE 自进化范式迁移到运维(AIOps)、数据工程等其他可执行反馈密集的领域。

复现评估

作为综述,本文本身可复现性很高:它是文献综合,配套论文清单公开在 github.com/zhouhao1024/Awesome-Self-Evolving-Coding-Agents,重做分析只需通读约 22 个代表系统与若干基准/基础设施工作,无需额外算力。但综述重点恰恰是其所覆盖系统的可复现性隐患:许多系统(SICA、Darwin Gödel Machine 等)靠基准结果选择自修改或智能体变体,对评估噪声与基准泄漏极度敏感,跨运行/任务/仓库/模型版本时智能体本身会变化,复现一次「更好的变体」并不保证稳定。基础设施侧 SWE-Gym、R2E-Gym 已开源可执行,但把训练信号真正闭合到智能体自身尝试(Self-play SWE-RL、Agent-RLVR)需要可观算力与稳定的沙箱验证器。总体上,复现单篇被引系统的难度从「中等」(记忆/技能类,主要成本是检索与存储)到「很高」(模型自进化类,需要 RL 训练)不等,而要在统一条件下横向复现这五类仍是开放难题。