🚀 DeepSWE-Preview
DeepSWE-Preview 是一个完全开源的、先进的编码智能体,它仅通过强化学习(RL)进行训练,在软件工程(SWE)任务中表现卓越,旨在推动大语言模型智能体强化学习的普及。
🚀 快速开始
若要让 DeepSWE-Preview 发挥最佳性能,我们建议进行如下设置:
- 温度(Temperature)设为 1
- 最大令牌数(Max tokens)至少设置为 32 - 64K
- 使用 R2EGym 的系统/实例提示和工具(
file_editor.py
、execution_bash.py
、search.py
、finish.py
)。更多详情请见此处。
✨ 主要特性
- 强大的推理能力:DeepSWE-Preview 在处理复杂代码库以及查看/编辑多个文件时展现出强大的推理能力,是未来编码智能体的基础模型。
- 优异的性能表现:在 SWE-Bench-Verified 测试中,DeepSWE-Preview 取得了令人瞩目的 59.0% 的成绩,在开源权重类别中排名第一。仅经过 200 步的强化学习训练,SWE-Bench-Verified 得分就提高了约 20%。
📦 安装指南
我们的模型可以使用以下流行的高性能推理系统进行部署:
- vLLM
- Hugging Face Text Generation Inference (TGI)
- SGLang
- TensorRT-LLM
所有这些系统都支持 OpenAI Chat Completions API 格式。
vLLM(推荐)
我们建议使用 vllm>=0.8.5
并在 VLLM 中启用长上下文来部署 DeepSWE-Preview。
export MAX_CONTEXT_LEN=65536
export TENSOR_PARALLEL_SIZE=8
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve agentica-org/DeepSWE-Preview --tensor-parallel-size $TENSOR_PARALLEL_SIZE --max-model-len $MAX_CONTEXT_LEN --hf-overrides '{\"max_position_embeddings\": $MAX_CONTEXT_LEN}' --enable_prefix_caching
📚 详细文档
训练方法
数据
我们的数据集包含来自 R2E-Gym
子集的 4500 个问题。为避免训练过程中的数据污染,我们过滤掉了与 SWE-Bench-Verified
源自相同存储库(如 sympy
)的问题。所有问题都对应于单独的 Docker 镜像。
环境
我们的环境基于 R2E-Gym
构建,这是一个现有的 Gym 环境,用于可扩展地创建高质量的可执行 SWE 环境。
- 状态与动作:
R2E-Gym
将一组四个工具定义为动作空间的一部分。每个工具的输出(一个带有标准输出/标准错误的 Python 程序)代表返回的状态。具体如下:
- 执行 Bash:输出大语言模型生成的 bash 命令的标准输出和标准错误。
- 搜索:搜索并返回大语言模型定义的查询在目录或单个文件中的所有出现位置。
- 文件编辑器:允许查看、创建、替换字符串、插入和撤销对特定文件的编辑。
- 完成/提交:大语言模型判定已解决拉取请求,从而终止轨迹生成。
- 奖励:为简化操作,我们的奖励函数采用了稀疏结果奖励模型(ORM):
1
:大语言模型生成的补丁在时间限制内通过选定的测试样本(Pass2Pass 和 Fail2Pass)。为加速训练,我们的最大时间限制为 5 分钟,而官方 SWE-Bench 评估为 30 分钟。
0
:如果大语言模型的代码在至少一个测试用例中失败或超时,则不给予奖励。
强化学习算法
我们对原始的 GRPO 算法进行了改进,结合了 DAPO、Dr. GRPO、LOOP/RLOO 的见解以及我们的创新,以实现稳定的训练和更好的性能。我们最终的融合算法包括:
- Clip High (DAPO):增加 GRPO/PPO 替代损失的上限,鼓励探索并稳定熵。
- 无 KL 损失 (DAPO):消除 KL 损失,防止大语言模型被限制在原始 SFT 模型的信任区域内。
- 无奖励标准差 (Dr.GRPO):去除奖励标准差,消除 GRPO 损失中的难度偏差,确保更好地区分难题和简单问题。
- 长度归一化 (Dr.GRPO):将替代损失除以最大上下文长度,消除 GRPO 中存在的长度偏差,这种偏差会增加错误响应的长度。
- 留一法 (Loop/RLOO):移除一个样本进行优势估计,减少策略梯度的方差,而不引入偏差。
- 紧凑过滤 (我们的创新):受 DAPO 启发,我们对达到最大上下文长度、生成过程中超时(20 分钟)或达到最大步数的轨迹的损失进行掩码处理。
- 无熵损失 (我们的创新):熵损失会引入更高的不稳定性,并最终导致熵呈指数级增加,从而使训练崩溃。只要基础模型的令牌级熵在 0.3 - 1 之间,就不需要熵损失。
更多关于训练方法的详细描述可在我们的博客文章中找到。
评估
DeepSWE-Preview 在最大上下文长度为 64k 和最大环境步数为 100 的情况下,通过官方 R2E-Gym
代码库进行评估。然后将 DeepSWE 生成的补丁移植到官方 SWE-bench 存储库中计算最终得分。以下是 16 次运行的平均 Pass@1 准确率:
模型 |
框架 |
类型 |
SWE-Bench 验证准确率 (%) |
DeepSWE-Preview (32B) |
R2E-Gym |
智能体 + 混合最佳@16 |
59% |
DeepSWE-Preview (32B) |
R2E-Gym |
智能体 + 混合最佳@8 |
57.9% |
DeepSWE-Preview (32B) |
R2E-Gym |
智能体 |
42.2% |
Devstral-Small (24B) |
OpenHands |
智能体 |
46.6% |
Openhands-LM (32B) |
OpenHands |
智能体(迭代) |
37.2% |
SWE-Agent-LM (32B) |
SWE-Agent |
智能体 |
40.2% |
R2EGym-Agent (32B) |
R2E-Gym |
智能体 |
34.4% |
Skywork-SWE (32B) |
OpenHands |
智能体 |
38.0% |
Skywork-SWE (32B) |
OpenHands |
智能体 + 无执行最佳@8 |
47.0% |
SkyRL-Agent (14B) |
OpenHands |
智能体 |
21.6% |
测试时缩放
图 3:不同 TTS 策略下的 SWE-Bench 验证性能。通过混合 TTS,DeepSWE-Preview 达到了 59% 的准确率,比当前的开源权重模型(SkyWork + TTS,47%)高出 12%。我们注意到,仅使用基于执行和无执行的验证器仍然有效,可以带来 10% 以上的性能提升。
📄 许可证
本项目根据 MIT 许可证发布,这体现了我们对开放和可访问的人工智能开发的承诺。我们相信通过免费提供我们的工作,让任何人都可以使用、修改和扩展,从而实现人工智能技术的普及。这种宽松的许可证确保了全球的研究人员、开发人员和爱好者可以无限制地利用和扩展我们的工作,促进人工智能社区的创新和合作。
致谢