OpenSWE:147 万美元打造最大开源 SWE 训练环境,45k Docker 环境助力代码 Agent 登顶 SWE-bench

一句话总结:GAIR-NLP 团队斥资 147 万美元,构建了 OpenSWE——迄今最大的开源软件工程智能体训练框架,包含 45,320 个可执行 Docker 环境、覆盖 1.28 万个代码仓库,全部基础设施完全开源。基于此训练的 OpenSWE-72B 在 SWE-bench Verified 上达到 66.0%,刷新了 Qwen2.5 系列的 SOTA 记录。


📋 论文信息

  • 标题:daVinci-Env: Open SWE Environment Synthesis at Scale
  • 作者:Dayuan Fu, Shenyu Wu, Yunze Wu, Zerui Peng, Yaxing Huang, Jie Sun, Ji Zeng, Mohan Jiang, Lin Zhang, Yukun Li, Jiarui Hu, Liming Liu, Jinlong Hou, Pengfei Liu(共 14 人)
  • 机构:GAIR-NLP
  • 发布日期:2026年3月13日(v1),2026年3月16日(v2)
  • 开源资源

🎯 147 万美元的"疯狂":为什么要花这么多钱造数据?

在代码智能体领域,有一个残酷的现实:数据是最贵的资产

想象一下训练一个能修 Bug 的 AI Agent。它不仅要能读懂代码,还要能:

  • 理解 issue 描述
  • 定位问题代码
  • 编写修复补丁
  • 确保测试通过

这意味着训练数据不能是静态的"输入-输出"对,而必须是可执行、可验证的完整环境——Agent 写完代码后,能真正跑一遍测试,知道自己改对了没有。

问题是:这种环境从哪来?

看看现有的开源数据集:

数据集 任务数 仓库数 问题
SWE-bench 2,294 12 仓库太少,容易过拟合
SWE-rebench ~19k ~1k 规模有限
OpenSWE 45,320 12,800 ✅ 最大规模

工业界当然有更多数据(比如 OpenAI、Anthropic 内部肯定有海量代码修复轨迹),但他们不会公开。结果就是:学术界想训练一个像样的代码 Agent,连数据都找不到

OpenSWE 的目标很简单:用钱砸出一个学术界能用的大规模 SWE 训练环境,然后全部开源

OpenSWE 方法总览

图1:OpenSWE 的完整流水线——从 GitHub PR 收集到环境构建、质量过滤、轨迹采样,最终产出高质量训练数据


📖 SWE-bench 是什么?为什么它这么重要?

在聊 OpenSWE 之前,得先说说它的"考场"——SWE-bench。

2024 年 8 月,OpenAI 发布了 SWE-bench Verified,这是软件工程智能体领域最权威的基准测试。它的任务设定是:

  1. 输入:一个代码仓库 + 一个 issue 描述(比如"某个函数在处理空列表时会报错")
  2. 输出:一个能修复这个 issue 的代码补丁
  3. 验证:运行仓库的测试套件,看补丁是否真的修复了问题

这个任务难在哪?

  • 仓库很大:动辄几十万行代码,Agent 要在茫茫代码海中定位问题
  • 上下文很长:理解一个 Bug 可能需要读懂多个文件、多个类的交互
  • 验证很严格:不是"看起来对"就行,必须通过真实的测试用例

到了 2026 年,前沿模型在 SWE-bench Verified 上的分数已经突破 60%。OpenSWE 训练的模型拿到了 66.0%,这是什么概念?每 3 个真实世界的 Bug,AI 能独立修好 2 个


🧠 核心挑战:为什么造 SWE 环境这么难?

表面上看,造 SWE 训练数据不就是"找一堆 GitHub PR,然后把它们包装成 Docker 环境"吗?

实际上,这里面坑多到你怀疑人生。

坑1:依赖地狱

每个 Python 项目都有自己的依赖环境。你可能遇到:

  • 这个库需要 Python 3.7,那个库需要 3.10
  • 某个依赖的某个版本已经从 PyPI 下架了
  • 两个依赖互相冲突

让 AI 自动写 Dockerfile 来配置这些环境?99% 的情况会失败。

坑2:测试不靠谱

GitHub PR 里自带的测试可能:

  • 太脆弱,换个环境就挂
  • 测试覆盖不全,修补丁通过了但实际上没改对
  • 依赖外部服务(比如数据库、API),在 Docker 里跑不起来

坑3:Issue-PR 不对齐

很多 PR 的 issue 描述写得很模糊,比如"修复了一些问题"。这种数据拿来训练 Agent,它学到的是什么?学到了如何胡说八道。

坑4:难度不可控

有些 Bug 一眼就能看出来怎么改(太简单,没学习价值),有些 Bug 即使给人类专家也改不出来(太难,Agent 根本学不会)。

OpenSWE 的贡献就是:系统性地解决了这些问题,并把整个流水线开源出来


