返回列表
研究 5 分钟阅读

Self-Evolving Coding Agent:Agent 如何从失败中持续进化

Coding Agent 最容易被夸大的能力之一,是“会从失败中学习”。一次任务失败后补一句提示词,再跑同一个仓库并成功,这只能证明系统适应了这次失败;它究竟抽象出了可迁移规律,还是把答案换一种形式存进了提示词,仍然未知…

  • Coding Agent
  • Agent Evolution
  • Harness
  • Evaluation
  • Continual Learning

《Self-Evolving Coding Agents》给出的价值并非某个新算法,而是一套把混乱现象重新分层的坐标系。它把进化对象分为 Agent 框架、经验或仓库记忆、技能与工具、模型参数、工作流与多 Agent 拓扑;又把进化时机分成任务内、任务后和阶段式三类。这两个维度组合起来,能区分“当前回合自我纠错”“把一次经验沉淀为可复用资产”以及“用一批轨迹产生下一代系统”。如果连变更对象和时间边界都没有说清,“自进化”通常只是一个无法证伪的营销词。

失败不是学习信号,经过归因的失败才是

软件工程适合研究持续学习,因为反馈比开放式对话更具体:编译器给出语法与类型错误,测试暴露行为差异,静态分析提供结构线索,工具调用轨迹记录 Agent 看过什么、改过什么、漏过什么。但这些信号的可信度并不相同。

结果分数最便于比较,却只能告诉我们“通过或失败”,无法说明失败发生在模型推理、上下文检索、工具接口、执行环境还是验证器。编译、运行时和测试反馈更接近故障位置,却也可能被环境抖动、脆弱测试或错误基线污染。完整轨迹包含最丰富的因果线索,但轨迹中的解释是模型生成的,不能自动视为事实。

因此,进化链路不能从“失败”直接跳到“写入记忆”,而应先生成一个可复现的故障包:仓库与依赖版本、输入、工具输出、最终差异、验收结果和随机性配置。随后把责任落到最小层级。例如,Agent 没有看到关键文件属于上下文选择问题;读到了文件却误解 API 契约更接近推理或知识问题;修复正确但测试命令执行错了,则属于 Harness。归因错误会制造代偿性改动:用更长提示词掩盖工具缺陷,用更强模型掩盖检索缺陷,短期分数可能上升,系统却更贵、更难解释。

任务内修正适合处理局部、可逆问题,如根据编译错误修改参数;任务后沉淀适合把多条轨迹压缩为技能或仓库记忆;阶段式演进会更新框架、训练模型或改变协作结构,必须使用隔离数据和版本化发布。变更越接近底层、影响面越广,所需证据就应越严格。

从轨迹中提炼的资产必须有边界

最常见的进化资产是记忆和技能文件。它们看似只是文字,实际上会参与未来决策,等价于低成本、可热更新的程序。一个可靠技能至少应包含触发条件、操作步骤、适用范围、停止条件、失败迹象和证据链接。只有“遇到迁移错误先检查 schema”这样的总结过于宽泛;更可执行的版本需要说明在哪类框架、出现哪些日志或版本差异时触发,先读取哪些文件,执行什么只读检查,在哪些条件下停止自动修改。

记忆系统还面临三个持续增长问题。第一是冲突:不同版本仓库可能给出相反规则。第二是陈旧:曾经正确的工具参数或依赖行为已经变化。第三是选择成本:记忆越多,检索噪声和上下文占用越高。生产系统应让每条资产携带来源、时间、适用范围、验证记录和失效条件;召回后还要经过当前环境证据校验,而不是把历史结论直接注入高优先级上下文。

技能、工具和工作流的进化也应遵循相同原则。新增工具不能只看调用成功率,还要评估权限面、失败语义、幂等性和回滚方式;改变多 Agent 拓扑不能只看最终答案,因为更多角色可能带来责任扩散、重复调用和不可复现的协商。所谓“系统学会了某种能力”,最终必须落到一个有版本、有作用域、可关闭的变更单元。

怎样证明学到的是能力而不是题目

单一通过率无法承担这项证明。最低限度的评测应包含四组数据:原始失败任务用于确认修复,邻近任务用于检查规则迁移,历史回归集用于发现能力退化,结构不同但共享原理的跨仓库任务用于检验泛化。若技能是在轨迹 A 上生成,A 及其同源变体不能同时充当主要验收集。

还需要保留一个未进化对照和一个信息量对照。前者回答“这次提升是否只是模型波动”,后者回答“如果把近似答案直接给 Agent,最多能提高多少”。在固定模型、Harness、预算与随机种子的条件下,只替换候选资产,才能把收益归因到进化本身。结果应同时报告正确性、迁移收益、回归损失、调用次数、Token、耗时和副作用,而不是只发布最好的一次运行。

持续系统尤其要防止反馈回路污染。验证器若存在漏洞,Agent 会逐渐学会满足验证器而非用户目标;公开基准若反复参与技能生成,分数会演变成对测试分布的记忆;某个工具偶然返回错误信息,也可能被写成长期规则。解决方式不是相信更强的总结模型,而是把证据等级写入流水线:可执行测试高于模型自评,跨运行复现高于单次观察,隔离迁移集高于原题重试,人工批准只覆盖明确的高风险变更。

生产系统需要的是进化控制面

自进化不应直接修改线上 Agent。更稳妥的架构是让执行面产生不可变轨迹,让进化控制面离线提出候选资产,再由评测、审批和发布系统决定是否启用。每个候选版本都要能回答:由哪些失败触发,修改了哪一层,在什么数据上胜出,引入了哪些新权限或成本,何时自动回滚。

发布可采用影子运行和小流量对照。影子阶段只记录候选决策,不执行副作用;小流量阶段为预算、错误类型和高风险工具设置护栏;一旦回归率、尾延迟或人工接管率越界,恢复上一版本。对记忆与技能还要定期做合并、冲突检测和过期清理,否则“持续学习”最终会退化为持续堆积。

最重要的设计判断是:自进化的单位不应是一次成功,而应是一个经过隔离验证、可追溯、可回滚的能力版本。Coding Agent 的优势在于它拥有丰富的可执行反馈;它的危险也在这里——系统很容易围绕一个不完美的反馈器快速优化。把验证边界建好,进化才是能力积累;边界缺失时,它只是更自动化的过拟合。

参考资料

交互式图表

放大查看

使用 + / − 缩放,按 0 适应窗口;放大后可拖动或滚动查看,Esc 关闭。