1. 为什么 Claude Code 直连 GMI Cloud 会卡在 Key 和 Base URL 上
Claude Code 是 Anthropic 推出的终端 AI 编程工具,它默认只认 Anthropic 官方的接口格式和鉴权方式。而 GMI Cloud Inference Engine 提供的是 OpenAI 兼容风格的 API,底层跑着 H100/H200 集群,集成了 MiniMax、DeepSeek、Qwen、Kling 等近百个模型。两者协议不同,直接拿 Claude Code 去连 GMI Cloud 的 endpoint,请求发出去就会被拒——不是 401 就是格式解析失败。
我试过最原始的改法:把ANTHROPIC_BASE_URL直接指向 GMI Cloud 的https://api.gmi-serving.com/v1,结果 Claude Code 发出的 Anthropic 格式请求体,GMI Cloud 那边根本不认,返回UnsupportedParamsError或者干脆reading choices报错。原因很简单,Anthropic 的 messages 格式和 OpenAI 的 chat completions 格式在字段结构、tool 调用、system prompt 位置上都不一样。
这时候 LiteLLM 就派上用场了。它本质上是一个本地代理网关,跑在localhost:4000,负责把 Claude Code 发来的 Anthropic 格式请求“翻译”成 OpenAI 格式,再转发给 GMI Cloud。整个过程对 Claude Code 透明,它以为自己还在跟 Anthropic 官方说话。
那为什么还要提 TaoToken?因为当你同时用 MiniMax、DeepSeek、Qwen 多个模型时,每个模型一个 Key、一个 Base URL,切换起来非常烦。TaoToken 提供统一的 API Key 和统一的 Base URL,把多模型的路由收口到一处。你只需要在 LiteLLM 的 config.yaml 里把api_base改成 TaoToken 的地址,Key 换成 TaoToken 的 Key,就能用同一套配置驱动所有模型。省下的 200 刀,主要来自不用为每个模型单独买额度、不用重复配置环境。
这篇教程面向的是已经在用 Claude Code、想接入 GMI Cloud Inference Engine 里 MiniMax-M2 模型的开发者。你需要有 Python 环境(跑 LiteLLM)、Node.js 环境(跑 Claude Code),以及一个 GMI Cloud 或 TaoToken 的 API Key。下面从零开始,把每一步命令和配置文件都写清楚。
2. 前置准备:LiteLLM 代理与 TaoToken 统一 Key 的安装配置
2.1 安装 Claude Code 和 LiteLLM
打开 PowerShell,先装 Claude Code:
npm install -g @anthropic-ai/claude-code再装带代理功能的 LiteLLM,注意[proxy]要加引号,否则 PowerShell 会把它当特殊字符处理:
pip install "litellm[proxy]"如果你不确定 Python 和 Node 版本,可以先跑python --version和node --version确认。LiteLLM 要求 Python 3.8 以上,Claude Code 要求 Node 18 以上。
安装完成后,Claude Code 首次运行会引导你登录 Anthropic 账号。如果你不想付费,可以在引导到付费那一步直接退出,后面我们用环境变量接管它的请求方向。
2.2 获取 GMI Cloud 的 MiniMax API Key
登录 GMI Cloud 控制台,进入 Inference Engine 的 Playground,找到 MiniMax-M2 模型页面。在 API 管理区域创建一个 Key,复制下来。这个 Key 的格式通常以sk-开头,后面跟一长串字符。
GMI Cloud 的 OpenAI 兼容 endpoint 是:
https://api.gmi-serving.com/v1模型 ID 写MiniMaxAI/MiniMax-M2。注意大小写和斜杠,LiteLLM 启动时的--model参数必须和这个完全一致,否则会报模型找不到。
2.3 用 TaoToken 统一管理多模型 Key
如果你只用一个 MiniMax,那直接用 GMI Cloud 的 Key 就行。但如果你还想接 DeepSeek、Qwen,每个模型都要去对应平台注册、拿 Key、记 Base URL,非常碎。TaoToken 的做法是提供一个统一的 API 入口,你只需要一个 Key,就能在多个模型之间切换。
TaoToken 的 API 地址是:
https://taotoken.net/api在 LiteLLM 的 config.yaml 里,你只需要把api_base指向这个地址,api_key填 TaoToken 的 Key,model字段写 TaoToken 支持的模型名。这样 LiteLLM 转发请求时,TaoToken 会根据模型名路由到对应的后端。对 Claude Code 来说,它看到的始终是本地localhost:4000,完全无感。
如果你还没有 TaoToken 的 Key,可以去官网注册后,在控制台的 API Keys 页面生成一个。生成后复制保存,后面配置里要用。
2.4 环境变量与目录规划
建议在桌面建一个文件夹,比如claude-gmi,把后面要用的 config.yaml、启动脚本都放进去。这样路径清晰,出问题好排查。
PowerShell 里设置环境变量的语法是$env:变量名="值",注意等号两边不要有空格,值要用引号包起来。这个变量只在当前窗口有效,关掉就没了。所以后面我们会把配置写进$PROFILE或者启动脚本里,避免每次手动设。
3. 可复制配置:LiteLLM config.yaml 与 Claude Code settings 片段
3.1 编写 LiteLLM 的 config.yaml
在claude-gmi文件夹里新建config.yaml,内容如下:
model_list: - model_name: MiniMaxAI/MiniMax-M2 litellm_params: model: openai/MiniMaxAI/MiniMax-M2 api_base: https://api.gmi-serving.com/v1 api_key: os.environ/OPENAI_API_KEY drop_params: true - model_name: deepseek-chat litellm_params: model: openai/deepseek-chat api_base: https://taotoken.net/api api_key: os.environ/TAOTOKEN_API_KEY drop_params: true general_settings: master_key: sk-local-placeholder这里有两个模型条目。第一个走 GMI Cloud 直连,api_key从环境变量OPENAI_API_KEY读取。第二个走 TaoToken 统一入口,api_key从TAOTOKEN_API_KEY读取。drop_params: true的作用是自动丢弃 Anthropic 格式里 OpenAI 不支持的参数,比如reasoning_effort,避免报错。
model_name是 Claude Code 那边要匹配的“暗号”,litellm_params.model是 LiteLLM 实际转发时用的模型标识。两者可以不同,但model_name必须和 Claude Code 环境变量ANTHROPIC_MODEL一致。
3.2 启动 LiteLLM 代理
在 PowerShell 里设置 Key 并启动:
$env:OPENAI_API_KEY="你的GMI_Cloud_Key" $env:TAOTOKEN_API_KEY="你的TaoToken_Key" litellm --config ./config.yaml --port 4000看到Running on http://0.0.0.0:4000就说明代理起来了。这个窗口不要关,它一直在监听请求。如果你只想用 MiniMax 一个模型,也可以不用 config.yaml,直接命令行启动:
litellm --model openai/MiniMaxAI/MiniMax-M2 --api_base https://api.gmi-serving.com/v1 --drop_params但用 config.yaml 的好处是模型多了以后好管理,改配置不用改命令。
3.3 配置 Claude Code 的 settings 与环境变量
Claude Code 读取的是ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL这几个环境变量。我们把它写进 PowerShell 的$PROFILE,这样每次开窗口自动生效。
先打开配置文件:
notepad $PROFILE如果提示文件不存在,就新建一个。粘贴以下内容:
function minimax { $env:ANTHROPIC_BASE_URL = "http://localhost:4000" $env:ANTHROPIC_AUTH_TOKEN = "sk-placeholder" $env:ANTHROPIC_MODEL = "MiniMaxAI/MiniMax-M2" $env:ANTHROPIC_SMALL_FAST_MODEL = "MiniMaxAI/MiniMax-M2" claude @args } function deepseek { $env:ANTHROPIC_BASE_URL = "http://localhost:4000" $env:ANTHROPIC_AUTH_TOKEN = "sk-placeholder" $env:ANTHROPIC_MODEL = "deepseek-chat" $env:ANTHROPIC_SMALL_FAST_MODEL = "deepseek-chat" claude @args }这里ANTHROPIC_AUTH_TOKEN填sk-placeholder就行,因为真正的鉴权在 LiteLLM 那边用OPENAI_API_KEY或TAOTOKEN_API_KEY完成。Claude Code 只负责把请求发到localhost:4000,LiteLLM 再拿真实 Key 去请求上游。
保存后,在 PowerShell 里运行. $PROFILE刷新配置,或者直接开一个新窗口。
3.4 用 CC Switch 管理多套配置
如果你经常在 MiniMax、DeepSeek、Claude 官方之间切换,手动改环境变量很烦。CC Switch 是一个 Claude Code 的配置切换工具,可以预设多套 Base URL + Key + Model ID 组合,一键切换。
它的配置逻辑和上面的$PROFILE函数类似,但提供了图形界面。你可以在 CC Switch 里建三个 profile:一个指向localhost:4000用 MiniMax,一个指向localhost:4000用 DeepSeek,一个指向 TaoToken 的https://taotoken.net/api直接用统一 Key。切换时点一下就行,不用改文件。
如果你用 Cline 的 MCP 模式,配置方式也类似:在 MCP 设置里填 Base URL、API Key、Model ID 三件套。Base URL 填http://localhost:4000,Key 填sk-placeholder,Model ID 填MiniMaxAI/MiniMax-M2。这样 Cline 也会走 LiteLLM 代理。
4. 验证请求:用 MiniMax 模型发起一次对话并检查返回
4.1 启动 Claude Code 并测试
确保 LiteLLM 窗口还在运行,然后新开一个 PowerShell 窗口,输入:
minimax这会触发$PROFILE里的函数,设置好环境变量并启动 Claude Code。进入交互界面后,输入一句简单的话,比如:
你好,请用一句话介绍你自己如果配置正确,你会看到 MiniMax-M2 的回复。这说明整条链路通了:Claude Code → localhost:4000 → LiteLLM → GMI Cloud → MiniMax-M2 → 返回。
4.2 用 curl 直接验证 LiteLLM 代理
如果 Claude Code 那边没反应,可以先绕过 Claude Code,直接用 curl 测 LiteLLM 是否正常:
curl http://localhost:4000/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-local-placeholder" \ -d '{ "model": "MiniMaxAI/MiniMax-M2", "messages": [{"role": "user", "content": "你好"}] }'如果返回 JSON 里有choices字段和内容,说明 LiteLLM 到 GMI Cloud 这段是通的。问题就出在 Claude Code 的环境变量上。
4.3 检查环境变量是否生效
在启动 Claude Code 的同一个窗口里,运行:
echo $env:ANTHROPIC_BASE_URL echo $env:ANTHROPIC_MODEL确认输出是http://localhost:4000和MiniMaxAI/MiniMax-M2。如果为空,说明$PROFILE没加载,运行. $PROFILE刷新,或者检查函数名是否拼错。
4.4 切换到 TaoToken 统一入口验证
把 config.yaml 里的 MiniMax 条目改成走 TaoToken:
- model_name: MiniMaxAI/MiniMax-M2 litellm_params: model: openai/MiniMaxAI/MiniMax-M2 api_base: https://taotoken.net/api api_key: os.environ/TAOTOKEN_API_KEY drop_params: true重启 LiteLLM,再跑一次minimax。如果同样能收到回复,说明 TaoToken 的统一 Key 已经接管了 GMI Cloud 的请求。之后你想换 DeepSeek,只需要在 config.yaml 里加一个条目,Claude Code 那边改一下ANTHROPIC_MODEL就行,Key 和 Base URL 都不用动。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
5.1 401 Unauthorized
报错信息通常是:
litellm.exceptions.AuthenticationError: OpenAIException - Error code: 401 - {'error': {'message': 'Invalid API key'}}原因有三个可能:一是OPENAI_API_KEY没设置或设错了,检查 PowerShell 里echo $env:OPENAI_API_KEY是否有值;二是 GMI Cloud 的 Key 过期或被删,去控制台重新生成;三是 config.yaml 里api_key写成了os.environ/OPENAI_API_KEY,但环境变量名拼错,比如写成了OPENAI_KEY。
如果是走 TaoToken,检查TAOTOKEN_API_KEY是否设置正确,以及 TaoToken 控制台里这个 Key 是否有对应模型的权限。
5.2 local proxy failed 或 connection refused
报错:
Error: connect ECONNREFUSED 127.0.0.1:4000这说明 Claude Code 尝试连localhost:4000,但 LiteLLM 没在跑。检查 LiteLLM 那个窗口是否还开着,有没有报错退出。如果 LiteLLM 启动时报Address already in use,说明 4000 端口被占,换个端口,比如--port 4001,同时把ANTHROPIC_BASE_URL改成http://localhost:4001。
5.3 reading choices 报错
报错:
KeyError: 'choices'或者:
litellm.exceptions.APIError: OpenAIException - 'choices'这通常是因为上游返回的不是标准 OpenAI 格式,或者模型名写错了,GMI Cloud 返回了一个错误信息,LiteLLM 解析时找不到choices字段。检查model参数是否和 GMI Cloud 文档里的一致,MiniMax-M2 要写MiniMaxAI/MiniMax-M2,不能只写MiniMax-M2。
另外,如果drop_params没开,Anthropic 格式里的reasoning_effort等参数会被转发到 GMI Cloud,导致 400 错误,也可能间接引发这个报错。确保 config.yaml 里drop_params: true。
5.4 OAuth 相关报错
报错:
OAuth error: invalid_client或者 Claude Code 启动时一直卡在登录页面。这是因为 Claude Code 检测到没有有效的 Anthropic 登录态,尝试走 OAuth 流程。解决办法是确保ANTHROPIC_AUTH_TOKEN有值(哪怕是sk-placeholder),并且ANTHROPIC_BASE_URL指向了本地 LiteLLM。Claude Code 看到这两个变量后,就不会再走官方 OAuth。
如果还是弹登录,检查$PROFILE里的函数是否真的执行了,可以在函数里加一行Write-Host "Base URL: $env:ANTHROPIC_BASE_URL"来确认。
5.5 模型名不匹配
报错:
litellm.exceptions.BadRequestError: OpenAIException - model not found检查 config.yaml 里的model_name和 Claude Code 的ANTHROPIC_MODEL是否完全一致,包括大小写和斜杠。MiniMaxAI/MiniMax-M2和minimaxai/minimax-m2在 LiteLLM 里可能被视为不同模型。
6. 把 endpoint 收口到 TaoToken:多模型统一管理与长期使用建议
6.1 修改 config.yaml 指向 TaoToken
当你确认 MiniMax 直连没问题后,把 config.yaml 里所有模型的api_base都改成https://taotoken.net/api,api_key统一用os.environ/TAOTOKEN_API_KEY。这样你只需要维护一个 Key,新增模型时只加一个条目,不用再去各个平台注册。
改完后重启 LiteLLM,Claude Code 那边完全不用动,因为ANTHROPIC_BASE_URL还是localhost:4000。
6.2 用 Coding Plan 管理长期编码任务
如果你用 Claude Code 做长期项目,建议了解一下 TaoToken 的 Coding Plan。它针对编码场景做了额度优化,适合需要持续调用模型的开发者。你可以在 TaoToken 控制台里查看 Coding Plan 的详情,根据项目量选择。
6.3 多模型切换的实践建议
实际用下来,我建议把常用模型分成两组:一组是快速响应的轻量模型,比如 MiniMax-M2,用于日常补全和简单问答;另一组是强推理模型,比如 DeepSeek,用于复杂重构和架构设计。在$PROFILE里建两个函数,minimax和deepseek,切换时只改ANTHROPIC_MODEL,Base URL 和 Key 都不变。
如果你用 CC Switch,可以把这两组配置存成两个 profile,一键切换。Cline MCP 那边也是同理,Base URL 填http://localhost:4000,Model ID 填对应的model_name。
6.4 验证模型对话与接入文档
想快速验证某个模型是否可用,可以直接用 TaoToken 的模型对话页面发一条消息,看返回是否正常。接入文档里有各语言的调用示例,包括 curl、Python、Node.js,对着改一下就能用。
排障时优先看 API Keys 页面确认 Key 状态,再看接入文档里的 Base URL 和 Model ID 是否写对。大部分 401 和 model not found 都是这两个地方出的问题。
6.5 最后一步:把启动脚本固化
在claude-gmi文件夹里建一个start_proxy.bat,内容:
@echo off set OPENAI_API_KEY=你的GMI_Cloud_Key set TAOTOKEN_API_KEY=你的TaoToken_Key litellm --config ./config.yaml --port 4000以后每次开机,双击这个 bat 启动 LiteLLM,再开一个 PowerShell 输入minimax或deepseek就能干活。不用每次手动设环境变量,也不用记那些长串的 Key。
整套流程跑通后,你手里就有一个统一的本地网关,Claude Code 负责交互,LiteLLM 负责翻译,TaoToken 负责路由和鉴权。换模型、加模型都只改一个 yaml 文件,Claude Code 那边无感。