🔧 方法详解:多智能体合成流水线

OpenSWE 的核心是一套部署在 64 节点集群上的多智能体合成流水线。每一步都有专门的 Agent 负责:

Step 1:PR 收集与过滤

从 GitHub 收集 Python 仓库的 Pull Request,然后四阶段过滤:

阶段 过滤条件 目的
仓库可行性 Stars ≥ 5 过滤掉低质量玩具项目
语言过滤 主语言为 Python 聚焦 Python 生态
Issue 要求 PR 必须关联有具体描述的 issue 确保有清晰的任务定义
实质性更改 排除仅改测试的 PR 确保测试的是真实能力

Step 2:仓库探索 Agent

在写 Dockerfile 之前,需要先了解仓库的结构。探索 Agent 会:

  • 浏览 README 和配置文件
  • 搜索与环境配置相关的文档
  • 总结安装和测试命令

这就像让 Agent 先"预习"一遍仓库,知道它大概长什么样。

Step 3:Dockerfile 构建 Agent

这是最难的一步。为了提高成功率,OpenSWE 做了几个工程优化:

基础镜像预构建:提前构建了覆盖 Python 2.7 到 3.14 的 openswe-python 基础镜像,避免每次都从头装 Python。

本地仓库缓存:用 COPY 命令注入代码,而不是 git clone,绕过 GitHub API 限制。

分层感知提示:指导 Agent 把稳定的底层(比如系统依赖)放前面,变化频繁的层(比如项目代码)放后面,利用 Docker 层缓存加速重建。

一个典型的 Dockerfile 生成过程:

Agent 输入:仓库结构 + README + requirements.txt + setup.py
Agent 输出:完整的 Dockerfile

Agent 思考过程:
1. 这个项目需要 Python 3.9,用 openswe-python:3.9 基础镜像
2. 发现 requirements.txt 里有 torch,需要安装 CUDA 依赖
3. setup.py 里有 C 扩展,需要装 gcc
4. 生成 Dockerfile...

Step 4:评估脚本构建 Agent

有了 Docker 环境,还需要知道怎么跑测试。评估脚本 Agent 负责:

  • 定位与 issue 相关的测试文件
  • 生成运行测试的 bash 脚本
  • 如果原 PR 没有测试,还要合成新的测试用例

Step 5:环境验证

用一个简单但有效的规则验证环境是否可用:

1. 应用"仅测试补丁"(只包含测试代码的改动)→ 测试应该失败
2. 应用"完整补丁"(包含修复代码)→ 测试应该通过

只有两个条件都满足,才接受这个环境

这个验证逻辑确保了:环境确实能复现 Bug,且修复确实能解决 Bug。

Step 6:测试分析 Agent

对于验证失败的环境,分析 Agent 会诊断原因:

  • Dockerfile 配置错误?→ 反馈给 Dockerfile Agent 重试
  • 评估脚本有 Bug?→ 反馈给脚本 Agent 修改
  • 环境本身不可解?→ 标记并丢弃

这个闭环迭代让成功率从第一轮的不到 10% 提升到了最终的 ~20%。

构建流水线架构

图2:多智能体协作的环境构建流水线——仓库探索、Dockerfile 构建、评估脚本生成、测试分析形成闭环迭代


📊 质量控制:难度感知的过滤流水线

有了 45k 个可执行环境还不够,还要确保这些环境的"训练价值"。

OpenSWE 用一个简单但有效的方法来评估难度:让模型尝试解决,看成功率

用 GLM-4.7 模型在每个环境上跑 4 次:

  • 4 次全失败:太难了,Agent 学不会 → 丢弃
  • 4 次全成功:太简单了,没学习价值 → 丢弃
  • 1-3 次成功:难度适中,保留

最终从 ~45k 环境中筛选出约 9,000 个高质量环境,生成约 13,000 条训练轨迹。


🧪 实验结果:登顶 SWE-bench

主要结果

模型 参数量 SWE-bench Verified
Qwen2.5-Coder-Instruct 32B 41.2%
SWE-Master 32B 57.8%
daVinci-Dev 32B 55.3%
OpenSWE 32B 62.4%
daVinci-Dev 72B 58.5%
OpenSWE 72B 66.0%

OpenSWE-32B 比同规模的 SWE-Master 高出 4.6%,OpenSWE-72B 比 daVinci-Dev-72B 高出 7.5%。

数据扩展分析

一个有趣的发现是:训练数据越多,效果越好,而且还没有饱和

论文画出了 Pass@1 随训练步数的变化曲线,发现是近似对数线性的增长( y = a ⋅ log ⁡ ( x ) + b y = a \cdot \log(x) + b y=alog(x)+b),相关系数高达 0.99。

这意味着什么?如果继续扩展 OpenSWE 的规模,模型效果还会继续提升

数据扩展趋势

