Claude Code 多模型网关部署教程:从零实现多厂商大模型并行调度
Claude Code 多模型网关部署教程:从零实现多厂商大模型并行调度
通过 LiteLLM 本地网关,在 Claude Code CLI 中同时使用 Claude、GLM(智谱)、MiniMax、Kimi(月之暗面)、DeepSeek 五家大模型,不同任务自动路由到不同厂商,并行执行。
一、为什么需要多模型网关
痛点:
- 不同模型各有所长:Claude 擅长编码,GLM 中文理解强,DeepSeek 推理性价比高
- 手动切换环境变量繁琐,每次改
ANTHROPIC_BASE_URL、API_KEY、MODEL - 无法在一个会话内同时利用多家模型的能力
目标效果:
一个 Claude Code 会话内:
- 需求分析 → 自动调用 GLM
- Bug 查找 → 自动调用 DeepSeek
- 编码实现 → 自动调用 Claude
- 代码审查 → 自动调用 MiniMax
- 长文总结 → 自动调用 Kimi(128K 上下文)
原理:在本地部署一个 LiteLLM 代理服务(网关),它充当「模型翻译器」——把 Claude Code 发出的统一格式请求,翻译成各家 API 各自的格式,转发给对应厂商。
二、架构示意
┌─────────────────────────────────────────────────────┐
│ Claude Code CLI │
│ (你的操作入口,唯一需要交互的终端) │
└────────────────────────┬────────────────────────────┘
│
│ ANTHROPIC_BASE_URL=http://localhost:4000
│ 所有请求发给本地网关
▼
┌─────────────────────────────────────────────────────┐
│ LiteLLM Proxy (:4000) │
│ │
│ 收到请求,根据 model 名称路由到对应厂商 │
│ 把 Anthropic 格式 → 转换为各家 API 格式 │
│ 把各家响应 → 统一转回 Anthropic 格式返回 │
└───┬─────────┬──────────┬──────────┬─────────┬───────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌────────┐ ┌───────┐ ┌─────────┐
│Claude │ │ GLM │ │DeepSeek│ │MiniMax│ │ Kimi │
│编码 │ │分析 │ │找bug │ │审查 │ │总结 │
└───────┘ └───────┘ └────────┘ └───────┘ └─────────┘
三、环境准备
3.1 前置条件
- 操作系统:macOS / Linux / Windows 均可(本教程以 macOS 为例)
- Python 3.8+(检查:
python3 --version) - pip(检查:
pip3 --version) - Claude Code CLI 已安装(检查:
claude --version)
3.2 获取各厂商 API Key
| 厂商 | 注册地址 | API Key 获取位置 |
|---|---|---|
| Anthropic (Claude) | console.anthropic.com | Settings → API Keys |
| 智谱 AI (GLM) | open.bigmodel.cn | API Key 管理 |
| DeepSeek | platform.deepseek.com | API Keys |
| MiniMax | platform.minimaxi.com | API Key 管理 |
| 月之暗面 (Kimi) | platform.moonshot.cn | API Key 管理 |
建议先把 5 个 Key 都准备好,后续一步到位。如果暂时只有部分 Key,也可以先配置已有的,后续随时添加。
四、安装 LiteLLM Proxy
# 安装(包含 Proxy 功能)
pip3 install 'litellm[proxy]'
安装完成后验证:
litellm --version
如果提示
command not found,试试python3 -m litellm --version,或者确认 pip 安装路径在 PATH 中。
五、编写配置文件
创建一个目录存放配置:
mkdir -p ~/litellm-gateway
cd ~/litellm-gateway
创建 config.yaml:
# ============================================================
# LiteLLM 多模型网关配置
# 功能:Claude Code 通过本地代理调用 5 家厂商大模型
# ============================================================
model_list:
# ── Claude (Anthropic) ──────────────────────────────────
# 用途:编码实现、架构设计(主力模型)
- model_name: claude-coder
litellm_params:
model: anthropic/claude-sonnet-4-6
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-opus
litellm_params:
model: anthropic/claude-opus-4-7
api_key: os.environ/ANTHROPIC_API_KEY
# ── GLM (智谱 AI) ──────────────────────────────────────
# 用途:中文需求分析、文档理解
# 文档:https://docs.litellm.ai/docs/providers/zai
- model_name: glm-4
litellm_params:
model: zai/glm-4
api_key: os.environ/ZAI_API_KEY
- model_name: glm-4-flash
litellm_params:
model: zai/glm-4-flash
api_key: os.environ/ZAI_API_KEY
- model_name: glm-4-plus
litellm_params:
model: zai/glm-4-plus
api_key: os.environ/ZAI_API_KEY
# ── DeepSeek ───────────────────────────────────────────
# 用途:Bug 查找、代码推理、高性价比任务
# 文档:https://docs.litellm.ai/docs/providers/deepseek
- model_name: deepseek-chat
litellm_params:
model: deepseek/deepseek-chat
api_key: os.environ/DEEPSEEK_API_KEY
- model_name: deepseek-reasoner
litellm_params:
model: deepseek/deepseek-reasoner
api_key: os.environ/DEEPSEEK_API_KEY
# ── MiniMax ────────────────────────────────────────────
# 用途:代码审查、多模态任务
# 文档:https://docs.litellm.ai/docs/providers/minimax
- model_name: minimax-m2-5
litellm_params:
model: minimax/MiniMax-M2.5
api_key: os.environ/MINIMAX_API_KEY
- model_name: minimax-m2-1
litellm_params:
model: minimax/MiniMax-M2.1
api_key: os.environ/MINIMAX_API_KEY
# ── Kimi (月之暗面 / Moonshot AI) ──────────────────────
# 用途:长文总结(128K 上下文)、知识问答
# 文档:https://docs.litellm.ai/docs/providers/moonshot
- model_name: kimi-8k
litellm_params:
model: moonshot/moonshot-v1-8k
api_key: os.environ/MOONSHOT_API_KEY
- model_name: kimi-128k
litellm_params:
model: moonshot/moonshot-v1-128k
api_key: os.environ/MOONSHOT_API_KEY
# ── 网关设置 ──────────────────────────────────────────────
litellm_settings:
drop_params: true # 自动丢弃目标模型不支持的参数,避免报错
set_verbose: false # 生产环境关闭详细日志;调试时可改为 true
general_settings:
master_key: sk-litellm-local-key # 网关访问密钥(自定义,用于客户端连接认证)
配置文件解读
每个模型条目有两个关键参数:
| 参数 | 含义 | 示例 |
|---|---|---|
model_name |
你给模型起的别名,Claude Code 中用这个名字调用 | deepseek-chat |
litellm_params.model |
LiteLLM 内部的路由标识,格式为 厂商前缀/模型ID |
deepseek/deepseek-chat |
litellm_params.api_key |
对应厂商的 API Key,用 os.environ/变量名 从环境变量读取 |
os.environ/DEEPSEEK_API_KEY |
厂商前缀速查:
| 厂商 | LiteLLM 前缀 | 文档 |
|---|---|---|
| Anthropic | anthropic/ |
文档 |
| 智谱 AI | zai/ |
文档 |
| DeepSeek | deepseek/ |
文档 |
| MiniMax | minimax/ |
文档 |
| 月之暗面 | moonshot/ |
文档 |
六、配置环境变量
把 5 个厂商的 API Key 写入环境变量。编辑 ~/.zshrc(如果用 bash 则编辑 ~/.bashrc):
# ── LLM 网关:各厂商 API Key ──
# Anthropic (Claude)
export ANTHROPIC_API_KEY="sk-ant-你的Key"
# 智谱 AI (GLM)
export ZAI_API_KEY="你的智谱Key"
# DeepSeek
export DEEPSEEK_API_KEY="你的DeepSeekKey"
# MiniMax
export MINIMAX_API_KEY="你的MiniMaxKey"
# 月之暗面 (Kimi)
export MOONSHOT_API_KEY="你的KimiKey"
加载生效:
source ~/.zshrc
安全提示:API Key 是敏感信息,不要提交到 Git 仓库。如果使用公共电脑,考虑用
dotenv文件管理,并加入.gitignore。
七、启动网关
cd ~/litellm-gateway
# 前台启动(可以看到实时日志,调试用)
litellm --config config.yaml --port 4000
启动成功后你会看到类似输出:
INFO: LiteLLM Proxy running on http://0.0.0.0:4000
后台运行(生产推荐)
如果你想让网关在后台常驻运行:
# 后台启动,日志输出到文件
nohup litellm --config ~/litellm-gateway/config.yaml --port 4000 > ~/litellm-gateway/litellm.log 2>&1 &
# 查看日志
tail -f ~/litellm-gateway/litellm.log
# 停止网关
kill $(lsof -ti:4000)
用 systemd 管理开机自启(Linux)
# 创建 service 文件
sudo tee /etc/systemd/system/litellm.service <<EOF
[Unit]
Description=LiteLLM Proxy
After=network.target
[Service]
Type=simple
User=$USER
WorkingDirectory=$HOME/litellm-gateway
ExecStart=$(which litellm) --config $HOME/litellm-gateway/config.yaml --port 4000
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动
sudo systemctl enable litellm
sudo systemctl start litellm
# 查看状态
sudo systemctl status litellm
用 macOS launchctl 管理开机自启
# 创建 plist 文件
cat > ~/Library/LaunchAgents/com.litellm.proxy.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.litellm.proxy</string>
<key>ProgramArguments</key>
<array>
<string>$(which litellm)</string>
<string>--config</string>
<string>$HOME/litellm-gateway/config.yaml</string>
<string>--port</string>
<string>4000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>$HOME/litellm-gateway/litellm.log</string>
<key>StandardErrorPath</key>
<string>$HOME/litellm-gateway/litellm-error.log</string>
</dict>
</plist>
EOF
# 加载并启动
launchctl load ~/Library/LaunchAgents/com.litellm.proxy.plist
# 停止
# launchctl unload ~/Library/LaunchAgents/com.litellm.proxy.plist
八、验证网关是否正常
网关启动后,用 curl 逐个测试模型是否可达:
# 测试 Claude
curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-local-key" \
-d '{"model":"claude-coder","messages":[{"role":"user","content":"说你好"}]}'
# 测试 GLM
curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-local-key" \
-d '{"model":"glm-4-flash","messages":[{"role":"user","content":"说你好"}]}'
# 测试 DeepSeek
curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-local-key" \
-d '{"model":"deepseek-chat","messages":[{"role":"user","content":"说你好"}]}'
# 测试 MiniMax
curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-local-key" \
-d '{"model":"minimax-m2-5","messages":[{"role":"user","content":"说你好"}]}'
# 测试 Kimi
curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-local-key" \
-d '{"model":"kimi-8k","messages":[{"role":"user","content":"说你好"}]}'
每个请求都应该返回一段 JSON,包含模型的回复内容。如果报错,看返回的 error 字段排查(常见问题见第十节)。
九、连接 Claude Code
9.1 配置环境变量
在 ~/.zshrc(或 ~/.bashrc)中添加:
# ── Claude Code 连接本地网关 ──
export ANTHROPIC_BASE_URL=http://localhost:4000
export ANTHROPIC_API_KEY=sk-litellm-local-key # 网关的 master_key
注意:这会覆盖之前设置的 Anthropic API Key。但不用担心——LiteLLM 网关的 config.yaml 中已经配置了各家真实的 API Key,网关会自动转发。
重新加载:
source ~/.zshrc
9.2 启动 Claude Code 并切换模型
# 默认启动(使用 Claude Sonnet 编码)
claude
# 或启动时指定模型
claude --model deepseek-chat
claude --model glm-4
在会话中切换模型:
/model claude-coder # 切到 Claude 编码
/model glm-4 # 切到 GLM 分析需求
/model deepseek-chat # 切到 DeepSeek 找 bug
/model minimax-m2-5 # 切到 MiniMax 审查
/model kimi-128k # 切到 Kimi 长文总结
每次切换后,后续对话自动路由到对应厂商。
9.3 子代理配置不同模型(核心:实现并行)
这是最关键的部分——通过配置 Claude Code 的子代理(Agent),让不同角色自动使用不同厂商模型,并行执行。
在项目根目录创建子代理定义文件:
mkdir -p .claude/agents
需求分析代理(用 GLM):
cat > .claude/agents/requirement-analyzer.md <<'EOF'
---
model: glm-4
---
你是需求分析专家。负责:
- 解析用户需求描述
- 梳理功能点和边界条件
- 输出结构化的需求文档
EOF
Bug 查找代理(用 DeepSeek):
cat > .claude/agents/bug-finder.md <<'EOF'
---
model: deepseek-chat
---
你是 Bug 查找专家。负责:
- 分析代码逻辑缺陷
- 检查边界条件和异常处理
- 输出问题列表和修复建议
EOF
代码审查代理(用 MiniMax):
cat > .claude/agents/code-reviewer.md <<'EOF'
---
model: minimax-m2-5
---
你是代码审查专家。负责:
- 审查代码质量和规范
- 检查安全漏洞
- 输出审查报告
EOF
文档总结代理(用 Kimi):
cat > .claude/agents/doc-summarizer.md <<'EOF'
---
model: kimi-128k
---
你是文档总结专家。负责:
- 总结长文档核心内容
- 提取关键信息
- 输出精简摘要
EOF
配置完成后,当你在 Claude Code 中使用这些子代理时,它们会自动连接到不同厂商的模型并行工作。
9.4 开启模型自动发现(可选)
开启后,Claude Code 的 /model 选择器会自动列出网关中所有可用的模型:
# 加入 ~/.zshrc
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
开启后运行 /model,你会看到下拉列表中自动包含 claude-coder、glm-4、deepseek-chat 等所有配置过的模型。
十、常见问题排查
Q1: 启动网关报错 ModuleNotFoundError
pip3 install 'litellm[proxy]' --upgrade
Q2: curl 测试返回 401 Authentication Error
检查 config.yaml 中的 master_key 是否与 curl 请求中的 Authorization: Bearer 值一致。
Q3: curl 测试返回 401 且提示 API Key 无效
这是目标厂商的 API Key 无效,不是网关的 Key。检查:
- 环境变量是否正确设置:
echo $DEEPSEEK_API_KEY - 是否执行了
source ~/.zshrc - API Key 是否过期或余额不足
Q4: Claude Code 连接网关失败 ECONNREFUSED
- 确认网关正在运行:
curl http://localhost:4000/health - 确认环境变量正确:
echo $ANTHROPIC_BASE_URL应输出http://localhost:4000
Q5: 某个模型报错 model not found
检查 config.yaml 中的 model_name 是否与你在 Claude Code 中使用的名称完全一致(区分大小写)。
Q6: /model 选择器看不到自定义模型
- 确认开启了模型发现:
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 - 或者手动添加自定义模型选项:
export ANTHROPIC_CUSTOM_MODEL_OPTION="deepseek-chat"
export ANTHROPIC_CUSTOM_MODEL_OPTION_NAME="DeepSeek"
Q7: 网关日志怎么看
# 前台模式:日志直接输出到终端
# 后台模式:
tail -f ~/litellm-gateway/litellm.log
# 或者启动时开启详细日志
litellm --config config.yaml --port 4000 --detailed_debug
十一、成本优化建议
不同任务的复杂度不同,合理分配模型可以大幅降低成本:
| 任务类型 | 推荐模型 | 理由 |
|---|---|---|
| 编码实现 | Claude Sonnet / Opus | 编码能力最强 |
| 需求分析 | GLM-4-Flash | 中文理解好,价格便宜 |
| Bug 查找 | DeepSeek-Chat | 推理能力强,性价比极高 |
| 代码审查 | MiniMax-M2.1 | 足够用,成本低 |
| 长文总结 | Kimi-128K | 128K 上下文,长文本优势 |
| 快速问答 | GLM-4-Flash / DeepSeek | 响应快,成本低 |
| 复杂架构 | Claude Opus | 推理能力最强 |
子代理分层策略:
主 Agent (Claude Sonnet) ← 指挥调度
├── 子代理: 需求分析 (GLM-Flash) ← 便宜
├── 子代理: Bug查找 (DeepSeek) ← 性价比高
├── 子代理: 编码 (Claude Sonnet) ← 主力
└── 子代理: 审查 (MiniMax-M2.1) ← 够用
十二、一键启动脚本
把整个流程封装成一个脚本,一键启动:
cat > ~/litellm-gateway/start.sh <<'SCRIPT'
#!/bin/bash
# LiteLLM 网关一键启动脚本
GATEWAY_DIR="$HOME/litellm-gateway"
LOG_FILE="$GATEWAY_DIR/litellm.log"
CONFIG_FILE="$GATEWAY_DIR/config.yaml"
PORT=4000
# 检查是否已在运行
if lsof -ti:$PORT > /dev/null 2>&1; then
echo "⚠️ 网关已在运行 (PID: $(lsof -ti:$PORT))"
echo " 停止: kill \$(lsof -ti:$PORT)"
exit 0
fi
# 检查配置文件
if [ ! -f "$CONFIG_FILE" ]; then
echo "❌ 配置文件不存在: $CONFIG_FILE"
exit 1
fi
# 启动网关
echo "🚀 启动 LiteLLM 网关 (端口: $PORT)..."
nohup litellm --config "$CONFIG_FILE" --port $PORT > "$LOG_FILE" 2>&1 &
# 等待启动
sleep 3
# 验证
if curl -s http://localhost:$PORT/health > /dev/null 2>&1; then
echo "✅ 网关启动成功"
echo " 地址: http://localhost:$PORT"
echo " 日志: tail -f $LOG_FILE"
echo ""
echo "📋 可用模型:"
curl -s http://localhost:$PORT/v1/models \
-H "Authorization: Bearer sk-litellm-local-key" \
| python3 -c "import sys,json; [print(f' - {m[\"id\"]}') for m in json.load(sys.stdin)['data']]"
else
echo "❌ 启动失败,查看日志: tail -f $LOG_FILE"
exit 1
fi
SCRIPT
chmod +x ~/litellm-gateway/start.sh
使用:
# 一键启动
~/litellm-gateway/start.sh
# 停止网关
kill $(lsof -ti:4000)
总结
整个部署流程就三步:
pip install 'litellm[proxy]'— 安装网关- 编写
config.yaml— 配置你的模型和 API Key - 设置
ANTHROPIC_BASE_URL=http://localhost:4000— Claude Code 连接网关
之后在 Claude Code 中用 /model 即可随时切换模型,子代理配置不同 model 字段即可并行调用不同厂商。
参考资料:
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)