Hotdry.
ai-systems

Devstral 2 与 Vibe CLI:本地化大模型如何一句 vibe 出可合并 PR

拆解 Mistral 新发布的 Devstral 2(72.2% SWE-Bench)与 Vibe CLI,看本地化大模型如何端到端 vibe 出可合并 PR。

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 编排” 做成模型内生能力,而非外部脚手架。

  1. 上下文窗口拉到 256 k,把整仓库的 README、CI 文件、历史 commit message 一次性塞进去,让模型先 “读懂工程约定”。
  2. 强化学习阶段引入 “可合并奖励”——PR 被合并才算正样本,拒绝或 revert 都算负样本,直接把人类 review 信号喂进损失函数。
  3. 工具调用格式与 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 先做三步:

  1. 扫描当前仓库结构,把 .github/workflowsMakefilego.mod 等 “工程元数据” 转成 4 k token 的提示前缀;
  2. 调用 Devstral 2 生成多文件 patch,同时输出需要运行的 go test ./... 等命令;
  3. 自动在隔离分支提交,推送后给出 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

  1. 先读再写:强制让模型读取 .github/PULL_REQUEST_TEMPLATE.md,把模板里的检查项反向输出成 “自测报告” 放在 PR 正文。
  2. 预算熔断:默认 --max-cost-usd 0.5,超过即暂停,防止无限循环。
  3. 回归门禁:本地跑一遍 pytest --covruff check,覆盖率下降或 lint 报错立即终止。
  4. 人类兜底:生成的 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

查看归档