Claude Code 多模型网关部署教程:从零实现多厂商大模型并行调度

通过 LiteLLM 本地网关,在 Claude Code CLI 中同时使用 Claude、GLM(智谱)、MiniMax、Kimi(月之暗面)、DeepSeek 五家大模型,不同任务自动路由到不同厂商,并行执行。

一、为什么需要多模型网关

痛点

  • 不同模型各有所长:Claude 擅长编码,GLM 中文理解强,DeepSeek 推理性价比高
  • 手动切换环境变量繁琐,每次改 ANTHROPIC_BASE_URLAPI_KEYMODEL
  • 无法在一个会话内同时利用多家模型的能力

目标效果

一个 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-coderglm-4deepseek-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)

总结

整个部署流程就三步:

  1. pip install 'litellm[proxy]' — 安装网关
  2. 编写 config.yaml — 配置你的模型和 API Key
  3. 设置 ANTHROPIC_BASE_URL=http://localhost:4000 — Claude Code 连接网关

之后在 Claude Code 中用 /model 即可随时切换模型,子代理配置不同 model 字段即可并行调用不同厂商。


参考资料

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