Hotdry.
ai-systems

拆解 Mistral Devstral 2 的 SWE-Bench 微调配方:数据构造、强化学习奖励与推理时 patch 验证流水线

在现有 46.8% 成绩基础上,按 Mistral 披露的三段式配方继续放大,推导出迈向 72.2% 的关键阈值与可落地参数清单。

1. 配方总览:三段式递进

Mistral 在官方博客与访谈中把 Devstral 2 的 SWE-Bench 训练流程拆成三步:

  1. 数据构造:先让智能体「无心插柳」地制造 bug,再让更强模型去修,得到高质量轨迹。
  2. 强化学习:用可验证的「测试通过 / 失败」作奖励,把 32B 模型继续推离局部最优。
  3. 推理时验证:并行跑 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. 二进制奖励:测试全部通过 → +1,其余 0。
  2. 过程奖励:每条 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% 需再提升两项指标:

  1. patch 语法通过率:从 92% → ≥98%
    • 在 sandbox 里预跑「git apply --check + ast.parse」即可提前过滤语法错误,减少无谓测试耗时。
  2. 测试通过率方差:把 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. 风险提示与下一步

  1. 数据污染:SWE-Bench 部分仓库已进 LLM 预训练语料,需用「2024-06 之后 commit」做时间切分。
  2. 奖励黑客:测试通过但引入静默回退(silent regression),需在 CI 里加回归测试集合,失败即给 -1 奖励。
  3. 长上下文溢出: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)
查看归档