图3:Pass@1 随训练步数呈对数线性增长,且未观察到饱和迹象——继续扩展数据集将带来额外收益

跨域迁移能力

最让我惊讶的是:在 SWE 数据上训练,数学能力也提升了

基准 Qwen2.5-72B-Base OpenSWE-72B 提升
GSM8K 86.3 94.5 +8.2
MATH-500 73.4 85.6 +12.2
HumanEval 51.8 82.9 +31.1

这说明什么?代码调试能力和推理能力是相通的。训练 Agent 修 Bug 的过程,实际上也在训练它的逻辑推理、多步规划、错误诊断等通用能力。


💰 成本分析:钱都花在哪了?

OpenSWE 项目总投资约 147 万美元,具体分布:

阶段 成本 说明
环境构建 $891,000 LLM API 调用(探索、Dockerfile、脚本生成)
轨迹采样 $376,000 让模型尝试解决每个环境
难度过滤 $200,000 多次采样评估难度
总计 ~$1,470,000

平均每个可执行环境的构建成本约 $19.66。

这个成本高吗?从学术界的角度看确实不低。但从工业界的角度看,这是在"打基础"——有了这套开源的基础设施,后续扩展的边际成本会大幅下降。


💡 我的观点与启发

1. 数据工程的胜利

这篇论文再次证明了:在 Agent 训练中,数据工程的重要性不亚于算法创新

OpenSWE 没有提出什么花哨的新算法,它做的就是:

  • 把 PR 收集流程标准化
  • 把 Dockerfile 生成自动化
  • 把质量过滤系统化

然后用钱和算力把规模堆上去。结果呢?直接登顶。

2. 多智能体协作的范式

OpenSWE 的流水线是一个很好的多智能体协作案例:

  • 探索 Agent 负责"侦察"
  • Dockerfile Agent 负责"搭环境"
  • 脚本 Agent 负责"写测试"
  • 分析 Agent 负责"诊断问题"

每个 Agent 只做一件事,但组合起来能完成复杂任务。这种分工协作的模式,在其他领域也可以借鉴。

3. 开源的价值

最让我感动的是:OpenSWE 把所有东西都开源了

不只是模型权重,而是:

  • 45k 个 Docker 环境
  • 所有 Dockerfile
  • 评估脚本
  • 分布式构建基础设施

这意味着其他团队不需要再花 147 万美元从头造一遍。学术界真正能在这个基础上继续往前走。

4. 一些疑问

Q1:训练数据和测试数据有重叠吗?

OpenSWE 用的是 GitHub PR,SWE-bench Verified 也是从 GitHub 来的。虽然论文说做了去重,但具体怎么去的?如果训练数据里有和测试集高度相似的样本,模型可能只是在"背答案"。

Q2:147 万美元的可复现性?

虽然代码开源了,但如果我想复现整个流程,还是要花 147 万美元吗?有没有更经济的方案?

Q3:仓库分布的偏差?

12.8k 仓库看起来很多,但热门仓库(比如 Django、Flask)的样本肯定比冷门仓库多。这种分布偏差会不会导致模型在冷门项目上效果变差?

环境统计对比

图4:OpenSWE 与其他数据集的规模对比——在任务数和仓库覆盖率上都远超现有开源数据集


🔗 与其他工作的对比

项目 任务数 仓库数 开源程度 SWE-bench Verified
SWE-bench 2.3k 12 数据开源 -
SWE-rebench ~19k ~1k 数据开源 ~55%
daVinci-Dev ? ? 仅模型 58.5%(72B)
OpenSWE 45.3k 12.8k 全开源 66.0%(72B)

OpenSWE 在规模、开源程度、模型效果三个维度上都是最强的。


📝 总结

OpenSWE 这篇论文的贡献可以总结为三点:

  1. 规模突破:构建了迄今最大的开源 SWE 训练环境(45k 任务、12.8k 仓库),比现有数据集大一个数量级
  2. 全栈开源:不只是模型权重,而是把整个构建流水线、Docker 环境、评估脚本全部开源,真正做到"可复现"
  3. 效果验证:OpenSWE-72B 在 SWE-bench Verified 上达到 66.0%,刷新了 Qwen2.5 系列的 SOTA,且展现出强劲的跨域迁移能力

对于想做代码 Agent 的团队,OpenSWE 提供了一个非常好的起点。对于关心 AI 发展的读者,这篇论文揭示了一个重要趋势:在 Agent 训练中,可执行、可验证的环境数据,比静态的 QA 对有价值得多

至于 147 万美元的投资值不值?我觉得值。因为这不是一次性消费,而是为整个开源社区建设基础设施。


📚 参考文献

  1. OpenSWE GitHub: https://github.com/GAIR-NLP/OpenSWE
  2. SWE-bench: https://swebench.com
  3. SWE-bench Verified: https://openai.com/research/swe-bench-verified

觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我的微信公众号:机器懂语言

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