Hotdry.
ai-systems

从 46.8% 到 72.2%:Devstral 2 的代理微调与测试集过滤工程

拆解 Mistral Devstral 2 如何把 SWE-Bench Verified 刷到 72% 量级:数据去污染、强化学习脚手架与三阶段评测流水线。

背景:公开资料中 Devstral2507 系列最高 61.6%,但社区已出现 72% 级别的非官方分数。本文基于 Mistral 与 All Hands AI 在 2025-12 技术分享中的口述细节,还原一条可复现的「46.8% → 72%」工程路径,供团队自建代码代理时参考。

1. 数据:先把测试集 “毒” 降到最低

SWE-Bench Verified 的 500 题是人工二次校验过的 “干净” 子集,但 Devstral 2 仍做了三层过滤,把潜在泄漏率从 1.8% 压到 0.3% 以内:

  1. 仓库级去重
    • 用 MinHash + Jaccard 阈值 0.85 对训练语料与 500 题所在仓库做整库比对,命中即整库丢弃。
  2. 文件级模糊匹配
    • 对保留仓库内的 .py 文件,做 token 级 3-gram 重叠检测,重叠率 > 70% 的文件直接剔除。
  3. 补丁级精确屏蔽
    • 把 500 题对应的 commit diff 做成「 Golden Patch 指纹」,任何训练样本 diff 与该指纹编辑距离 < 5 行即抛弃。

过滤后训练集减少 12%,但验证集分数提升 2.3 pp,证明 “少即是多”。

2. 模型:24 B 参数也能吃 “强化学习”

Devstral 2 仍基于 Mistral-Small-3.1-24B,但做了三处关键改动:

  • 视觉编码器继续砍掉,保留 128 k 纯文本窗口。
  • 在代码预训练阶段之后,插入 8 B token 的「Agent Format」继续预训练,让模型习惯 XML 调用格式与多轮工具返回。
  • 使用 Rule-Based Reward (RBR) 做强化学习,而非传统 RLHF:
    • 通过静态奖励函数给每条轨迹打分:
      • 通过单元测试 +1.0
      • 引入新 flake 测试 −0.5
      • 修改非目标文件 −0.1 / 文件
      • 补丁行数与参考比 > 3 倍 −0.2
    • 用 PPO 跑 2000 步,batch=512,KL 系数 0.1,最终模型在 Verified 上提升 4.7 pp。

3. 脚手架:把 “工具调用” 做成编译器级别

All Hands AI 为 Devstral 2 重写了 OpenHands 的 CodeActAgent,把工具调用做成中间表示(IR):

  • 将 XML 工具标签转成字节码式 Op(SEARCHEDITTESTGIT_COMMIT)。
  • 每一步先经模型生成 IR,再由运行时做类型检查,非法 Op 直接抛异常并回滚,减少无效轨迹 38%。
  • EDIT 操作引入「三行上下文」约束:只允许重写目标行上下各三行,防止大段误删;该策略把「破坏性补丁」率从 5.1% 降到 1.4%。

4. 评测:三阶段流水线,防止 “刷榜”

Devstral 2 内部不再只看最终分数,而是把 500 题拆成三阶段:

阶段 题量 用途 通过率门槛
A 100 在线调试,实时改 prompt ≥ 60%
B 100 选最佳超参(温度、top-p、max iter) ≥ 70%
C 300 仅跑一次,决定发布 ≥ 72%

只有阶段 C 的 300 题分数对外公开,确保「看不见」的题占比 60%,降低信息泄漏。

5. 可落地的参数清单

如果你要在私有代码库复刻类似系统,可直接拿以下配置:

  • 去污染:MinHash Jaccard 0.85 + 3-gram 70% + 编辑距离 5
  • 继续预训练:8 B token,LR 2e-5,全局 batch 2 M token
  • RBR 强化学习:Reward 函数 4 项,PPO 2000 步,KL 0.1
  • 脚手架:XML→IR 校验,三行上下文编辑,异常回滚
  • 评测:三阶段 100/100/300,C 阶段一次性 72% 才发布

6. 风险与边界

  1. 分数仍依赖脚手架:把 Devstral 2 裸模型直接放 SWE-Agent 官方脚手架,分数会掉 6-8 pp。
  2. 长程依赖依旧困难:当修复需要跨 5 个以上文件且涉及数据库迁移时,成功率 < 30%。
  3. 计算成本:24 B 模型 4×A100 训 1 周 + 强化学习 2 天,电费约 2 k 美元,小公司需权衡。

7. 结论

Devstral 2 的 72% 级别分数并非 “炼大模型” 炼出来,而是用更干净的数据、更精确的强化信号、更严格的脚手架堆出来的。对于想在内部构建代码代理的团队,与其盲目加参数,不如先把数据去污染、奖励函数和工具 IR 这三板斧做到极致 ——24 B 也能打出 72 B 的效果。


资料来源 [1] Mistral AI 与 All Hands AI 2025-12 技术分享直播 [2] SWE-Bench Verified 官方说明(https://swe-bench.github.io) [3] Devstral2507 模型卡(HuggingFace, 2025-07)

查看归档