苏格拉底-SWE:通过派生智能体技能实现自演进编程智能体 Socratic-SWE: Self-Evolving Coding Agents via Trace-Derived Agent Skills
利用历史求解轨迹派生技能,闭环生成训练任务,实现SWE智能体自演进
前置知识
软件工程智能体(SWE Agent)
SWE智能体是指能够与真实代码仓库交互,完成软件工程任务的LLM系统。它需要具备代码搜索、文件编辑、命令执行、测试验证等多种能力,在长周期交互中完成bug定位、修复和验证的完整闭环。典型任务包括从GitHub issue描述中理解问题,在仓库中定位相关代码,实施修复,并通过测试套件验证修复的有效性。
本文的核心场景就是训练SWE智能体,理解这类智能体的工作方式(需要多轮工具调用、长轨迹推理、可执行反馈)对于理解Socratic-SWE框架的设计动机至关重要。
自我博弈(Self-Play)
自我博弈是一种强化学习范式,通过让智能体在不同角色之间相互对抗或协作来生成训练数据,无需人工标注。常见架构包括Challenger-Solver、Teacher-Student、Generator-Solver等。自我博弈在围棋、国际象棋等游戏中取得巨大成功,在推理任务中也有应用,如AlphaZero、Socratic-Zero等。
Socratic-SWE本质上是一个基于自我博弈的框架,Generator和Solver共享策略权重并共同进化。理解自我博弈的通用架构和常见问题是理解本文方法定位的基础。
轨迹(Trace)
在SWE智能体场景中,轨迹是指智能体完成一个任务过程中产生的完整行为序列,包括仓库检查、代码定位、文件编辑、命令执行、测试运行等所有工具调用及其输出。一条轨迹可能跨越数十个工具调用,暴露智能体的成功策略、失败模式、探索路径等丰富信息。
Socratic-SWE的核心创新就是将传统上仅用于奖励计算后即被丢弃的轨迹,转化为可复用的技能知识库来指导后续任务生成。理解轨迹的内涵和价值是理解整个框架的关键。
GRPO(Group Relative Policy Optimization)
GRPO是DeepSeek-Math提出的强化学习算法,适用于可验证奖励的场景。它通过一组K个轨迹的样本均值作为基线,计算优势值并优化策略。与PPO相比,GRPO不需要价值函数网络,直接使用样本均值估计基线,特别适合代码执行、数学证明等可以通过执行获得明确二值反馈的任务。
Socratic-SWE的Generator使用GRPO进行优化,理解GRPO的原理和适用场景有助于理解为什么选择该算法来优化Generator的梯度对齐奖励。
GDPO(Group Decomposed Policy Optimization)
GDPO是对GRPO的扩展,专门处理由多个异构分量组成的复合奖励。它先对每个奖励分量单独归一化,计算分组件优势值,再聚合得到总体优势值。这样可以避免不同尺度的奖励分量互相干扰,使策略能够区分不同维度的改进,例如在SWE场景中区分完全修复、部分修复和避免回归。
SWE任务的Solver奖励包含三个不同尺度的分量,直接相加会导致梯度信号模糊。理解GDPO的归一化机制有助于理解Solver如何从部分正确的补丁中学习有意义的梯度。
梯度对齐(Gradient Alignment)
梯度对齐是指让一个优化方向与另一个方向在向量空间中保持一致的技术。在Socratic-SWE中,Generator的目标是生成那些能让Solver的更新方向与验证集梯度方向Gv一致的任务。具体通过余弦相似度cos(g_tau, Gv)来度量这种一致性,其中g_tau是候选任务tau诱导的Solver梯度。
梯度对齐奖励是Generator任务选择的核心机制,它使得生成器能够识别出那些真正对提升验证性能有用的任务,而不仅仅是困难的任务。理解这一机制需要理解梯度空间和余弦相似度的物理意义。
研究动机
现有SWE智能体训练面临高质量训练数据稀缺的根本性瓶颈。传统的合成数据方法通常通过固定的变异或bug注入流程来创建任务,这些方法生成的任务分布与智能体自身的能力弱点和训练进度基本独立。例如,SWE-smith通过代码删除或历史回退注入bug,SSR通过自玩机制在真实仓库中生成任务,但它们都缺乏对智能体实际能力边界的针对性。更关键的是,每次强化学习训练都会产生大量有价值的副产品——求解轨迹,这些轨迹记录了智能体在仓库交互过程中的完整行为,包括代码搜索、文件编辑、命令执行、测试运行等操作。现有的方法如GRPO将整个轨迹简化为一个标量奖励,GiGPO、iStar等方法在轨迹内部分配更细粒度的信用,但无论粒度如何,这些轨迹在计算完监督信号后就被丢弃了。随着模型能力提升,固定分布中仍有用的任务信号变得越来越稀疏,学习最终陷入停滞。
本文的目标是本文的目标是构建一个闭环自演进框架,将历史求解轨迹转化为可复用的训练信号来源,从而在无需外部标注的情况下实现SWE智能体的持续改进。具体而言,Socratic-SWE旨在从历史轨迹中蒸馏出结构化的智能体技能,用这些技能指导在真实代码仓库中构建针对性的修复任务,让生成的任务既可验证又对改进Solver有用。更新的Solver产生新轨迹,支持下一轮的技能蒸馏,形成轨迹-技能-任务的闭环。在固定计算预算(36k实例)和零预存SWE训练任务的情况下,目标是显著提升智能体在SWE-bench Verified、SWE-bench Lite、SWE-bench Pro和Terminal-Bench 2.0等多个基准上的表现。
与已有工作不同的是,本文的独特切入角度是认识到被丢弃的求解轨迹中包含了演化课程所需的关键信号。因为轨迹是智能体自身生成的,它提供了对模型当前能力边界的直接视图。这一洞察启发了自演进循环:智能体从历史求解轨迹中提炼能力,并用它们构建下一轮的训练任务,无需外部标注。相关思想在相邻领域已显示出潜力,如R-Zero和Socratic-Zero使任务提议器适应求解者前沿,Absolute Zero通过执行验证实现零数据自我改进,SkillRL和SKILL0从交互轨迹中蒸馏可复用技能。然而,这些设置涉及简单轨迹,如符号推理链、短程序或有限步游戏,简单的通过/失败反馈往往足以驱动适应。SWE轨迹更丰富:单条轨迹可能跨越数十个工具调用,暴露多样且可诊断的失败模式。结合仓库测试套件提供的确定性执行验证,这使得SWE成为基于轨迹自演进的特别适合的领域。
核心方法
Socratic-SWE是一个三阶段闭环自演进框架,其核心直觉是将智能体的历史求解轨迹转化为结构化的技能知识,然后用这些技能指导针对性任务生成。在第一阶段,系统从历史求解轨迹中蒸馏出重复出现的失败模式和有效的修复策略,构建Agent Skill Registry(智能体技能注册表)。在第二阶段,Generator使用这些技能作为约束,在真实代码仓库中构建针对性的修复任务。候选任务通过四阶段执行验证管道过滤,确保可重现性和非平凡性,并通过求解器梯度对齐奖励评分,使得保留的任务既可验证又对改进Solver有用。在第三阶段,Solver在接受的任务上训练并产生新轨迹,支持下一轮技能蒸馏。在这种方式下,轨迹转化为技能,技能指导任务生成,生成的任务产生持续自演进所需的轨迹。Generator和Solver共享策略权重,分别接收不同的奖励信号:Generator接收梯度对齐奖励RG,Solver接收执行反馈奖励rS。整个框架形成一个完全闭环的自我改进系统,无需人工标注或外部监督。
Socratic-SWE的核心创新在于提出了一个完全闭环的轨迹-技能-任务自演进范式,这与传统方法有几个本质区别。第一,它将传统上仅用于奖励计算后即被丢弃的求解轨迹,转化为结构化、可检索的技能知识库,这些技能总结重复出现的失败模式和有效的修复模式。第二,技能被用作Generator构建任务的约束,而不是随机或通过固定规则生成任务,这使得生成的任务直接针对Solver的能力边界。第三,引入梯度对齐奖励机制,通过计算候选任务诱导的Solver梯度与验证集梯度方向的余弦相似度来评估任务价值,而不是简单地根据难度选择任务。这一机制使得难度与解耦:一个中等难度但能传递可迁移修复模式的任务可能比一个不可能完成的任务得分更高。第四,四阶段执行验证管道(格式、落地、执行、语义)确保了生成的任务格式良好、可落地、稳定可执行且语义有意义,避免了传统自演化方法中的奖励黑客问题。
方法步骤详情
Socratic-SWE的完整流程包含五个核心步骤,每步都有明确的输入输出和具体操作。步骤一是技能蒸馏。输入是历史求解轨迹T,每条轨迹记录仓库检查、代码编辑、命令执行和验证结果。将T拆分为成功轨迹T+和失败轨迹T-。使用蒸馏模型Mdistill(如Qwen3.6-27B)处理轨迹语料库并提取重复出现的行为模式作为候选技能,得到S_hat。通过语义相似度去重和轨迹覆盖过滤,构建最终的技能注册表S,包含M个技能。每个技能包含四个字段:名称、自然语言描述、适用性条件、有序操作列表。步骤二是技能指导的任务生成。给定仓库r和技能s,Generator产生候选任务,其中tau指定仓库落地修复目标,v指定用于评估补丁的可执行测试或命令。步骤三是任务验证。候选任务在仓库沙箱r中通过四阶段检查:格式f1、落地f2、执行f3、语义f4。只有所有阶段都通过的候选者才进入下一轮课程。步骤四是梯度对齐评分。维护一个固定的信任验证任务集Vval,对于每个验证任务,展开K个Solver轨迹,计算可执行反馈奖励,估计每任务策略梯度gvj。平均得到目标梯度方向Gv。对于仓库r中的每个候选任务,估计Solver策略梯度g_tau,Generator奖励为RG(tau, v, r) = Valid(tau, v, r) * cos(g_tau, Gv)。随着Solver演化定期重新计算Gv。步骤五是求解器训练。Solver在任务和仓库r上采样轨迹,应用生成的补丁并运行验证套件。Solver奖励为rS,其中三项分别奖励完整套件通过、部分修复率和回归避免。整个训练使用剪切代理目标优化,Generator使用GRPO,Solver使用GDPO处理多组件奖励。
技术新颖性
Socratic-SWE的技术新颖性体现在四个方面。第一,轨迹驱动的自演化范式。本文展示了求解轨迹(通常在奖励计算后被丢弃)可以作为自演化SWE智能体的可复用基质。Socratic-SWE将历史Solver行为转化为结构化智能体技能,指导后续仓库落地任务构建,形成闭环轨迹-技能-任务循环。这一范式将轨迹的作用从被动奖励提供者转变为主动课程设计者。第二,梯度感知的课程优化。引入了结合技能条件任务生成、基于执行的任务验证和求解器梯度对齐奖励的课程机制。生成的任务先在真实仓库环境中验证以确保可重现性和可解性,然后通过其诱导的Solver更新是否与信任验证梯度对齐来优先排序。这不同于传统方法简单地根据难度或不确定性选择任务,而是直接优化任务对验证性能的提升潜力。第三,技能指导的任务生成。将技能设计为结构化文档,包含名称、自然语言描述、适用性条件和有序操作列表,这使得Generator能够以编程方式检索和条件化技能,而不是通过自由文本。技能从真实轨迹蒸馏而来,反映了智能体实际遇到的行为模式,而不是人工编写的分类学。第四,执行验证管道。四阶段验证(格式、落地、执行、语义)确保生成的任务不仅是可执行的,而且在语义上是有意义的,避免了自演化方法常见的奖励黑客问题。与仅依赖通过/失败二值反馈的方法相比,这提供了更丰富的任务质量信号。
实验结果
Socratic-SWE在四个基准上持续优于自演化基线,展示了强大的自演化和迁移能力。在SWE-bench Verified上,经过3次迭代后达到50.40%(比基线智能体+7.80,比SSR+3.40),且提升幅度在各轮次中稳步增长(+3.60、+5.80、+7.80)。在SWE-bench Lite上达到36.67%(+7.00),在SWE-bench Pro上达到22.85%(+5.61),在Terminal-Bench 2.0上达到14.61%(+4.50)。自演化方法在SWE任务上表现脆弱。通用自演化方法在适配到SWE时表现脆弱。R-Zero在第一次迭代时短暂改进,但在第三次迭代时降至基线以下,这表明基于投票的奖励对于部分修复来说太嘈杂。SPIRAL和Absolute-Zero在第二次迭代达到峰值并在第三次迭代回归,表明没有执行落地验证的自玩可能导致模式崩溃或奖励黑客。SSR稳步改进但仍有上限。SSR是最强的基线,3次迭代后在SWE-bench Verified上达到+4.40。它的bug注入机制和执行检查保持生成任务有效,但它的收益缺乏Socratic-SWE的加速。这表明没有技能指导的能力缺口针对性,SSR会耗尽低垂的bug模式。教师指导的共演化早期饱和。尽管使用397B参数的Teacher,Socratic-Zero在第二次迭代达到峰值并在第三次迭代略有下降。这表明教师指导的任务生成仍然受限于Teacher的领域理解,并在Generator蒸馏过程中可能丢失信息。终端原生泛化。在Terminal-Bench 2.0上,只有SSR和Socratic-SWE显示有意义的收益。Socratic-SWE更强的迁移表明轨迹派生的技能捕获了一般智能体行为,如文件操作、命令链和环境导航,而不仅仅是问题特定的修复模式。消融研究确认了每个组件的重要性。移除技能注册表导致最大下降,表明课程设计是Socratic-SWE的主要驱动因素。用手动技能替换轨迹蒸馏损害性能,因为手工编写的分类学错过了迭代grep-then-edit等行为。用GRPO替换GDPO也降低结果,表明分解奖励学习比二值通过/失败信号更好地处理部分正确的补丁。技能提取模型规模对性能影响有限。即使最小的提取器Qwen3.5-9B也达到Verified 49.80%,仅比完整系统低0.60点。Qwen3.6-27B带来小幅增益,Claude Opus 4.5再增加+0.60。这表明核心优势来自框架本身——技能缺口针对性生成加执行落地验证——而不是来自特别强的提取器。扩展到5次迭代的缩放分析显示,Socratic-SWE在迭代1-3中快速改进,在第四次迭代仍获得收益,而SSR改进更慢。到第五次迭代,两者都接近平台期,Socratic-SWE为52.00%,SSR为48.00%。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| SWE-bench Verified | Pass Rate (%) | 50.40 | SSR: 47.00 | +3.40 |
| SWE-bench Lite | Pass Rate (%) | 36.67 | SSR: 34.00 | +2.67 |
| SWE-bench Pro | Pass Rate (%) | 22.85 | SSR: 20.66 | +2.19 |
| Terminal-Bench 2.0 | Pass Rate (%) | 14.61 | SSR: 12.36 | +2.25 |
局限与改进
作者承认Socratic-SWE在固定仓库池的封闭世界设置中评估,随着Agent Skill Registry越来越完整,后几次迭代有更少的新能力缺口可针对性,使得任务生成越来越冗余。缩放分析因此反映固定仓库分布下的课程行为,而不是持续刷新数据的完全开放式改进。方法还依赖固定的验证集来定义Generator梯度对齐奖励,虽然这一设计改进了课程质量,但它引入了对信任验证任务选择的依赖,如果验证分布不具有目标部署设置的代表性,可能限制鲁棒性。此外,Socratic-SWE假设可执行验证和沙箱仓库交互,其收益可能不直接迁移到没有可靠测试、确定性执行或明确任务级验证的设置。最后,评估覆盖SWE和终端智能体设置中的四个基准;对其他编程语言、仓库风格和软件工程工作流的更广泛迁移仍有待建立。从本文的观察来看,技能注册表中的技能数量和质量直接影响任务生成的针对性,但技能提取是一个不可见的过程,论文没有详细报告技能的数量、分布和演化轨迹,这使得理解技能积累的过程和潜在饱和点变得困难。此外,梯度对齐奖励假设验证集梯度方向与目标分布一致,但如果验证集太小或分布偏差大,Gv估计可能嘈杂或有偏,论文显示验证集大小为20时性能下降1.20点,相关系数仅为0.34。
独立分析的弱点
Socratic-SWE存在几个潜在弱点。首先,技能稀释风险。随着训练迭代进行,技能注册表中技能数量可能增长过大,导致检索精度下降或生成器难以选择相关技能。特别是在固定仓库池的封闭世界设置中,后几次迭代的新技能可能变得越来越冗余,这解释了为什么缩放分析显示第五次迭代时接近平台期。改进方向可以是动态技能合并、基于使用频率的技能淘汰,或层次化技能组织以保持技能集的紧凑性和针对性。其次,梯度对齐的挑战。虽然梯度对齐奖励是一个有创新性的想法,但它假设验证集梯度方向Gv与目标分布一致且稳定。然而,如果验证集太小或分布偏差大,Gv估计可能嘈杂或有偏。此外,g_tau的计算需要K次展开,计算成本随着候选任务数量线性增长。改进方向可以是自适应验证集大小、多验证集聚合,或使用更稳定的梯度估计方法如方差减少技术。第三,执行验证的成本。四阶段验证管道确保了任务质量,但每阶段都需要在仓库沙箱中执行测试或命令,计算开销较大。论文报告梯度对齐开销总计1.3小时/迭代,虽然可接受,但扩展到更大仓库池或更多迭代时可能成为瓶颈。改进方向可以是并行化验证、缓存验证结果,或开发更轻量的验证代理。第四,技能迁移的挑战。论文显示Terminal-Bench 2.0上有收益,但没有详细分析技能在不同编程语言、仓库风格或软件工程工作流之间的迁移情况。技能可能在Python仓库中有效,但在Go或Rust仓库中需要重新学习。改进方向可以是跨仓库技能归纳、元技能学习,或显式编程语言和领域条件化。
未来方向
作者提出的未来工作方向包括动态仓库增强、跨领域技能迁移和在线技能发现。基于论文的成果,可以延伸的方向包括:多仓库技能迁移,研究如何将从一个仓库学到的技能迁移到不同仓库,可能通过抽象技能模板、学习仓库无关的高层策略,或使用元学习使技能提取器更快适应新仓库;在线技能发现,当前技能提取是批量进行的,未来可以探索在线更新技能注册表,使系统能够在训练过程中即时识别新出现的失败模式并添加新技能;多智能体技能共享,多个智能体之间可以共享技能注册表,形成集体知识库,加速整体系统的进化;可解释的技能分析,开发工具来可视化和分析技能的内容、使用频率和演化轨迹,帮助研究者理解自演进过程中能力增长的机制;与人类反馈结合,将人类专家的领域知识融入技能蒸馏过程,例如通过人工标注关键失败模式或设计指导性技能模板;任务难度建模,除了梯度对齐,还可以显式建模任务难度和Solver能力之间的匹配关系,使课程设计更加精细;终身学习,探索如何在不忘记旧技能的情况下学习新技能,解决灾难性遗忘问题;多模态输入,将文档、注释、测试用例等多模态信息纳入技能提取,使技能更全面地反映仓库知识;分布式计算,将框架扩展到多GPU或多机器设置,支持更大规模的训练和更多仓库池;评估基准扩展,在更多编程语言、更多软件工程任务如代码审查、重构、测试生成上评估Socratic-SWE的泛化能力。
复现评估
Socratic-SWE的复现评估如下。开源情况:论文没有明确提供代码或数据链接,这在复现性上是一个限制。数据:使用SWE-bench Verified(500个人验证的仓库级问题)、SWE-bench Lite(300个过滤问题)、SWE-bench Pro Public(731个复杂企业级软件问题)和Terminal-Bench 2.0(沙箱环境中的终端原生任务完成)作为评估基准。对于需要种子任务的基线,使用10%的SWE-smith作为种子数据集;Socratic-SWE仅需种子仓库,无需预存SWE任务实例或修复轨迹。信任验证集Vval是BeyondSWE的固定保留子集,用于Generator梯度对齐。算力:论文报告每次迭代使用8×A100-80G GPU,总wall-clock时间约15小时。3次迭代的总wall-clock预算为45小时,梯度对齐累计开销约3.9小时。模型:Generator和Solver使用Qwen3.5-9B,技能提取器使用Qwen3.6-27B(消融研究也测试了Qwen3.5-9B自提取和Claude Opus 4.5)。训练超参数:3次迭代,每次12,000个验证训练实例,组大小K=8,学习率1e-6,优化器AdamW,KL系数0.01,剪切比0.2,批大小64。Solver奖励中完全通过权重为0.5,修复率权重为0.3,回归避免权重为0.2。梯度对齐:验证集大小100,每个验证任务8次展开,每次迭代重新计算一次频率,对齐度量余弦相似度。Generator验证门:每个仓库最多8次尝试,稳定性重运行3次。复现难度:中等。框架相对复杂,涉及多个组件(技能蒸馏、任务生成、执行验证、梯度对齐、Solver训练),但论文提供了详细的算法描述、超参数设置和baseline适配细节。主要挑战在于需要构建或访问沙箱仓库环境、执行验证管道需要可靠的测试执行基础设施、梯度对齐需要多次展开和梯度计算。如果作者提供代码和数据,复现难度会显著降低。
论文图表