1. 配方总览:三段式递进
Mistral 在官方博客与访谈中把 Devstral 2 的 SWE-Bench 训练流程拆成三步:
- 数据构造:先让智能体「无心插柳」地制造 bug,再让更强模型去修,得到高质量轨迹。
- 强化学习:用可验证的「测试通过 / 失败」作奖励,把 32B 模型继续推离局部最优。
- 推理时验证:并行跑 3 条 rollout,取最短路径 + 补丁语法正确性双重过滤,提升 pass@3→pass@1 转化率。
下面逐段给出可复现参数与踩坑点,并估算继续放大到 72.2% 所需阈值。
2. 数据构造:FeatAdd 让 bug 自然发生
| 维度 | 公开值 | 建议放大值 | 备注 |
|---|---|---|---|
| 源仓库数 | 128(SWE-Smith 集合) | 600+ | 优先选近 18 个月、单元测试覆盖 >70% 的 Python 仓库,降低数据污染风险 |
| 特征描述长度 | 平均 35 token | 60–80 token | 用 Claude 3.5 生成「用户故事」式描述,逼代理做跨文件修改 |
| 成功造 bug 率 | 41%(FeatAdd) | ≥50% | 若低于 45%,把代理从 4-shot 提到 8-shot,并给「运行测试」工具加 30s 超时重试 |
| 轨迹过滤 | 只留测试失败样本 | 再加「补丁 >2 文件且含新增文件」过滤 | 得到多文件、多模块耦合的 Hard 样本,SWE-Bench Verified 的 Frontier 子集对此类样本最敏感 |
经验:把「有意造 bug」Prompt 改成「实现新功能」Prompt 后,bug 分布更接近真实 commit,训练效率提升 2%(Microsoft BugPilot 结果)。
3. 强化学习:用测试信号当奖励
Mistral 沿用 rLLM 框架,把奖励稀疏问题拆成两步:
- 二进制奖励:测试全部通过 → +1,其余 0。
- 过程奖励:每条 rollout 结束后,用「补丁能否被 git apply 且语法无报错」给 0/0.1 小分,防止模型输出纯文本废话。
| 超参 | 公开值 | 放大建议 | 原因 |
|---|---|---|---|
| rollout 温度 | 1.0 | 1.0→1.2 退火 | 前期探索,后期收敛 |
| 每步 batch | 64 条 bug×8 rollout | 128×12 | 把 pass@3 的方差压到 2% 以内 |
| max steps | 100 | 120 | 多文件 bug 平均需 80+ 步才稳定通过 |
| KL 系数 | 0(关闭) | 1e-2→0 退火 | 初期防止崩溃,后期让奖励信号占主导 |
| 学习率 | 1e-6 | 5e-7 | 32B 模型在 64k 上下文下梯度噪声大,降速可提升训练稳定性 |
估算:若把 FeatAdd 数据从 3k 扩到 12k,并按上表调参,RL 阶段可再提 6–7 个百分点。
4. 推理时验证:把 pass@3 转化为 pass@1
Devstral 2 在推理阶段用「最短路径」策略:并行跑 3 条轨迹,选 patch 最短且通过测试者。该策略可把 67.4% pass@3 压缩成 54.6% pass@1(FrogBoss 结果)。继续放大到 72.2% 需再提升两项指标:
- patch 语法通过率:从 92% → ≥98%
- 在 sandbox 里预跑「git apply --check + ast.parse」即可提前过滤语法错误,减少无谓测试耗时。
- 测试通过率方差:把 3 条轨迹的标准差从 5.4% 压到 ≤3%
- 给每条轨迹加 2 次重试(温度 0.3),若仍失败再标记为无效;可把低质量轨迹占比降到 1% 以下。
按贝叶斯估计,若 pass@3 能到 82%,则 pass@1 即可稳在 72% 以上。
5. 落地清单:从 46.8% → 72.2% 需要多少卡?
| 阶段 | 数据量 | 卡时(H100) | 关键瓶颈 |
|---|---|---|---|
| FeatAdd 造 bug | 12k 样本 | 2k | 需要 600 仓库的容器镜像,存储 1.8 TB |
| SFT(BaseMix + FeatAdd) | 9k 轨迹 | 800 | 32k 上下文下显存占用 640 GB,需 8×H100 |
| RL 微调 | 25 step×128×12 | 4k | 每步 reward 评估 2–10 min,用 Ray 分布式可把 CPU 开销降 70% |
| 推理验证 | 500 题 ×3×2 重试 | 200 | 主要瓶颈是 Docker 冷启动,用 warm pool 可压到 5s / 题 |
总成本 ≈ 7k H100 小时,按 2 USD / 小时算约 1.4 万美元,相当于把 Devstral 2 的分数再抬 25 个百分点,单位成本 560 USD/1%,低于业内平均 1k USD/1%。
6. 风险提示与下一步
- 数据污染:SWE-Bench 部分仓库已进 LLM 预训练语料,需用「2024-06 之后 commit」做时间切分。
- 奖励黑客:测试通过但引入静默回退(silent regression),需在 CI 里加回归测试集合,失败即给 -1 奖励。
- 长上下文溢出:128k token 时 32B 模型注意力熵值升高,建议把「文件读」工具改成懒加载,只把相关行塞进窗口。
下一步,Mistral 透露将发布 Devstral-Large(约 70B),同步开源 20k 轨迹的「FeatAdd-Plus」数据集。若按本文配方继续放大,72.2% 的 SWE-Bench Verified 成绩将在 2026 Q1 前进入开源榜单第一梯队。
资料来源
- Mistral AI 官方博客:Devstral 发布帖(2025-05-22)
- Microsoft Research:《BugPilot: Complex Bug Generation for Efficient Learning of SWE Skills》arXiv:2510.19898v1(2025-10-22)
- 作者对 rLLM、SWE-Bench Verified 子集与奖励设计的独立实测笔记(2025-12)