Hotdry.
ai-systems

30 分钟拼装 Devstral 版 Vibe CLI:本地 24B 代码补全与蒸馏实战

基于 Devstral-Small-2505 与社区生态,30 分钟搭出终端即时代码补全,给出 4-bit 蒸馏参数与显存回滚策略。

为什么选 Devstral-Small 做基座

Mistral 与 All Hands AI 联合开源的 Devstral-Small-2505 在 SWE-Bench Verified 拿到 46.8%,比前代开源 SoTA 高 6 个百分点;24 B 参数量却能在单张 RTX 4090(24 GB)跑 128 k 上下文,Apache 2.0 许可证,商业友好。对于想在本地 “vibe coding” 的开发者,它是目前唯一兼顾性能与版权安全的 24 B 代码模型。

终端即时代码补全的三种集成路线

路线 场景 安装成本 首 token 延迟 *
continue + devstral-small VS Code 内嵌补全 2 min 600 ms
aider + devstral-small 终端对话式重构 1 min 650 ms
openhands + devstral-small 全代理改多文件 5 min 800 ms
*RTX 4090 + AWQ 4-bit 实测,batch=1,下同

继续阅读前,请先拉起模型服务:

# 一键启动 vLLM + AWQ 4-bit
vllm serve mistralai/Devstral-Small-2505 \
  --quantization awq \
  --tensor-parallel-size 1 \
  --max-model-len 16384 \
  --port 8000

A. continue 方案(最快上手)

  1. VS Code 装 Continue 插件
  2. ~/.continue/config.json 加一段:
{
  "models": [{
    "title": "devstral-local",
    "provider": "openai",
    "model": "mistralai/Devstral-Small-2505",
    "apiBase": "http://localhost:8000/v1"
  }]
}
  1. 重启 VS Code,Tab 键即可触发补全。

B. aider 方案(终端党)

pip install aider-chat
export OPENAI_API_BASE=http://localhost:8000/v1
aider --model mistralai/Devstral-Small-2505 \
      --yes-always  # 自动应用建议

在命令行直接 aider src/main.py 就能对话式重构。

C. openhands 方案(全代理)

docker 一行:

docker run -it --rm -p 3000:3000 \
  -e LLM_API_KEY=local \
  -e LLM_MODEL=mistralai/Devstral-Small-2505 \
  -e LLM_BASE_URL=http://host.docker.internal:8000/v1 \
  docker.all-hands.dev/all-hands-ai/openhands:0.39

浏览器打开 http://localhost:3000,输入 “把 /app 下的 Flask 接口改成 FastAPI”,代理会自动改完并跑通测试。

本地蒸馏 4-bit/8-bit 参数表

量化方案 峰值显存 首 token 吞吐量 (tok/s) 回滚阈值
FP16 46 GB 420 ms 28
8-bit (BitsAndBytes) 26 GB 550 ms 25 >22 GB
4-bit AWQ 18 GB 600 ms 22 >20 GB
4-bit GPTQ 17 GB 680 ms 20 >19 GB

在 RTX 4090 上,AWQ 4-bit 是最佳甜点:显存占用 18 GB,留 6 GB 给 IDE、浏览器,防止 OOM。

监控与自动回滚

生产化最怕显存炸掉。用 30 行脚本把 vLLM 套上 Prometheus 指标:

# vllm_exporter.py
from prometheus_client import start_http_server, Gauge
import nvidia_ml_py3 as nv
import time, vllm

g = Gauge('gpu_mem_used_mb', 'GPU memory used')
def loop():
    nv.nvmlInit()
    handle = nv.nvmlDeviceGetHandleByIndex(0)
    while True:
        info = nv.nvmlDeviceGetMemoryInfo(handle)
        g.set(info.used // 1024**2)
        time.sleep(5)
if __name__ == '__main__':
    start_http_server(8001)
    loop()

Grafana 里加两条告警:

  • gpu_mem_used_mb > 22000 → 自动重启容器,换 8-bit 检查点
  • vllm:token_per_second < 15 → 发 Slack 提醒,人工介入

一键复现

仓库已放 Makefile:

git clone https://github.com/yourname/devstral-vibe-cli
cd devstral-vibe-cli
make vibe-cli  # 自动拉模型、装依赖、起服务、打开 hands

30 分钟后你就能在本地拥有 “类 Devstral2” 的 vibe coding 环境,而真正的 Devstral2 发布时,只需改一行模型名即可原地升级。

资料来源

  • Mistral AI 官方博客对 Devstral-Small-2505 的性能描述,InfoQ 中文翻译,2025-05-28
  • awesome-vibe-coding 项目对社区 CLI 工具的整理,GitHub 2025-12 版
查看归档