Appearance
Claude Code 多模型切换:claude-router 设计原理与隔离实践
在使用 Claude Code 时,开发者经常需要切换不同的模型服务商(如 Anthropic 官方、讯飞 Astron、百度千帆等)。由于 Claude Code 强依赖环境变量和全局配置文件,不当的切换方式会导致严重的配置冲突。
1. 核心问题:环境变量“张冠李戴”
现象
启动 Claude Code 后报错: API Error: 500 ... msg: PathDomainError:Model Not Found
根因分析
- 全局变量污染:在
.zshrc或.bashrc中硬编码了ANTHROPIC_BASE_URL(指向服务商 A),但在终端中又手动或通过脚本设置了ANTHROPIC_MODEL(属于服务商 B)。 - Shim 脚本硬编码:为了方便而创建的
claude别名或 Shim 脚本(如~/.local/bin/claude)中硬编码了--model <model_name>参数。这会导致即使环境变量正确,命令参数依然会覆盖环境变量,造成冲突。
2. 设计方案:claude-router 的隔离机制
claude-router 是一个多配置管理器,其核心设计理念是 “档位切换”与“环境注入”的分离。
A. 档位切换 (use)
运行 claude-router use <profile-id> 时,它仅修改一个状态文件(如 active_profile.txt),而不改变当前 Shell 的任何环境变量。这保证了全局环境的纯净。
B. 环境注入 (run)
运行 claude-router (不带参数) 或 claude-router run 时,它会执行以下流程:
- 根据 active profile 找到对应的 入口脚本 (Entrypoint Script)。
- 入口脚本在子进程中
export该 profile 专属的环境变量(Base URL, Key, Model)。 - 使用
exec调用真实的claude二进制文件。
隔离优势:变量只在 claude-router 及其拉起的 claude 进程中生效,终端窗口退出后即刻消失,互不干扰。
3. 故障排查:解决 Model Not Found
如果直接运行 claude 报错,请检查以下三项:
检查软链接: 确认
which claude指向的是真实二进制文件,而不是一个带有硬编码逻辑的 Shim 脚本。bash# 如果发现是 shim,建议移除并重新链接到真实 binary rm ~/.local/bin/claude ln -s <path_to_real_binary> ~/.local/bin/claude清理全局配置: 检查
~/.claude/settings.json是否被某些脚本硬编码了env字段。建议保持该文件简洁,主要依靠环境变量进行动态控制。区分 /model 与服务商切换:
- 同一服务商内部切换:可使用
claude会话内的/model命令。 - 跨服务商切换:必须退出会话,使用
claude-router use切换 Base URL。
- 同一服务商内部切换:可使用
4. 最佳实践工作流
- 设定默认值:在
.zshrc中只保留你最常用的一个服务商配置作为全局兜底。 - 多终端并存:
- 终端 A:
claude-router use xfyun->claude-router(进入讯飞环境) - 终端 B:
claude-router use qianfan->claude-router(进入千帆环境)
- 终端 A:
- 互不干扰:由于每个终端窗口的进程环境是独立的,这种方式可以完美实现多个模型同时对比测试,而不会发生冲突。