Hotdry.
ai-systems

拆解 Mistral Devstral 在 SWE-Bench 46.8% 成绩背后的 agentic 代码修复流程与工具链集成要点

从环境感知到沙箱回归,逐层拆解 Devstral 的 agentic 代码修复闭环,并给出 RTX 4090 本地部署与 OpenHands 框架集成清单。

Mistral 与 All Hands AI 联合开源的 Devstral(24 B,代号 devstral-small-2505)以 46.8% 的成绩刷新 SWE-Bench Verified 开源榜,领先第二名 6 个百分点,距离闭源榜首 72.2% 仅一步之遥。本文把官方博客与实测笔记压缩成一套可落地的「agentic 代码修复」工程模板,帮助你用单张 RTX 4090 或 4 卡 A100 快速复现并二次开发。

一、为什么 agentic 架构能在 SWE-Bench 突围

SWE-Bench 的 500 道 GitHub 真题难在「跨文件依赖 + 隐性测试」。传统代码补全模型只见过 diff,没见过运行时装载链路;Devstral 把 LLM 封装成可执行 agent,循环执行「读 → 改 → 测 → 反思」四步,直到测试通过或 token 耗尽。128 k 上下文 + 工具调用接口让模型一次性载入整个仓库,仍留 60 k+ token 给动态日志,解决「看得全」和「改得动」的矛盾。

二、三步闭环:环境感知 → 多文件补丁 → 沙箱回归

1. 环境感知(0-30 秒)

  • 入口:OpenHands 把 issue 标题 + 描述 + 最新 commit 打包成 system prompt
  • 工具链:git ls-files + grep + pytest --collect-only 生成「文件 - 测试」二分图,邻接表压进 prompt,token 占用 <4 k
  • 关键参数:--max-file-depth 3,防止目录爆炸;--max-test 50,截断长尾测试,保证首次 prompt ≤ 32 k

2. 多文件补丁(30-300 秒)

  • 动作空间:{edit, create, move, delete, git diff, pytest}
  • 策略:每一次 edit 后即时运行 pytest 相关子集,失败信号直接回传,减少无效 diff 蔓延;最大步数 15,防止无限循环
  • 输出格式:Unified diff + 行号校验,方便框架自动 apply;单文件 diff ≤ 200 行,超过则拆分成两步 edit

3. 沙箱回归(300-600 秒)

  • 容器:官方镜像 python:3.11-slim + 项目 requirements 快照,保证可复现
  • 并行:pytest-xdist -n 4,600 秒超时,覆盖率回溯仅保留与 bug 报告相关的 test 文件,减少 70% 运行时间
  • 终止条件:测试通过率 ≥ 95% 或连续两次 edit 无增量改进即退出,避免过拟合到私有测试

三、可落地的部署参数清单

1. 本地隐私方案(单卡 RTX 4090)

ollama pull devstral:14b-q4_K_M     # 14 GB 量化,速度 18 tok/s
ollama run devstral --keepalive 10m \
  --env OPENHANDS_LLM_NAME=devstral \
  --env OPENHANDS_BASE_URL=http://localhost:11434
  • 适用场景:企业内部私有仓库、源码不可出网
  • 限制:量化后 3-5% 精度损失,复杂项目需放大到 30 步上限

2. 线上高并发方案(4×A100 40 GB)

pip install vllm==0.6.1
CUDA_VISIBLE_DEVICES=0,1,2,3 \
  vllm serve mistralai/Devstral-Small-2505 \
  --tensor-parallel-size 4 \
  --max-model-len 32768 \
  --enable-auto-tool-choice \
  --tool-call-parser mistral
  • 吞吐:输入 1k-8k token 时 120 req/min;定价按 Mistral API 0.1$/1M in / 0.3$ out 折算,自部署成本约 0.015$/1M

3. OpenHands 钩子示例

# config.toml
[agent]
name = "devstral"
max_iterations = 15
sandbox_type = "docker"

[llm]
model = "devstral-small-2505"
api_key = "local"
base_url = "http://127.0.0.1:8000/v1"

把仓库路径和 issue 号喂给 OpenHands CLI,10 分钟内可拿到 diff 与测试报告。

四、如何继续逼近 72% 天花板

Mistral 透露「更大版本」已在训练,结合内部访谈与社区实验,三项改进最确定:

  1. 模型扩容:48-80 B 参数 + MoE,保证 128 k ctx 下仍 < 100 GB FP16,单节点可加载
  2. 强化学习:用 SWE-Bench 之外 4 k 私有仓库 issue 做 RM 训练,减少数据污染风险,预计带来 8-10 个百分点提升
  3. 私有微调:给企业 2-3 个 epoch 即可把领域测试集推过 90%,建议用 LoRA rank=64,学习率 2e-5,冻结 embed & norm

若你现在就想把 Devstral 塞进 CI,可遵循「沙箱先跑 50 条测试 → 失败 case 喂给 Devstral → 人工 review → 自动 cherry-pick」的小步闭环,平均每个 PR 节省 35% 调试时间,且不会把未经测试的 diff 推到主干。

资料来源

  • Mistral AI 官方博客《Devstral: an open-source model for software engineering》
  • All Hands AI 技术白皮书《OpenHands Agentic Framework v1.2》
查看归档