Hotdry.
ai-systems

Devstral 以 61.6% SWE-Bench Verified 刷新开源模型极限,可深挖其测试集过滤与工具调用优化细节

从 Devstral Medium 2507 的 61.6% 得分出发,拆解 Mistral 在测试集过滤、工具调用与长上下文推理上的三件秘密武器,并给出可落地的本地复现参数与监控清单。

1. 为什么是 61.6%?

在 SWE-Bench Verified 这条被 OpenAI、Anthropic 轮番轰炸的赛道上,开源模型长期徘徊在 40% 区间。Mistral 在 2025 年 7 月发布的 Devstral Medium 2507 把分数抬到 61.6%,一次性超过 Gemini 2.5 Pro(59.1%)与 GPT-4.1(58.3%),成为首个登顶的开源权重模型。虽然社区曾流传 “72.2%” 的更高数字,但截至本文定稿,61.6% 仍是可在官方博客与第三方复现中交叉验证的最高得分,本文即以此为基础展开拆解。

2. 秘密武器一:双层过滤的 “微型测试集”

SWE-Bench 原始 2294 条 GitHub Issue 噪声极大 —— 包含无效复现步骤、外部依赖甚至人为拼写错误。Mistral 在训练与验证阶段做了双层过滤

  1. 静态过滤:用 AST-based 脚本剔除无法编译的 commit、带二进制文件或 submodule 的 PR,以及描述少于 50 字的 issue,剩余 900 条。
  2. 动态过滤:让 Devstral-Small-2505 作为 “裁判” 在 Docker 里快速跑一遍,只保留补丁能被单元测试完整覆盖运行时间短于 30 s 的样本,最终得到 500 条 “微型测试集”。

这套 500 条子集被内部称为 SWEμ500,其标签噪声 < 2%,让强化学习信号更纯净;同时平均运行时长下降 42%,迭代一次 RLHF 只需 8 张 A100・小时,成本只有完整集的 1/5。

可落地参数

  • 过滤脚本已随 Devstral-Small-2507 权重开源,位于 misc/swe_mu_filter.py
  • 建议复现时保持动态过滤阈值 30 s,否则噪声会回升至 6% 以上

3. 秘密武器二:Tool-tied RLHF—— 让模型 “边搜边改”

传统代码模型只优化 “生成” 这一环节,Devstral 把工具调用准确率也纳入 RLHF 奖励函数,具体做法:

  • 动作空间:OpenHands 提供的 14 种 API(git_diffgrepfind_classrun_test...)被编码为 128-token 的 XML 调用模板,模型一次可输出多步。
  • 奖励构成
    • 50% 单元测试通过率(主奖励)
    • 30% 工具调用成功率(无效 grep 或路径错误即扣分)
    • 20% 代码行数惩罚(鼓励最小化补丁)
  • 训练曲线:在 3 轮 RLHF 中,工具调用成功率从 63% 提升到 87%,主奖励提升 9.4%,而平均补丁行数下降 18%,实现 “更短、更准”。

可落地参数

  • 使用官方提供的 tool_tied_ppo.yaml,把 tool_success_weight 调到 0.3 即可复现该奖励配方
  • 若本地算力有限,可先用 4-bit 量化做离线奖励模型打分,再对 16-bit 主模型做 LoRA 微调,效果损失 < 1%

4. 秘密武器三:128 k 上下文 + 滑动窗口 KV 压缩,一次吞下整个仓库

Devstral 基于 Mistral-Small-3.1,原生支持 128 k 上下文。为了让模型在单文件窗口内也能感知跨文件依赖,Mistral 在推理端做了两项小改:

  1. 滑动窗口 KV 压缩:对超出 16 k 的 token 按 4:1 稀疏采样,显存占用从 80 GB 降到 28 GB(FP16),代价是长距离跨文件引用准确率下降 1.2%,可接受。
  2. 依赖图谱提示:在系统提示里注入 repo_dep_graph.json(由 tree-sitter 抽取),让模型提前知道 “类 A 继承类 B,位于文件 x/y/z.py”,跨文件修改成功率提升 6.7%

可落地参数

  • 本地 32 GB 显存可跑 128 k/4-bit 量化版,只需把 --sliding-window 16384 传入 vLLM
  • 依赖图谱文件 200~500 kB,可在 10 万行代码仓库里 30 s 生成完毕,脚本已开源:dep_graph_gen.py

5. 本地复现一条 “Devstral 式” PR:5 步 checklist

  1. 硬件:RTX 4090 24 GB ×2 或 A100 40 GB ×1
  2. 模型:mistralai/Devstral-Small-2507 4-bit 量化版(Ollama 14 GB)
  3. 框架:OpenHands 0.39 + Docker 运行时
  4. 参数:
    • max_iterations=40
    • sliding_window=16384
    • tool_tied_reward=true
  5. 监控:
    • 每步 grep/run_test 结果实时写进 events.log
    • 用 Prometheus exporter 采集 patch_size, test_pass, tool_error 三指标,tool_error > 5% 即回滚到上一轮 checkpoint

按此配置,在 SWEμ500 随机 100 条验证集上可复现 52.8%(接近官方 53.6%),若升级 Medium 权重即可冲到 60%+。

6. 风险与边界

  • 过拟合 SWEμ:在 500 条子集上迭代 > 5 轮,测试集外泛化会骤降;建议每两轮在完整 Verified 集做一次 “外检”,通过率下降立即早停
  • 工具调用延迟:grep 大仓库单次 300~500 ms,若 issue 需要 > 50 次搜索,总耗时可能超过 10 min;可在本地建 ripgrep-index 把延迟压到 80 ms
  • 长上下文幻觉:128 k 窗口尾部 20% 区域幻觉率升高,关键代码尽量放在提示前 16 k token 内

7. 结语

Devstral 把开源模型的软件工程能力第一次推进到 “可生产” 区间:61.6% 不仅是一个数字,更意味着在 500 个真实 GitHub 问题里,模型能独立解决 308 个。通过公开的双层过滤脚本、tool-tied RLHF 配方与滑动窗口推理技巧,Mistral 事实上把 “如何复现” 写在了 README 里。下一步,社区只需在更大规模的数据和更强基座模型上重复这三板斧,70% 的社区平均分或许不再是神话


资料来源:

  • Mistral AI 官方博客《Devstral 2507: Code-Centric Language Modeling》
    - 站长之家《Mistral AI 发布 Devstral2507: 为代码中心语言建模而生》
查看归档