2026-05-28 · 乾茂 · 一次真实的故障排查实战
Claude Code (CC) 是 Anthropic 的官方 CLI 编程工具,默认只能连接 Claude API。MiMo-v2.5-pro 是小米开源的推理模型,性价比极高(降价后最高降幅 99%)。
我们想让 CC 跑 MiMo,省下 Claude 的 API 费用,同时保持 CC 的工具调用能力(Playwright 浏览器、文件操作、Git 等)。
Claude Code (CC) is Anthropic's official CLI coding tool, which normally only connects to the Claude API. MiMo-v2.5-pro is Xiaomi's open-source reasoning model with extreme cost efficiency (up to 99% cheaper after their May 2026 price drop).
We wanted CC to run on MiMo, saving Claude API costs while keeping CC's full tool-calling capabilities (Playwright browser, file ops, Git, etc.).
/anthropic/v1/messages),不需要格式转换。代理只需要替换模型名,其他参数(tools、system prompt、streaming)全部原样转发。
最初的代理脚本把 Anthropic 格式转成 OpenAI 格式再转发给 MiMo。结果 tools 参数全部丢失——CC 的 Playwright、文件操作等 MCP 工具全部失效。
The original proxy converted Anthropic format → OpenAI format before forwarding to MiMo. This stripped all tools parameters — CC's Playwright, file operations, and all MCP tools stopped working.
✅ 解决方案 / Solution:
改用 MiMo 的原生 Anthropic 端点,代理只做模型名替换:
# Before: 格式转换(丢失 tools)
openai_body = convert_anthropic_to_openai(body)
resp = await client.post(DEEPSEEK_URL, json=openai_body, ...)
# After: 原样转发(保留 tools)
body["model"] = "mimo-v2.5-pro"
resp = await client.post(MIMO_ANTHROPIC_URL, json=body, ...)
CC 启动时会校验模型名,不在它内部列表里的直接拒绝,连 API 都不发。--model mimo-v2.5-pro 会报错 "model may not exist"。
CC validates the model name at startup. If it's not in CC's internal list, CC rejects it before even making an API call. --model mimo-v2.5-pro gives "model may not exist" error.
✅ 解决方案 / Solution:
不要在 CC 端指定模型名。让 CC 显示默认的 "Opus 4.7",由代理在转发时替换模型名。CC 不知道实际跑的是 MiMo。
# PowerShell PROFILE — 不加 --model flag
function claude {
$env:ANTHROPIC_API_KEY = ***"MIMO_DIDI_KEY", "User")
$env:ANTHROPIC_BASE_URL = "http://localhost:8899"
Set-Location D:\CherryAI_Workspace
claude.exe # 不加 --model
}
2026-05-27 MiMo 大降价,所有 Token Plan 额度全量重置。重置后旧 Key 立即失效,新 Key 的 chat/completions 端点返回 502/401(服务器过载)。
On 2026-05-27, MiMo had a major price drop and reset all Token Plan credits. Old keys were immediately invalidated. The new key's chat/completions endpoint returned 502/401 (server overload).
代理进程在端口 8899 监听,看起来正常运行,但实际不响应请求(卡死)。CC 连上后超时无响应。
The proxy process listened on port 8899 and appeared running, but was actually frozen — not responding to requests. CC connected but timed out.
✅ 解决方案 / Solution:
# 检查代理是否真能响应 / Check if proxy actually responds
$resp = Invoke-RestMethod -Uri "http://localhost:8899/v1/messages" `
-Method POST -Headers @{"x-api-key"=$key; "anthropic-version"="2023-06-01"} `
-Body $body -TimeoutSec 15
# 如果超时,重启代理 / If timeout, restart proxy
Stop-Process -Name python -Force
Start-Process python -ArgumentList "-u","D:\CherryAI_Workspace\proxy\anthropic_deepseek_proxy.py"
# 设置 MiMo API Key(系统级,永久生效)
[Environment]::SetEnvironmentVariable("MIMO_DIDI_KEY", "你的key", "User")
[Environment]::SetEnvironmentVariable("MIMO_BASE_URL", "https://token-plan-cn.xiaomimimo.com", "User")
核心逻辑只有 10 行:
# anthropic_deepseek_proxy.py 核心 / Core logic
MIMO_ANTHROPIC_URL = "https://token-plan-cn.xiaomimimo.com/anthropic/v1/messages"
MODEL = "mimo-v2.5-pro"
@app.post("/v1/messages")
async def messages_endpoint(request: Request):
body = await request.json()
body["model"] = MODEL # 只替换模型名 / Only replace model name
resp = await client.post(MIMO_ANTHROPIC_URL, json=body, headers={...})
return JSONResponse(resp.json())
# $PROFILE 内容 / Content of $PROFILE
$env:ANTHROPIC_API_KEY = ***"MIMO_DIDI_KEY", "User")
$env:ANTHROPIC_BASE_URL = "http://localhost:8899"
function claude {
$env:ANTHROPIC_API_KEY = ***"MIMO_DIDI_KEY", "User")
$env:ANTHROPIC_BASE_URL = "http://localhost:8899"
claude.exe
}
# 创建 VBS 脚本放到启动文件夹
# Create VBS script in Startup folder
Set objShell = CreateObject("WScript.Shell")
objShell.Run "python -u D:\CherryAI_Workspace\proxy\anthropic_deepseek_proxy.py", 0, False
| 检查项 / Check | 命令 / Command | 预期 / Expected |
|---|---|---|
| 代理进程 | netstat -ano | Select-String ":8899.*LISTEN" | 有输出 ✓ |
| 代理响应 | POST http://localhost:8899/v1/messages | 200 OK ✓ |
| MiMo 直连 | GET /v1/models | 200 + 模型列表 ✓ |
| CC 启动 | claude | 显示 Opus 4.7(正常)✓ |
| 工具调用 | 在 CC 里输入 "用 Playwright 打开 example.com" | 浏览器打开 ✓ |
| 症状 / Symptom | 原因 / Cause | 修复 / Fix |
|---|---|---|
| CC 报 "model may not exist" | PROFILE 里加了 --model mimo-v2.5-pro | 去掉 --model flag,靠代理翻译模型名 |
| CC 报 "Invalid API Key" | Key 失效或环境变量未加载 | 检查 [Environment]::GetEnvironmentVariable("MIMO_XXX_KEY", "User") |
| CC 工具调用失败(Playwright 等) | 代理做了格式转换,丢失 tools 参数 | 确保代理直连 /anthropic/v1/messages,不做格式转换 |
| CC 超时无响应 | 代理卡死或 MiMo API 过载 | 重启代理;检查 MiMo API 状态 |
| CC 显示 "Opus 4.7" 但实际在跑 MiMo | 正常现象 | 代理翻译了模型名,CC 的 UI 不知道 |
| 代理日志有请求但 CC 无反应 | 代理返回格式不对 | 检查代理是否原样返回 MiMo 的 Anthropic 格式响应 |
| 方案 | 模型 | 输入价格 | 输出价格 | 缓存命中 |
|---|---|---|---|---|
| Claude 官方 | Opus 4.7 | $15/M tokens | $75/M tokens | $1.875/M |
| DeepSeek | v4-pro | ¥3/M tokens | ¥6/M tokens | ¥0.025/M |
| MiMo (推荐) | v2.5-pro | ¥3/M tokens | ¥6/M tokens | ¥0.025/M |
MiMo 降价后价格和 DeepSeek 持平,但有小米硬件生态加持。配合本方案,CC 可以用 MiMo 的价格享受 Claude 级别的工具调用能力。
让 CC 跑 MiMo 的核心就一句话:代理只替换模型名,其他参数原样转发。
不要做格式转换,不要加 --model flag,不要重置能用的 Key。
三个"不要"搞定一切。
The core of running CC on MiMo in one sentence: The proxy only replaces the model name; everything else passes through unchanged.
Don't convert formats. Don't add --model flag. Don't reset a working key.
Three "don'ts" solve everything.