目的
把多个 LLM 供应商(AWS Bedrock 的 Anthropic 模型、DeepSeek 等)聚合成一个本地端点,Claude Code 只需配一个 ANTHROPIC_BASE_URL 就能访问所有模型。后续可按需快速切换模型负责不同的工作
-
专才专用:收集信息、生成代码等大吞吐量阶段用 DeepSeek;方案设计、深度推理阶段用 Claude Opus,各阶段用最合适的模型。
-
无缝衔接:同一个会话中用
/model切换,前一个模型的输出自动成为下一个模型的输入,零搬运。 -
降本增效:大量消耗 Token 的环节用低成本模型,复杂决策环节用顶级模型,整体又快又省钱。
示范工作流
-
启动会话:以低成本模型(如 DeepSeek)开始,执行信息收集、代码扫描等大上下文任务。
-
内联切换:使用
/model命令无缝切换到强推理模型(如 Claude Opus),基于已有上下文进行方案设计。 -
接力执行:确认方案后再次切回低成本模型,完成代码生成、测试编写等批量工作。
-
全流程上下文自动延续:无需手动传递中间结果,对话历史随切换自动加载。
1. 安装 LiteLLM
前置:安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
重启 shell 后验证:
uv --version
安装 LiteLLM
uv tool install 'litellm[proxy]'
二进制在 ~/.local/bin/litellm,确保它在 PATH 里(~/.local/bin 一般在 shell 启动时自动加入)。
常用操作:
which litellm # 确认安装位置
litellm --version
uv tool upgrade litellm # 升级
uv tool uninstall litellm
2. 目录布局
~/.claude/litellm/
config.yaml # 模型路由 + 凭据(核心配置文件)
litellm-startup # 前台启动脚本
~/Library/LaunchAgents/
com.user.litellm.plist # macOS 开机自启 + 崩溃重拉
3. 核心配置文件\config.yaml\
LiteLLM 在 http://localhost:4000 暴露 Anthropic 协议端点,将收到的模型名路由到真实上游。替换 <YOUR_*> 占位符:
model_list:
# ========== Bedrock: Anthropic 模型 ==========
# 每条复用同一套 aws_bearer_token + us-east-1
- model_name: claude-opus-4-7
litellm_params:
model: bedrock/global.anthropic.claude-opus-4-7
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: "claude-opus-4-7[1m]"
litellm_params:
model: bedrock/global.anthropic.claude-opus-4-7
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: claude-opus-4-8
litellm_params:
model: bedrock/global.anthropic.claude-opus-4-8
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: "claude-opus-4-8[1m]"
litellm_params:
model: bedrock/global.anthropic.claude-opus-4-8
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: claude-sonnet-4-6
litellm_params:
model: bedrock/global.anthropic.claude-sonnet-4-6
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: claude-opus-4-5
litellm_params:
model: bedrock/global.anthropic.claude-opus-4-5-20251101-v1:0
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: claude-haiku-4-5
litellm_params:
model: bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
- model_name: claude-sonnet-4-5
litellm_params:
model: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0
aws_bearer_token: <YOUR_AWS_BEARER_TOKEN>
aws_region_name: us-east-1
# ========== DeepSeek(Anthropic 兼容端点)==========
# model_name 加 anthropic. 前缀是因为 Claude Code 选择器只接受
# /^(claude|anthropic)/i 开头的 id,不带前缀会被静默丢弃
- model_name: anthropic.deepseek-v4-pro
litellm_params:
model: anthropic/deepseek-v4-pro
api_base: https://api.deepseek.com/anthropic
api_key: <YOUR_DEEPSEEK_API_KEY>
- model_name: anthropic.deepseek-v4-flash
litellm_params:
model: anthropic/deepseek-v4-flash
api_base: https://api.deepseek.com/anthropic
api_key: <YOUR_DEEPSEEK_API_KEY>
litellm_settings:
drop_params: true # 不同上游不支持的参数自动丢弃
set_verbose: false
general_settings:
master_key: null # 本地使用,不需鉴权
配置要点
-
model_name:对外暴露的名字,Claude Code/VSCode 看到的就是它。 -
litellm_params.model:上游真实模型名。Bedrock 用bedrock/<inference-profile-id>;DeepSeek 用anthropic/<上游模型名>。
4. 启动脚本\litellm-startup\
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
exec litellm \
--config "$SCRIPT_DIR/config.yaml" \
--port 4000 \
--host 127.0.0.1
chmod +x ~/.claude/litellm/litellm-startup
前台启动:
~/.claude/litellm/litellm-startup
Ctrl+C 停止。监听 127.0.0.1:4000(仅本机)。
5. macOS 开机自启(LaunchAgent)
创建 ~/Library/LaunchAgents/com.user.litellm.plist(替换 <YOUR_HOME> 和 <YOUR_AWS_BEARER_TOKEN>):
<?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.user.litellm</string>
<key>ProgramArguments</key>
<array>
<string>/Users/<YOUR_HOME>/.claude/litellm/litellm-startup</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>AWS_BEARER_TOKEN_BEDROCK</key>
<string><YOUR_AWS_BEARER_TOKEN></string>
<key>PATH</key>
<string>/Users/<YOUR_HOME>/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>WorkingDirectory</key>
<string>/Users/<YOUR_HOME>/.claude/litellm</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>30</integer>
<key>ProcessType</key>
<string>Background</string>
<key>StandardOutPath</key>
<string>/tmp/litellm.log</string>
<key>StandardErrorPath</key>
<string>/tmp/litellm.log</string>
</dict>
</plist>
验证语法:
plutil -lint ~/Library/LaunchAgents/com.user.litellm.plist
加载:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.user.litellm.plist
日常运维:
# 状态
launchctl print gui/$(id -u)/com.user.litellm | grep -E 'state|pid|last exit'
# 重启(改完 config.yaml、不改 plist)
launchctl kickstart -k gui/$(id -u)/com.user.litellm
# 改完 plist(如轮换凭据)必须 bootout + bootstrap
launchctl bootout gui/$(id -u)/com.user.litellm
plutil -replace EnvironmentVariables.AWS_BEARER_TOKEN_BEDROCK -string '<新token>' ~/Library/LaunchAgents/com.user.litellm.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.user.litellm.plist
# 卸载
launchctl bootout gui/$(id -u)/com.user.litellm
# 日志
tail -f /tmp/litellm.log
6. Claude Code 接入 Settings
~/.claude/settings.json 的 env 段(其余 permissions/hooks/theme 按原有设置):
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-litellm-local-noauth",
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1",
"ANTHROPIC_MODEL": "anthropic.deepseek-v4-pro[1m]",
"ANTHROPIC_SMALL_FAST_MODEL": "anthropic.deepseek-v4-flash"
}
字段说明
-
ANTHROPIC_BASE_URL:指向 LiteLLM。 -
ANTHROPIC_AUTH_TOKEN:占位值,LiteLLM 不校验但 SDK 要求非空。 -
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:必须为"1",否则选择器不读网关模型。 -
ANTHROPIC_MODEL:默认大模型(末尾[1m]开 1M 上下文) -
ANTHROPIC_SMALL_FAST_MODEL:默认小模型。
改完后必须重启 Claude Code(\Cmd+Shift+P\ → \Developer: Reload Window\,或 CLI \Ctrl+C\ 重开)。
⚠️ 如果之前通过 \~/.zshrc、\~/bash_rc、\~/.bash_profile 等设了 \
ANTHROPIC\_BASE\_URL\/ \ANTHROPIC\_MODEL\等环境变量,这些会覆盖 \settings.json\的 \env\段。用 \env | grep ANTHROPIC\检查,有残留就从 Shell 配置文件中注掉
7. 验证
确认 LiteLLM 已启动:
curl -s http://localhost:4000/health/liveliness
列出所有模型:
curl -s http://localhost:4000/v1/models | python3 -c "import sys,json; [print(x['id']) for x in json.load(sys.stdin)['data']]"
一条请求验证路由:
curl -sS http://localhost:4000/v1/messages \
-H 'content-type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H 'x-api-key: x' \
-d '{"model":"claude-haiku-4-5","max_tokens":8,"messages":[{"role":"user","content":"ping"}]}'
8. 凭据轮换
-
Bedrock token 过期 → 改 plist 的
EnvironmentVariables.AWS_BEARER_TOKEN_BEDROCK+ yaml 兜底,bootout+bootstrap重载。 -
DeepSeek key 过期 → 改 yaml 的
api_key,kickstart -k重载。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接


文章评论
模型切换是要手动操作吗?
@liudon 是的