SWE-World:在无Docker环境中构建软件工程智能体 SWE-World: Building Software Engineering Agents in Docker-Free Environments
用LLM学习的环境模拟器替代Docker容器,实现无物理执行的软件工程智能体训练与推理
前置知识
SWE-bench
SWE-bench是一个用于评估大语言模型解决真实世界软件工程问题能力的基准测试。它从GitHub上收集真实的issue和对应的pull request,要求智能体根据问题描述自动生成代码修复补丁。SWE-bench Verified是其经过人工验证的子集,包含500个来自12个Python仓库的任务实例。评估标准是生成的补丁是否能通过所有指定的单元测试,即resolve rate(解决率)。
本文的所有实验都在SWE-bench Verified上进行评估,理解这个基准对于解读实验结果至关重要。
Docker容器化环境
在软件工程智能体训练中,Docker用于创建隔离的、依赖完整的执行环境。每个SWE任务实例需要一个独立的Docker镜像,包含目标仓库的所有依赖项,以确保程序和测试能够可靠执行。这种容器化方法虽然有效,但需要大量的存储空间、复杂的镜像管理和分发机制,成为训练和部署的主要瓶颈。
Docker环境的高成本是本文要解决的核心问题,SWE-World的动机就是要替代这种资源密集型的执行环境。
强化学习(RL)在代码智能体中的应用
强化学习通过让智能体与环境交互获取奖励信号来优化策略。在SWE任务中,智能体在每个时间步产生思考和动作,环境返回执行反馈,最终根据测试通过情况给予二元奖励(通过/不通过)。常用算法如GRPO(Group Relative Policy Optimization)通过对比多个候选轨迹的相对优势来更新策略。RL需要大量的环境交互,因此对执行环境的效率要求极高。
本文实现了完全无Docker的RL训练,这是相比现有方法的关键突破,使得大规模RL训练在学术环境中成为可能。
测试时缩放(Test-Time Scaling, TTS)
测试时缩放是一种在推理阶段通过增加计算量来提升性能的策略。具体做法是为每个问题实例生成多个候选解决方案(如K=8个),然后使用验证器(verifier)对这些候选进行评分,选择得分最高的作为最终提交。验证器的质量直接决定了TTS的有效性——好的验证器能从众多候选中准确识别最优解。
本文提出的SWR模型作为验证器,在TTS@8设置下将解决率从55.0%提升到68.2%,展示了强大的验证能力。
Chain-of-Thought(CoT)推理
CoT是一种让模型在给出最终答案前先生成中间推理步骤的技术。通过在训练数据中加入思维链,模型学会分解复杂问题,逐步推理得出结论。在本文中,CoT被用于增强SWR奖励模型的判断能力,使其在给出二元奖励前先生成详细的测试报告分析。研究表明,CoT对奖励模型的准确性提升显著(+13%),但对转换模型的边际收益较小。
CoT是本文方法的关键技术之一,它使得奖励模型能够进行更可靠的推理,避免reward hacking问题。
研究动机
当前软件工程智能体的训练和评估高度依赖Docker容器化执行环境,这带来了三个层面的可扩展性瓶颈。首先在数据层面,许多真实的GitHub仓库和Pull Request因为复杂的依赖配置无法在容器中可靠构建和执行而被直接丢弃,导致训练数据覆盖范围受限。其次在训练层面,大规模Docker镜像的存储、管理和分发带来巨大的基础设施开销,特别是在强化学习场景下需要反复启动和管理容器进行rollout,消耗大量内存、CPU和存储资源,往往导致训练基础设施不稳定。第三在测试时层面,由于环境交互计算成本高昂且往往不可逆,难以通过迭代探索或试错策略充分利用额外的测试时计算资源。这些问题在资源受限的学术环境中尤为突出,严重限制了SWE智能体研究的规模化发展。
本文的目标是本文的核心目标是构建一个完全无需Docker的软件工程智能体训练和推理框架,用学习到的LLM模型替代物理执行环境,同时保持与传统Docker-based方法相当甚至更优的性能。具体而言,作者希望实现三个子目标:第一,训练一个能够准确模拟步骤级执行反馈的转换模型(SWT),使智能体无需真正执行代码就能获得有意义的环境反馈;第二,训练一个能够准确判断代码修复是否正确的奖励模型(SWR),替代真实的测试执行进行评估;第三,基于这两个模型建立完整的无Docker训练流水线,支持监督微调、强化学习和测试时缩放。
与已有工作不同的是,本文的独特切入角度在于对执行环境的功能分解。作者观察到,SWE智能体的大多数操作(如文件浏览、代码编辑等)实际上是轻量级的文件系统操作,只有少数操作(如运行程序、执行测试)才需要完整的依赖环境。基于这一洞察,SWE-World将环境分为两部分:确定性的沙盒处理文件操作,确保状态一致性;学习到的LLM模型处理需要语义推理的执行操作。这种设计既保留了智能体-环境交互的完整性,又避免了Docker的高成本。与现有的agentless方法不同,SWE-World保持了智能体的自主探索能力;与纯agent方法相比,它消除了基础设施瓶颈。
核心方法
SWE-World的核心思路是用学习到的模型替代物理Docker环境,同时保留完整的智能体-环境交互循环。整体架构可以类比为一个'虚拟执行环境':当智能体执行文件浏览和编辑操作时,由轻量级沙盒直接处理(这些操作是确定性的,无需语义推理);当智能体执行需要运行代码的操作时,由SWT模型预测执行输出;当智能体提交最终补丁时,由SWR模型模拟测试执行并给出奖励信号。技术路线分为四个阶段:首先从真实Docker交互数据中收集训练样本;然后使用反向推理蒸馏为数据补充Chain-of-Thought;接着分别训练SWT和SWR模型;最后基于这两个模型进行智能体的SFT和RL训练。这种设计使得整个训练流程完全无需Docker,同时保持了标准的智能体-环境交互接口。
本文的核心创新在于用'生成式模拟'替代传统的'回归式评分'来实现奖励评估。现有方法通常将验证简化为生成分类任务,直接从智能体轨迹映射到YES/NO二元token,通过softmax计算log-probabilities得到分数。这种黑盒方法缺乏可解释性,对长轨迹中的噪声敏感。相比之下,SWR作为'虚拟测试运行器',先生成详细的结构化测试报告,再基于报告给出二元奖励。这种设计有两个关键优势:第一,测试报告提供了可解释的验证信号,便于调试和分析;第二,显式的推理过程使模型能够更准确地聚合多个测试用例的结果,避免单个失败用例被忽略。本质上,这是从'直接预测答案'转变为'先推理再给答案'的范式转变。
方法步骤详情
SWE-World的方法包含以下关键步骤。第一步是数据收集:在真实Docker环境中运行智能体rollout,对于每个代码执行步骤,提取转换上下文κ_SWT(包含实例元数据、智能体补丁和执行内容)和真实执行输出y,形成转换数据集D_trans;对于轨迹终点,提取评估上下文κ_SWR(额外包含单元测试U)和真实测试结果y_eval,形成奖励数据集D_reward。第二步是CoT回填:使用教师模型基于输入上下文和真实输出反向推理生成思维链,经过LLM-as-a-Judge质量筛选后,将高质量CoT嵌入训练数据。第三步是模型训练:基于Qwen2.5-Instruct-32B/72B进行SFT,训练SWT预测步骤级执行反馈(stdout, stderr, exit_code),训练SWR预测测试报告和二元奖励。第四步是智能体训练:使用SWE-World环境进行rejection sampling SFT(仅保留SWR判定为正确的轨迹),然后进行GRPO强化学习。第五步是测试时缩放:为每个实例采样N=8个候选轨迹,对每个轨迹查询SWR M=3次取平均分,选择最高分的作为最终提交。
技术新颖性
SWE-World的技术新颖性体现在三个方面。第一,环境功能分解:首次明确将SWE执行环境分解为确定性沙盒和学习模型两部分,前者处理文件操作保证状态一致性,后者处理代码执行提供语义反馈,这种分解在保持交互完整性的同时大幅降低了资源需求。第二,生成式奖励建模:不同于传统的token-level二元分类,SWR通过生成完整的测试报告再给出奖励,实现了'先解释再判断'的范式,显著提高了验证准确性和可解释性。第三,数据效率设计:一次Docker rollout同时产生多个训练样本(步骤级转换样本+轨迹级奖励样本),且SWT/SWR的训练数据可以从同一交互数据中提取,实现了数据的高效复用。此外,SWE-World Dataset通过绕过Docker构建瓶颈,从GitHub直接筛选可处理的PR和issue,扩展了可用训练数据的范围(16.6K任务,3,763个仓库)。
实验结果
实验结果全面验证了SWE-World的有效性。在SWE-bench Verified基准上,Qwen2.5-Coder-32B从基线6.2%通过无Docker SFT提升到52.0%,通过无Docker RL进一步提升到55.0%,最终通过TTS@8达到68.2%。这一成绩显著超越了所有先前的开源模型,包括使用真实Docker训练的FrogBoss-32B(54.6%)和参数量更大的Kimi-Dev-72B TTS@40(60.4%)。对于更小的Qwen3-4B-Instruct模型,SFT和RL分别达到25.6%和30.0%,展示了方法的通用性。SWT-72B作为转换模型,在Minmax-M2.1智能体上支持60.2%的解决率,优于通用LLM如GLM-4.7(59.4%)。SWR-72B在奖励预测上达到0.770准确率、0.780精确率、0.807召回率和0.794 F1分数。消融研究表明,使用SWE-World生成的轨迹进行SFT(52.2%)略优于使用Docker生成的轨迹(51.4%),混合两者则进一步提升到53.8%,证明SWE-World提供的监督质量与物理环境相当甚至更优。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| SWE-bench Verified 代码修复 | Resolve Rate (%) | 68.2 (SWE-World-32B-RL + TTS@8) | 60.4 (Kimi-Dev-72B TTS@40) | +7.8% 绝对提升,且仅需TTS@8而非TTS@40 |
| SWE-bench Verified 纯SFT | Resolve Rate (%) | 52.0 (SWE-World-32B-SFT) | 52.2 (SWE-Mirror-LM-32B) | 相当,但完全无需Docker环境 |
| 奖励模型准确率 | Accuracy / Precision / F1 | 0.770 / 0.780 / 0.794 (SWR-72B) | 0.768 / 0.763 / 0.798 (GLM-4.7) | 精度显著提升,整体性能相当 |
| 测试时缩放效果 | TTS@8 Resolve Rate | 68.2 (SWR-32B) | 59.6 (OpenHands-32B-Verifier) | +8.6% 绝对提升,且缩放曲线更稳定 |
局限与改进
尽管SWE-World取得了显著成果,但仍存在若干局限性。首先,转换模型SWT不可避免地存在模拟保真度差距:在Minmax-M2.1智能体上,SWT-72B相比真实Docker反馈仍有约8.2%的解决率下降(从68.4%降至60.2%),这表明复杂的仓库级执行行为仍难以被完全准确地模拟。其次,方法目前仅在Python仓库上进行验证,对于其他编程语言或更复杂的多语言项目的泛化能力有待进一步验证。第三,SWR虽然通过CoT显著提升了奖励预测准确性(+13%),但仍存在一定的假阳性率,可能在RL训练中导致reward hacking——实验表明使用无CoT的SWR进行RL训练会出现轨迹长度崩溃现象。第四,方法依赖于高质量的教师模型进行CoT生成,这增加了一定的前期成本。最后,当前评估仅限于SWE-bench Verified的500个任务,更大规模的评估可能会暴露更多边界情况。
独立分析的弱点
基于论文内容和独立分析,SWE-World存在以下可改进的弱点。第一,SWT的模拟精度瓶颈:转换模型在复杂场景下仍难以完全准确预测执行输出,特别是涉及并发、网络请求或复杂依赖的程序。改进方向包括引入更细粒度的代码分析(如抽象解释、符号执行)来辅助LLM推理,或采用ensemble方法结合多个模型的预测。第二,CoT生成的依赖性:方法依赖强大的教师模型生成高质量CoT,如果教师模型本身对某些领域知识不足,生成的CoT可能质量下降。可以探索自动化的CoT质量评估和迭代改进机制。第三,奖励模型的鲁棒性:尽管CoT缓解了reward hacking,但SWR仍可能被精心构造的对抗性轨迹欺骗。改进方向包括引入更多样化的训练数据增强模型的鲁棒性,或结合形式化验证方法提供更严格的正确性保证。第四,环境模拟的覆盖范围:当前方法主要处理确定性的stdout/stderr输出,对于非确定性行为(如随机数、时间戳)的模拟能力有限。
未来方向
作者和本文成果共同指向了几个有前景的未来方向。第一,扩展到更多编程语言和项目类型:当前验证限于Python,将SWE-World扩展到JavaScript、Java、Go等语言将大幅增加其实用价值,但需要处理不同语言的执行特性差异。第二,改进环境模拟的粒度:探索更细粒度的执行模拟,如变量级状态追踪、内存布局预测等,使智能体能获得更丰富的调试信息。第三,结合符号推理:将LLM的语义理解与符号执行、抽象解释等形式化方法结合,提高模拟的可证明正确性。第四,探索更高效的TTS策略:当前的多采样投票策略相对简单,可以探索基于MCTS或beam search的更智能搜索策略。第五,开放世界应用:将SWE-World应用于真实的GitHub issue解决流程,实现持续学习和自我改进。第六,研究环境模拟误差对下游任务的影响机制,建立更robust的训练范式。
复现评估
论文在复现性方面做出了良好贡献。代码已在GitHub开源(https://github.com/RUCAIBox/SWE-World),提供了完整的实现细节。训练数据方面,作者不仅使用了公开的SWE-Gym、R2E-Gym等数据集,还构建了新的SWE-World Dataset(16.6K任务,3,763个仓库),这将大大扩展社区可用的训练资源。训练细节在附录中有详细说明,包括超参数设置、训练数据格式等。主要的复现门槛在于算力需求:基于Qwen2.5-32B/72B的模型训练需要相当的GPU资源,但相比维护大规模Docker环境的基础设施成本,这已经是显著的降低。此外,方法的核心组件(SWT、SWR)可以独立使用,降低了完全复现的门槛。总体而言,论文的开源贡献将使社区能够方便地使用和扩展SWE-World。
论文图表