Claude Code 默认使用 Anthropic 官方模型,但通过反向代理或兼容 API,我们也能接入 DeepSeek、GLM 等第三方模型。
问题在于——每次切换模型都要手动改 ~/.claude/settings.json,改 URL、改 Key、改模型名,繁琐且容易出错。
核心思路很简单:每种模型配置独立成一个 JSON 文件,脚本一键替换到 settings.json。于是我写了一个不到 50 行的 Shell 脚本,把切换变成了一步交互式选择。
一、目录结构一览
整个方案只涉及一个脚本目录,结构极其简洁:
~/.claude/
├── settings.json ← 实际生效的配置,脚本会自动覆盖它(不要手动改)
└── switch-tools/ ← 脚本和模型配置的目录(可存放至任意路径)
├── switch-model.sh ← 一键切换脚本(核心)
├── deepseek-v4-pro.json ← 对应模型的 settings 配置,将会被直接替换为 settings.json
├── deepseek-v4-flash.json
├── glm-4.6v.json
└── ... ← 按需新增更多模型配置
文件命名约定:每个 JSON 配置文件的文件名即为该模型的标识名(不含 .json 后缀),脚本会提取出来作为菜单选项展示。
例如 deepseek-v4-pro.json → 菜单项 deepseek-v4-pro。
与 settings.json 的关系:~/.claude/settings.json 是 Claude Code 唯一识别的配置文件。
脚本做的事情本质上就是 cp 目标模型.json ~/.claude/settings.json,简单直接,没有任何黑魔法。
二、使用方式
# 1. 将后文的 switch-model.sh 脚本和 xx.json 配置放在同一目录下,比如 ~/.claude/switch-tools/
# 2. 运行 (运行之前需要替换json中的apiKey)
sh ~/.claude/switch-tools/switch-model.sh
也可以加个别名放到 .zshrc 里:
alias cm="~/.claude/switch-tools/switch-model.sh"
之后随时 cm 一键切换。
三、运行效果
$ sh ~/.claude/switch-tools/switch-model.sh
当前模型: deepseek-v4-pro
请选择要切换的配置:
1. deepseek-v4-flash
2. deepseek-v4-pro
3. glm-4.6v
输入编号 (1-3),其他退出:
输入编号,回车——脚本把对应的 JSON 文件拷贝到 ~/.claude/settings.json,切换即刻生效(已经启动的会话可能需要重启)。
四、完整脚本
#!/bin/sh
# 一键切换 Claude Code 模型配置
CONFIG_DIR="$(cd "$(dirname "$0")" && pwd)"
SETTINGS_FILE="$HOME/.claude/settings.json"
# 获取配置文件列表(排除自身)
names=""
i=0
for f in "$CONFIG_DIR"/*.json; do
[ -f "$f" ] || continue
name=$(basename "$f" .json)
[ "$name" = "switch-model" ] && continue
i=$((i+1))
names="$names $name"
done
[ "$i" -eq 0 ] && echo "❌ 未找到配置文件" && exit 1
current=$(grep -o '"model"[^,]*' "$SETTINGS_FILE" 2>/dev/null | head -1 | cut -d'"' -f4)
echo "当前模型: $current"
echo ""
echo "请选择要切换的配置:"
idx=1
for name in $names; do
echo " $idx. $name"
idx=$((idx+1))
done
echo ""
printf "输入编号 (1-%d),其他退出: " "$i"
read -r choice
# 检查输入是否有效数字
case "$choice" in
''|*[!0-9]*)
echo "已取消"
exit 0
;;
esac
if [ "$choice" -lt 1 ] || [ "$choice" -gt "$i" ]; then
echo "已取消"
exit 0
fi
# 根据编号找到对应的配置名
idx=1
for name in $names; do
if [ "$idx" -eq "$choice" ]; then
cp "$CONFIG_DIR/$name.json" "$SETTINGS_FILE"
new_model=$(grep -o '"model"[^,]*' "$SETTINGS_FILE" | head -1 | cut -d'"' -f4)
echo "✅ 已切换到: $name ($new_model)"
break
fi
idx=$((idx+1))
done
五、配置文件示例
1、deepseek-v4-flash.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_API_KEY": "你的 DeepSeek API Key",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_SKIP_LOGIN": "1",
"API_TIMEOUT_MS": "3000000",
"ANTHROPIC_CUSTOM_MODEL_OPTION": "deepseek-v4-flash",
"ANTHROPIC_CUSTOM_MODEL_OPTION_NAME": "deepseek-v4-flash"
},
"model": "deepseek-v4-flash",
"skipDangerousModePermissionPrompt": true
}
2、deepseek-v4-pro.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_API_KEY": "你的 DeepSeek API Key",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_SKIP_LOGIN": "1",
"API_TIMEOUT_MS": "3000000",
"ANTHROPIC_CUSTOM_MODEL_OPTION": "deepseek-v4-pro",
"ANTHROPIC_CUSTOM_MODEL_OPTION_NAME": "deepseek-v4-pro"
},
"model": "deepseek-v4-pro",
"skipDangerousModePermissionPrompt": true
}
3、glm-4.6v.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"ANTHROPIC_API_KEY": "你的智谱 API Key",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
},
"model": "glm-4.6v",
"skipDangerousModePermissionPrompt": true
}
六、扩展性与设计细节
安全校验:输入不是数字、超出范围,直接退出,不会误操作。
路径无关:CONFIG_DIR="$(cd "$(dirname "$0")" && pwd)" 确保无论在哪个目录执行脚本,都能正确找到配置文件。
排除自身:脚本即使命名为 switch-model.json 也不会被误识别为模型配置。
即时生效:直接覆盖 settings.json,新启动的 Claude Code 会话即刻生效;已运行的会话需重启后才能使用新模型。
这个方案的妙处在于零耦合。想加新模型?新建一个 JSON 文件即可,脚本不用改一行。OpenRouter、Groq、本地 Ollama——只要支持 Anthropic 兼容 API,都能用同样的方式接入。复杂任务用 Opus、日常编码用 DeepSeek、长上下文场景用 GLM——这个小工具能省下不少来回改配置的功夫。
工具本身不到 50 行代码,没有依赖,纯 POSIX Shell。所有配置文件一目了然,新增和删除都只需要操作 JSON 文件。简单、直接、好用。