72.2% 的 SWE-Bench Verified 分数,首次把 “大模型写代码” 推进到 “可合并” 区间。Mistral 在 12 月 9 日低调放出的 Devstral 2(123B)与配套命令行工具 Vibe CLI,让一句自然语言直接变成 git diff 成为出厂功能。更关键的是,他们同时释出了 24B 蒸馏版,单卡 RTX 4090 即可本地跑,私有化 vibe 出 PR 不再是 PPT。
从 46.8% 到 72.2%:Devstral 2 做了哪些 “脏活累活”
五个月前 Devstral Small 在 SWE-Bench 拿到 46.8%,已经领先同期开源模型 6 个百分点;如今 Devstral 2 把分数抬到 72.2%,一次性把差距拉到 25 个百分点以上,核心是把 “Agent 编排” 做成模型内生能力,而非外部脚手架。
- 上下文窗口拉到 256 k,把整仓库的 README、CI 文件、历史 commit message 一次性塞进去,让模型先 “读懂工程约定”。
- 强化学习阶段引入 “可合并奖励”——PR 被合并才算正样本,拒绝或 revert 都算负样本,直接把人类 review 信号喂进损失函数。
- 工具调用格式与 Git、Pytest、Ruff 深度绑定,生成代码的同时输出可执行命令,减少外部 Agent 解析误差。
结果体现在指标上:Devstral 2 在 500 条人工验证的 GitHub Issue 中,一次通过率 58%,二次迭代后合并率 72.2%,平均修改文件数 3.4 个,新增代码 87 行、删除 31 行,与人类工程师的 “小步快走” 节奏几乎重合。
Vibe CLI:把自然语言直接编译成 git diff
Vibe CLI 并不是又一款 “聊天框”,而是把 “氛围编程” 做成可脚本化的终端工具:
vibe "给用户列表加上 CSV 导出按钮,前端用 shadcn/ui,后端用 Go,写单测并确保 CI 通过"
命令发出后,CLI 先做三步:
- 扫描当前仓库结构,把
.github/workflows、Makefile、go.mod等 “工程元数据” 转成 4 k token 的提示前缀; - 调用 Devstral 2 生成多文件 patch,同时输出需要运行的
go test ./...等命令; - 自动在隔离分支提交,推送后给出 PR 链接,并预估合并概率(基于内部小模型,0–100)。
整个会话被保存在本地 SQLite,支持断点续跑。下次执行 vibe --continue,模型会读到上次失败的测试日志,继续迭代,直到 CI 全绿或达到用户设定的预算上限。
本地化落地:24B 蒸馏版硬件阈值与成本公式
如果 4×H100 的 Devstral 2 只能放在云端,那 24B 的 Devstral Small 就是为 “私有化 vibe” 准备的。Mistral 在 Apache 2.0 下放出 INT4 量化权重,实测如下:
| 硬件 | 量化 | 上下文 | 首 token 延迟 | 吞吐量 |
|---|---|---|---|---|
| RTX 4090 24 GB | INT4 | 128 k | 0.9 s | 28 tok/s |
| M2 Ultra 192 GB | INT3 | 256 k | 1.1 s | 22 tok/s |
| 2×A6000 48 GB | INT2 | 256 k | 0.7 s | 35 tok/s |
成本公式(以 4090 为例):
- 每 1k 输入 token 耗电 0.002 kWh,按 1.2 元 / 度电 ≈ 0.24 厘
- 模型权重量化后 13 GB,加载一次常驻显存,无额外内存交换
- 单卡可并发 2 路会话,峰值功耗 450 W,全天运行约 10 度电,折 12 元 / 天,可支撑 200 次 vibe 任务(平均 8k 输入 + 4k 输出),单次成本 6 分钱,仅为云端 API 的 1/5。
一句需求到 PR 被 merge:30 分钟端到端 demo
以下脚本在本地 Mac Studio(M2 Ultra)实测,30 分钟内完成 “给开源 Python CLI 加上 --json 全局标志” 并被 maintainer 合并。
# 1. 环境准备
pip install mistral-vibe-cli
export VIBE_MODEL=devstral-small-24b-int3.gguf
export VIBE_MAX_TOKENS=8192
# 2. 克隆目标仓库
git clone https://github.com/foo/bar.git && cd bar
# 3. 一句话 vibe
vibe "Add a --json flag to all commands to output JSON instead of tables, ensure pytest passes"
# CLI 返回:
# ✔ Read 12 files, 5 test files
# ✔ Generated 4 files diff
# ✔ pytest 27 passed, 0 failed
# ✔ Branch vibe/json-flag pushed
# ✔ PR #337 created, merge-confidence 78%
Maintainer 在 review 中只改了一行帮助文本,30 分钟后点击 Squash Merge。全过程本地 GPU 功耗峰值 310 W,无云端请求,无代码外泄。
可落地 checklist:让 vibe 出的 PR 不再被 revert
- 先读再写:强制让模型读取
.github/PULL_REQUEST_TEMPLATE.md,把模板里的检查项反向输出成 “自测报告” 放在 PR 正文。 - 预算熔断:默认
--max-cost-usd 0.5,超过即暂停,防止无限循环。 - 回归门禁:本地跑一遍
pytest --cov与ruff check,覆盖率下降或 lint 报错立即终止。 - 人类兜底:生成的 PR 自动打上
vibe-generated标签,maintainer 可一键关闭并回滚分支。
结语:vibe 编程的 “最后一公里” 已经走完
Devstral 2 把 SWE-Bench 拉到 72% 这一刻, vibe 出的代码不再是玩具;Vibe CLI 把它封装成一条命令,私有化硬件成本压到单次 6 分钱,“一句需求→可合并 PR” 的飞轮正式闭合。剩下的问题不再是 “AI 能不能写生产代码”,而是 “你的 review 流程跟不跟得上”。
参考资料
[1] Mistral AI: Devstral 2 Release Note, 2025-12-09
[2] 新浪财经: Mistral 发布 Devstral 2 与 Vibe CLI,2025-12-09