阿里提出Socratic-SWE:轨迹驱动自我进化,SWE-bench突破50.40%!
Socratic-SWE: Self-Evolving Coding Agents via Trace-Derived Agent Skills

近年来,大型语言模型在软件工程(Software Engineering, SWE)领域的表现,已成为衡量其真实世界推理与执行能力的核心试金石。然而,要训练出顶尖的编程智能体(Agent),往往受限于高质量代码工程任务数据的严重稀缺。为了打破这种长期存在的数据瓶颈,阿里巴巴和上海交通大学的研究团队提出了一种名为 Socratic-SWE 的全新闭环自我进化框架。
ArXiv URL:https://arxiv.org/abs/2606.07412v1
该方法跳出了传统依赖静态变异或人工注入 Bug 来合成数据的旧范式,转而将 Agent 自身在历史交互中产生的“求解轨迹”视为最核心的自我训练信号。Socratic-SWE 的最大突破在于,它不再像以往的强化学习方法那样在计算完奖励后就将轨迹丢弃,而是将这些失败与成功的轨迹深度蒸馏成结构化的 Agent 技能,进而引导在真实代码库中动态生成针对性的修复任务。在相同的计算预算下,Socratic-SWE 在 SWE-bench Verified 榜单上经过三轮迭代后,一举达到了 50.40% 的任务解决率,并在多个基准测试中持续超越其他自我进化基线。这一结果深刻表明,模型自身的交互轨迹完全可以作为推动软件工程 Agent 持续进化的可扩展基石。
传统合成数据范式的隐性天花板
强化学习(RL)在复杂决策任务中展现出了巨大潜力,但大模型解决真实的软件工程问题绝非简单的“一问一答”式代码生成。它是一个包含代码搜索、漏洞定位、跨文件编辑、命令执行以及测试运行的长周期闭环。传统的强化学习虽然在这一设定下展现出一定优势(例如 SWE-RL 和 SWE-Gym),但其训练过程极其依赖大规模、高质量且可执行的任务数据。
目前,业界主流的缓解方案是通过抽象语法树(AST)级别的突变、语言模型引导的代码重写或学习到的错误注入机制(例如 SWE-smith 和 SSR)来人工合成任务。然而,这种开放式单向管道(Open-loop)存在一个致命缺陷:合成的任务分布是静态的,完全独立于模型当前的真实能力、弱点以及训练进度。随着模型的进步,那些固定分布中的合成任务能提供的有效训练信号会变得越来越稀疏,模型很快就会进入“舒适区”,导致学习能力停滞。
同时,在传统的强化学习训练中,模型每一轮在代码库中翻箱倒柜、反复试错所产生的“交互轨迹”(Traces)仅仅被用来事后计算一个标量奖励,或者进行极其基础的步骤级学分分配(如 GRPO 或过程奖励模型)。一旦奖励计算完毕,这些蕴含着模型当前能力边界、错误诊断逻辑和脆弱点的丰富过程数据就被无情丢弃了。对于高度复杂的 SWE 任务而言,这种对宝贵训练信号的浪费直接限制了模型的进化上限。
Socratic-SWE:变废为宝的闭环自我进化
研究团队敏锐地捕捉到了被丢弃轨迹的战略价值。因为这些历史轨迹是由 Agent 自身生成的,它们最直接、最客观地反映了模型当前在代码搜索或逻辑修复时的“盲区”。如果能从失败的轨迹中找出模型反复跌倒的原因,从成功的轨迹中提取出有效的修复模式,就能构建出一个专门针对该模型当前弱点进行“查漏补缺”的自适应课程表。
Socratic-SWE 框架正是一个将这一设想落地的三阶段闭环系统。在这个框架中,同一个共享权重的策略模型交替扮演两个角色:一个是负责在真实代码库中构建修复任务的“生成器”(Generator),另一个是负责为这些任务编写真实补丁的“求解器”(Solver)。
1. 提炼 Agent 技能注册表
要让生成器能够有针对性地“出题”,首先需要对模型的能力边界有一个高度结构化的认知。为此,Socratic-SWE 设计了核心的 Agent 技能注册表(Agent Skill Registry)机制。
在每一轮迭代开始前,当前版本的求解器会在种子任务集上进行尝试,记录下所有交互轨迹集。这些轨迹非常丰富,包含数十次工具调用、文件检查、代码修改和验证结果。系统将轨迹分为成功轨迹和失败轨迹两类。对于成功的轨迹,系统会提取出具有泛化性的通用求解策略;而对于失败的轨迹,则总结出导致失败的根本教训和纠正原则。
通过一个大型语言模型作为蒸馏模型进行处理后,这些行为模式被固化为具有四个字段的结构化“技能”:技能名称、自然语言描述、适用条件以及有序的操作列表。这些初步提取的候选技能随后会通过语义相似度阈值进行去重,并基于对原始轨迹的覆盖率进行过滤,最终形成一个可供程序化检索的技能注册表。在后续生成任务时,生成器无需进行盲目的随机变异,而是可以系统性地采样这些特定的“技能”,将新任务的构建精确锚定在模型刚刚暴露出的行为模式上。
2. 基于技能引导与多重验证的任务生成
明确了模型需要提升的短板后,生成器就需要在沙盒环境的真实代码库中构建包含修复目标和执行验证信号的具体任务。为了保证这些合成任务能够真正用于后续的强化学习,研究团队为其设计了极其严格的四重执行门控验证(Execution-grounded Validation)管线,候选任务必须全部通过以下四个阶段的检验:
-
格式验证(Format):确保生成的任务规范和验证代码是语法正确、格式完备且可解析的。
-
环境基础验证(Grounding):要求任务中引用的各类文件、模块和工件在目标代码库中真实存在,防止产生幻觉。
-
执行稳定性验证(Execution):保证生成的验证脚本(如单元测试)可以在没有底层基础设施报错的情况下,稳定地进行多次执行。
-
语义有效性验证(Semantics):这是最核心的一步,要求验证套件必须能够明确区分代码当前的“故障状态”和“修复状态”,并且至少存在一种有效的代码修复方案。
只有顺利闯过这四关的任务,才能真正进入下一轮训练的课程池。这一级联过滤机制彻底排除了不可复现、有歧义或单纯因为底层环境报错而无法解决的劣质任务。
3. 梯度感知的生成器奖励机制
通过了执行验证,仅仅说明一个任务是“合法”且“可解”的,但这并不代表它对提升当前求解器的能力有直接帮助。为了精确衡量任务的“有用性”,Socratic-SWE 引入了一个基于优化器底层反馈的求解器梯度对齐奖励。
研究团队保留了一个包含经过人类严格验证的高质量修复任务的小型验证集。在每一轮迭代中,他们会计算当前求解器在这些高质量任务上的平均策略梯度,将其作为模型能力提升的“黄金方向”。对于每一个新生成的合法候选任务,系统同样会估计其引发的求解器策略梯度。
随后,系统通过计算合成任务的梯度与验证集黄金方向的余弦相似度(Cosine Similarity),来作为生成器构建该任务的直接奖励信号。换句话说,如果生成器创造的任务能够驱使求解器的网络权重朝着与解决高质量真实任务一致的方向演进,生成器就会获得高分奖励。这种设计巧妙地利用了神经网络底层的梯度信息,有效避免了模型在自我对弈中沉迷于解决某种特定偏门 Bug 的“模式崩溃”现象。
4. 处理异构反馈的求解器优化
当高质量的定制任务池准备就绪后,求解器正式登场进行解题。与生成器拥有环境全局视角不同,求解器在训练时只能看到任务的初始说明并接收代码库的命令行反馈,无法获取任何参考答案或验证器的内部设计逻辑。
在长周期的试错探索中,求解器的补丁可能存在完全正确、部分修复或引入了新破坏等复杂情况。为此,Socratic-SWE 采用了一种细粒度的异构环境反馈奖励。修复补丁不仅要让原本失败的测试用例顺利通过(部分修复率),更要极力避免引发代码退化(即保证原本通过的测试用例依然能够通过)。模型最终只有在既彻底修复了全部故障又未引发任何回归错误时,才能获得用于指引强化学习的最终高分。
为了处理这种包含完全通过指示器、部分修复比例和退化惩罚的异构奖励,研究人员采用了先进的 GDPO 算法,对不同的奖励分量在批次内部进行独立的标准化缩放,使得求解器能够清晰地辨别“只改对了一部分”和“完美解决”之间的微妙差异,从而获得更为稳定的梯度引导。
核心实验突破与性能解析
在严格控制 3.6 万个训练样本预算(即三轮迭代,每轮使用 1.2 万个任务)的公平比较下,Socratic-SWE 展现出了惊人的数据利用率和自我进化速率。
在业界公认极具挑战的 SWE-bench Verified 榜单上,该方法第一轮迭代即拔高了 3.60 个百分点,到第三轮迭代结束时,整体任务解决率一路攀升至 50.40%,相较于尚未进化的基础模型实现了高达 7.80% 的绝对能力跃升。相比之下,主流的强基线 SSR 方法(主要依赖代码漏洞变异和基础执行检查)虽然也展现出提升,但在达到 47% 左右时便开始明显显现疲态。Socratic-SWE 的爬坡曲线更为陡峭,天花板也显著更高。
这种优越性不仅体现在核心榜单上,更体现在能力的全面覆盖与泛化上。在轻量级的 SWE-bench Lite 和聚焦企业级复杂架构的 SWE-bench Pro 上,它分别取得了 36.67% 和 22.85% 的佳绩,全面拉开与基线模型的差距。
更令人瞩目的是其在终端原生任务完成环境 Terminal-Bench 2.0 中的表现。尽管该基准测试中的任务主要集中在操作系统层面的环境导航、软件配置和终端命令链式操作,与传统代码库的文件修复在形态上截然不同,Socratic-SWE 依然获得了 4.50% 的显著提升,最终得分达到 14.61%。这种跨域迁移现象提供了一个非常有价值的视角:通过轨迹提炼出的“技能”并非仅仅是针对特定代码框架的应试解题技巧,而是深刻涵盖了复杂文件操作、动态命令执行反馈吸收、上下文回溯等更底层、更具备泛用性的通用智能体行为逻辑。
剥离机制:是什么铸就了更高天花板?
论文通过严谨的消融实验进一步验证了 Socratic-SWE 框架内各项设计的必然性。当研究人员从系统中彻底移除基于历史轨迹的“ Agent 技能注册表”时,模型在第三轮迭代的表现出现了最严重的性能滑坡。这直接证明了,动态的、以模型当前弱点为导向的课程设计机制,是整个进化框架的动力源泉。
如果试图使用人工编写的静态技能分类法(如传统的 Bug 分类模式)来强行替代基于真实交互轨迹的动态技能蒸馏,结果同样会导致最终性能明显受损。这是因为人类专家的主观直觉,往往无法精准捕捉大语言模型在试错过程中特有的迭代搜索与文本编辑微观模式(例如大模型特别容易陷入某种特定的 grep 搜索-定位错误-再修改的死循环死锁现象),而这些微观模式正是大模型真实能力的瓶颈所在。此外,如果用更为常规的 GRPO 算法替换用于处理异构奖励的 GDPO,模型对长线任务中部分正确结果的鉴别力会下降,进而影响最终表现。
在对长周期自我进化趋势(扩展至 5 轮迭代)的观测中,研究人员发现传统自演化方法在穷尽了易于生成的简单错误模式后,很快便陷入停滞;而 Socratic-SWE 凭借捕捉复杂能力缺陷的设计,能够维持更长时间的有效性能爬坡,直到其技能池的广度彻底触碰到当前种子代码库环境自身的复杂性上限为止。
结语与未来启示
在大型语言模型向能够独立完成复杂工程任务的高阶智能体演进的道路上,高质量真实训练数据的匮乏一直是悬在头顶的达摩克利斯之剑。阿里与上海交大联合提出的 Socratic-SWE 给出了一份极具行业参考价值的答卷:不要一味向外渴求新数据,要向内深挖模型的原生边界。大模型在每一次无效的代码检索、每一次引发回归报错的笨拙修改中所留下的执行轨迹,都是蕴藏着巨大指引价值的数字黄金。
通过建立起一条从历史轨迹提取短板技能、从技能引导生成针对性测试、再从测试中产生新迭代轨迹的自洽闭环,Socratic-SWE 成功证明了无需依赖海量的人类高级代码标注,模型依然可以实现持续且显著的自我超越。这种让智能体通过审视自身行为边界来定义下一步训练目标的深度自演化范式,不仅为缓解代码 Agent 的数据荒提供了切实可行的技术通路,更为未来打造能够在各类物理或数字环境中自主适应、终身学习的通用人工智能(AGI)底座,勾勒出了一个极具潜力的工程蓝图。