← 返回首页 / Back to Home

让 Claude Code 跑 MiMo-v2.5-pro
踩坑全记录 / Troubleshooting Guide

2026-05-28 · 乾茂 · 一次真实的故障排查实战

📋 背景 / Background

🇨🇳 中文

Claude Code (CC) 是 Anthropic 的官方 CLI 编程工具,默认只能连接 Claude API。MiMo-v2.5-pro 是小米开源的推理模型,性价比极高(降价后最高降幅 99%)。

我们想让 CC 跑 MiMo,省下 Claude 的 API 费用,同时保持 CC 的工具调用能力(Playwright 浏览器、文件操作、Git 等)。

🇬🇧 English

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.).

🏗️ 最终架构 / Final Architecture

Claude Code (显示 "Opus 4.7") ↓ Anthropic Messages 格式 ↓ 模型名: claude-opus-4-7 localhost:8899 (本地代理 / Local Proxy) ↓ 替换模型名 → mimo-v2.5-pro ↓ 其他参数原样转发 (tools, system, streaming) MiMo 原生 Anthropic 端点 / Native Anthropic Endpoint https://token-plan-cn.xiaomimimo.com/anthropic/v1/messages
💡 关键发现 / Key Insight:
MiMo 有原生的 Anthropic Messages 端点(/anthropic/v1/messages),不需要格式转换。代理只需要替换模型名,其他参数(tools、system prompt、streaming)全部原样转发。

🕳️ 踩坑记录 / Pitfalls

坑 #1:代理做了多余的格式转换

🇨🇳 问题

最初的代理脚本把 Anthropic 格式转成 OpenAI 格式再转发给 MiMo。结果 tools 参数全部丢失——CC 的 Playwright、文件操作等 MCP 工具全部失效。

🇬🇧 Problem

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, ...)

坑 #2:CC 不认自定义模型名

🇨🇳 问题

CC 启动时会校验模型名,不在它内部列表里的直接拒绝,连 API 都不发。--model mimo-v2.5-pro 会报错 "model may not exist"。

🇬🇧 Problem

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
}

坑 #3:MiMo 降价重置导致 Key 失效

🇨🇳 问题

2026-05-27 MiMo 大降价,所有 Token Plan 额度全量重置。重置后旧 Key 立即失效,新 Key 的 chat/completions 端点返回 502/401(服务器过载)。

🇬🇧 Problem

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).

⚠️ 教训 / Lesson: MiMo 降价期间,老 Key(未重置的)比新 Key 更稳定。能用就别重置!
During MiMo price drops, old keys (unreset) are more stable than new ones. If it works, don't reset!

坑 #4:代理进程卡死不报错

🇨🇳 问题

代理进程在端口 8899 监听,看起来正常运行,但实际不响应请求(卡死)。CC 连上后超时无响应。

🇬🇧 Problem

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"

⚙️ 完整配置步骤 / Full Setup Guide

Step 1:环境变量 / Environment Variables

# 设置 MiMo API Key(系统级,永久生效)
[Environment]::SetEnvironmentVariable("MIMO_DIDI_KEY", "你的key", "User")
[Environment]::SetEnvironmentVariable("MIMO_BASE_URL", "https://token-plan-cn.xiaomimimo.com", "User")

Step 2:代理脚本 / Proxy Script

核心逻辑只有 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())

Step 3:PowerShell PROFILE

# $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
}

Step 4:开机自启 / Auto-start on Boot

# 创建 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

✅ 验证清单 / Verification Checklist

检查项 / Check命令 / Command预期 / Expected
代理进程netstat -ano | Select-String ":8899.*LISTEN"有输出
代理响应POST http://localhost:8899/v1/messages200 OK
MiMo 直连GET /v1/models200 + 模型列表
CC 启动claude显示 Opus 4.7(正常)
工具调用在 CC 里输入 "用 Playwright 打开 example.com"浏览器打开

🔍 故障排查速查表 / Quick Troubleshooting

症状 / 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 格式响应

💰 成本对比 / Cost Comparison

方案模型输入价格输出价格缓存命中
Claude 官方Opus 4.7$15/M tokens$75/M tokens$1.875/M
DeepSeekv4-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 级别的工具调用能力。

📝 总结 / Summary

🇨🇳 中文

让 CC 跑 MiMo 的核心就一句话:代理只替换模型名,其他参数原样转发。

不要做格式转换,不要加 --model flag,不要重置能用的 Key。

三个"不要"搞定一切。

🇬🇧 English

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.