最近好几个群友都在问同一个问题Claude Code 里面到底怎么切换模型我一开始也以为只能老老实实用官方默认的那一个后来把 /model 命令和背后的配置逻辑摸清楚之后才发现这东西完全能当模型路由器用而且不只是切 Opus、Sonnet 这些官方型号连 DeepSeek、GLM 这类第三方模型都能接进来一套命令行吃遍天下模型。这篇就把 /model 从命令用法到配置文件、环境变量、第三方网关接入、常见报错排查整个过程盘一遍适合刚装好 Claude Code 的新手也适合想把多模型接入工作流的老手。实际上这个需求不是装样子。写代码这件事不同任务对模型的要求完全是两个方向snap 一个小脚本用重型模型是浪费做一个跨文件重构用轻量模型又容易漏逻辑。我现在的习惯是让 Claude Code 同时挂几个模型按场景换着用多模型切换已经不是“能不能”的问题而是“怎么配才顺手”的问题。1. 为什么会在 Claude Code 里折腾多模型1.1 一个命令行工具为什么需要模型切换先回答一个问题Claude Code 默认不是已经有一个模型了吗为什么还要切换我的理解是Claude Code 本质上是一个客户端框架负责采集你的需求、组织上下文、调用工具、展示结果真正做推理的模型在服务端。换句话说命令行的“大脑”是模型决定的而且这个模型是可以被替换的。Claude Code 在设计上就把“框架”和“模型”解耦开了/model 命令就是给你留出来的那个切换入口。既然能切换自然就有切换的必要。日常开发里任务类型差异很大写个一次性脚本、改个注释、批量替换文本这类任务复杂度低用便宜、响应快的模型就好正经写业务逻辑、做代码 review需要理解力强一点的模型默认档位更合适跨文件重构、排查诡异 bug、设计系统架构这种高强度推理任务得上“重火力”模型哪怕慢一点、贵一点也值得。另外不同模型在特定维度的表现差异也很明显。比如有些模型在数学和逻辑推理上特别强有些模型对中文理解的细腻度更好还有些模型是团队私有化部署的只在内网可用。通过 /model 把多个模型挂在同一个 CLI 下等于弱化了“绑定某一个模型”的束缚按需取用。1.2 不同模型的定位和选型思路这里先给一张我自己整理的对照表后面所有配置都围绕这张表来展开。模型 / 接入方式适合场景成本档位主观体感claude-opus架构设计、跨文件重构、疑难 bug 排查高理解力最强但响应偏慢claude-sonnet日常业务开发、代码 review、需求拆解中综合最稳默认首选claude-haiku简单脚本、注释、批量文本处理低响应快复杂问题会明显乏力DeepSeek 系列代码生成、数学逻辑类任务低性价比高长上下文表现不错GLM 系列中文任务、接口文档生成、业务文案低中中文表达自然代码能力够用需要注意“模型越强越好”是个误区。实际工作流里瓶颈往往不是单次回答质量而是整体成本与等待时间。我一个多小时的会话里可能有 80% 的请求是琐碎的小任务用重型模型跑这些就等于烧钱加等卡顿。所以把模型按任务分档才是多模型切换最大的价值。在做选型时我建议关注三个指标单次响应速度、每百万 token 的价格、长上下文能力。前两个直接决定你用得爽不爽第三个决定它能不能吃得下你整个项目仓库。比如要做仓库级重构模型上下文窗口不够的话切换模型也没用该截断还是截断。2. /model 命令的核心用法2.1 交互式会话里的切换操作先看最直接的用法在 Claude Code 的交互输入框里直接输入 /model 然后回车。界面上会输出当前使用的模型名称以及当前可选的模型列表。比如我之前跑过的版本显示的是类似这样Current model: claude-sonnet-4-5-20250929 Available models: claude-opus-4-1-20250805 claude-sonnet-4-5-20250929 claude-haiku-4-5-20251001 Type a model name to switch, or press Enter to cancel.注意具体型号字符串每个版本都会变我这里只是示例。你随时输入 /model 就能看到最新的模型清单。这个命令本质上只有一个动作把当前会话的 model 字段改掉下一条消息就按新模型去请求了。所以在体验上非常直观切完立刻生效不需要重启 CLI。想直接精确切换到某个模型不用先列表再选可以直接在 /model 后面带模型名/model claude-opus-4-1-20250805如果只记得模型名的片段也可以输入 /model 加部分关键词让 CLI 帮你过滤。我自己用得最多的是这类快速用法写小工具时切 haiku做 code review 时切回 sonnet。2.2 通过配置文件固定默认模型交互式 /model 适合当次生效但如果想让某个项目默认就走某个模型就该用配置文件了。Claude Code 在启动时会依次加载三个层级的配置文件用户级~/.claude/settings.json项目级.claude/settings.json本地个人级.claude/settings.local.json这个顺序我反复验证过后加载的项目级会覆盖用户级local 文件通常用于个人差异配置应该加进 .gitignore避免误提交。在配置里指定默认模型很简单{ model: claude-sonnet-4-5-20250929, env: { ANTHROPIC_MODEL: claude-sonnet-4-5-20250929 } }两种写法是等效的区别在于 model 字段是 Claude Code 自己专门读的配置ANTHROPIC_MODEL 是环境变量形式对 CLI 的整个进程都生效。我一般只在 model 字段里写默认模型env 字段留给 base_url 和 token 这类更全局的东西。这里要提醒一个重要细节settings.json 里的 model 只影响新会话的默认模型。也就是说如果你当前已经在一个会话里再手动改配置文件运行中的会话并不会自动切换需要重启 claude 或者用 /model 再切一次。2.3 启动时直接用命令行参数指定模型如果你不想进交互界面再切Claude Code 在启动时也支持直接指定模型。最常见的场景是脚本、CI 和自动化任务只需要告诉它“这次用哪个模型跑完就走”。claude --model claude-haiku-4-5-20251001 -p 给这个函数补上单元测试-p 参数表示非交互模式直接执行提示词然后退出加上 --model 就相当于一次性任务固定模型了。我在批量处理小任务时习惯在 bash 循环里用这种写法让每个任务都走 haiku 或第三方轻量模型既省 token 又省时间。还有一种用法是把模型参数和 --continue 组合起来让上次会话用新模型继续claude --continue --model claude-opus-4-1-20250805这个操作很适合场景切换早上聊完需求准备动手写的时候把一个原本走 sonnet 的会话切到 opus 继续上下文不丢模型直接换重火力模式。2.4 环境变量系统级的模型路由除了 /model 命令和配置文件Claude Code 还认环境变量。最核心的是这几个export ANTHROPIC_MODELclaude-sonnet-4-5-20250929 export ANTHROPIC_BASE_URLhttps://api.anthropic.com export ANTHROPIC_AUTH_TOKENsk-ant-...其中 ANTHROPIC_MODEL 就是默认模型ANTHROPIC_BASE_URL 是 API 端点ANTHROPIC_AUTH_TOKEN 是认证凭据。把它们写在 ~/.bashrc 或 ~/.zshrc 里会让所有新开的 Claude Code 会话都按这套环境变量走。如果你只是临时想全局切一下直接在终端里 export 再启动 claude 就行。需要注意环境变量一旦设置它的优先级往往是高于 settings.json 里的 model 字段的。我第一次踩这个坑的时候在项目配置里把 model 改成 haiku跑起来却还是 sonnet排查了半天才发现是 shell 配置文件里早就 export 过一个 ANTHROPIC_MODEL环境变量的值把项目配置盖掉了。所以后面排查“改了配置没生效”时第一件事就是 echo $ANTHROPIC_MODEL 看看到底有没有被全局设置过。3. 把 /model 用成多模型路由器接入第三方模型3.1 原理兼容协议与网关层前面讲的都是官方模型之间的切换真正让 /model 变得好玩的是接第三方模型。有一点要先明确Claude Code 这个客户端默认只认 Anthropic 风格的 API也就是请求路径和消息格式都是 Anthropic 那套。而大多数第三方大模型包括 DeepSeek、GLM 这些对外暴露的是 OpenAI 风格的接口。让两者对上话中间必须有一层转换把 Anthropic 格式的请求翻译成 OpenAI 格式再把响应翻译回来。这层转换就是大家常说的“网关”或“兼容层”。现在可选的网关方案很多厂商如果自己提供 Anthropic 兼容端点直接把 base_url 指过去就行自己部署开源网关比如 one-api、new-api、LiteLLM、claude-code-router 这些都是社区里用得比较多的还有些团队把网关做成内部服务统一管密钥和配额所有人连同一个地址。理解了这个原理你再看“接入第三方模型”这件事就一点也不玄乎了。它的本质就是把 ANTHROPIC_BASE_URL 指到网关把 ANTHROPIC_AUTH_TOKEN 换成网关给的密钥再把模型名设置成网关定义的名字。剩下的就交给 /model 去切换。3.2 实操通过环境变量接入 DeepSeek / GLM下面用一个实际例子说明完整流程。假设你本地有一个兼容网关地址是 https://your-gateway.example.com/anthropic网关里已经配置好了 DeepSeek 和 GLM 两个模型密钥是 sk-gateway-xxx。接入步骤分三步。第一步设置全局环境变量让 Claude Code 知道往哪儿发请求、带什么凭据export ANTHROPIC_BASE_URLhttps://your-gateway.example.com/anthropic export ANTHROPIC_AUTH_TOKENsk-gateway-xxx第二步启动 Claude Code输入 /model 查看当前可用的模型。如果网关兼容得好列表里会直接出现 DeepSeek 和 GLM 的模型名如果列表没刷新也别慌可以直接用 /model 加模型名强制切换/model deepseek-chat /model glm-4.5第三步体验一下切换后的效果。切完之后你在这个会话里的所有请求都会经由网关转发到对应模型上交互方式没有任何变化。如果你不想每次启动都手动 export可以把这批配置固化到配置文件里。比如项目根目录建一个 .claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://your-gateway.example.com/anthropic, ANTHROPIC_AUTH_TOKEN: sk-gateway-xxx } }只写 env 不写 model这样默认模型还是官方模型需要切第三方时再用 /model 切换灵活度更高。如果希望该项目默认全走 DeepSeek再补一行 model: deepseek-chat 就行。3.3 用 cc-switch 之类工具管理多套配置多套模型配置来回改环境变量时间久了肯定会出错。我见过有人在两个项目之间来回切换 base_url改着改着就把生产环境的地址覆盖掉了。后来社区里出现了专门管这类事的工具cc-switch 是其中做得比较省心的一个。它的作用很简单把多套 Claude Code 配置存起来点击一下就能切换。比如你可以建三套配置官方 Opus、DeepSeek 网关、GLM 网关每套配置里存好 base_url、token、model 这些字段。写代码时想用哪套在 cc-switch 界面上点一下它会帮你把相应的配置写进 Claude Code 的设置文件里然后你重新打开 claude 就生效了。我自己的使用习惯是cc-switch 只负责管理全局默认配置进入具体项目后还是习惯用项目里的 .claude/settings.json 覆盖再配合会话里的 /model 做临时切换。这样既不会改乱全局配置也能在项目级别保持稳定。要提醒的是这类工具本质上还是在改配置文件和环境变量所以一定要理解上一节讲的那几个配置优先级。如果你不懂这些换再多管理工具也还是会在“为什么没生效”上卡住。3.4 多模型并存时的配置冲突与隔离同时接了好几个模型之后最常见的坑是配置“打架”。第一种冲突是 base_url 和 token 不匹配。很多网关的密钥是绑定域名或者绑定额度的你把 A 网关的 token 配到 B 网关的 base_url 上请求自然全挂。排查这种问题先看这两个值是不是同一套。第二种冲突是模型名对不上。同一个 DeepSeek 模型在来源平台的官方接口里叫 deepseek-chat在网关里可能被命名成 deepseek-v3在某个聚合平台可能又变成别的名字。/model 列表里显示的名字以网关为准。你手动输入的模型名也必须和网关配置里的名字完全一致大小写、连字符都不能错。第三种冲突是项目配置和全局配置互相覆盖。我的建议是定一个规则全局环境变量只放默认官方模型加官方 base_url项目级别的 settings.json 负责这个项目的专属模型而运行中的临时切换一律用 /model。三个渠道各管一摊冲突概率就很小了。如果需要在多个第三方模型之间频繁切换我建议写几个 shell 函数省得每次敲一长串 exportfunction cc-deepseek() { export ANTHROPIC_BASE_URLhttps://your-gateway.example.com/anthropic export ANTHROPIC_AUTH_TOKENsk-gateway-xxx export ANTHROPIC_MODELdeepseek-chat claude } function cc-glm() { export ANTHROPIC_BASE_URLhttps://your-gateway.example.com/anthropic export ANTHROPIC_AUTH_TOKENsk-gateway-xxx export ANTHROPIC_MODELglm-4.5 claude }这样一来想用哪个模型就是一条命令的事cc-deepseek 或 cc-glm。函数里临时设置的 export 只对当前这个 claude 进程生效关掉终端就恢复默认不会污染其他项目。4. 常见问题与排查技巧4.1 /model 输入没反应或提示模型不存在先说版本问题。老版本的 Claude Code 对 /model 的支持很不完整如果你输入之后只是回了一行帮助文字没有弹出可切列表大概率是版本太旧先升级npm update -g anthropic-ai/claude-code升级完再看 /model 有没有列出完整模型清单。如果提示 model not found 或类似字样先确认你输入的模型名是不是和列表里的完全一致。模型名通常是大版本号加日期戳的格式比方 claude-sonnet-4-5-20250929 这种中间任何地方拼错都会报不存在。稳妥的做法是输入 /model 唤起列表然后从里面复制模型名别手打。还有一种情况模型确实在网关里配置了但 /model 默认列表没显示。这时候别慌直接 /model 空格加模型名强制切。只要网关那边正常这条路是能通到的。4.2 切换多模型后会话行为不一致很多人会以为切模型只是把“大脑”换了上下文和记忆应该还在。这个理解一半对当前会话的对话历史确实保留着但不同模型对同样上下文的解读方式完全不同所以切完之后它给出的回答风格、工具调用倾向都可能跟原来不一样。这不算 bug是模型本身的差异。如果你切了模型之后发现回答变得奇怪或者上下文太大导致模型开始丢信息我建议做一次上下文整理。两个命令比较常用/compact压缩上下文把历史对话总结成要点腾出空间/clear彻底清空上下文重新开始适合换了个模型但不想让它被前一个模型的思路带偏的场景。另外Claude Code 里的子代理可能有自己独立的模型配置你在主会话里 /model 切换并不会改变子代理实际调用的模型。想让子代理也走新模型得去对应的 subagent 配置里改。这个点很容易被忽略排查子代理行为异常时重点看一下。4.3 第三方接口一直 401 / 404 / 429接入第三方模型时最常撞见这三类报错。401 代表鉴权失败。先确认 token 是否有效再检查是不是把 ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_API_KEY 混用了。Claude Code 里这两个变量同时存在时前者的优先级更高而很多网关的密钥是通过后者读的这就导致你明明填对了 key 却一直鉴权不过。404 代表路径不存在。最常见原因是 base_url 少了路径。有些网关的 Anthropic 兼容路由在 /anthropic 下有些在 /v1 下还有些要求前缀带 /api/anthropic具体看网关文档。一次配不通就多试几个路径我见过有人卡在 404 上半小时结果就是 base_url 少了个 /v1。429 代表触发限流。第三方模型一般是按并发或每分钟请求数限流。遇到 429 就别反复试了检查一下自己的请求频率或者看看网关后台是不是配额用完了。批量任务场景建议把并发降到 1 到 2不然高峰期被限流是常态。4.4 配置优先级与“改了半天没生效”“我明明改了配置为什么不起作用”这类问题的原因基本都在优先级上。按我的实践经验Claude Code 模型相关配置的生效顺序大致是配置渠道生效范围优先级启动参数 --model单次进程最高环境变量 ANTHROPIC_MODEL当前 shell 环境高项目级 settings当前项目中用户级 settings所有项目低/model 命令当前会话实时生效最直观注意最后一行的特殊说明/model 是唯一一个在会话运行期间可以实时覆盖其他所有渠道的入口。也就是说哪怕环境变量和配置文件都设了模型你在会话里 /model 一下当前会话立刻按新模型走。这就是为什么我推荐把 /model 当作最终兜底手段它最不容易踩优先级坑。如果修改配置文件后重启 claude 仍然没变化按下面顺序逐项排查echo $ANTHROPIC_MODEL看全局环境变量有没有设置过确认你改的是不是当前项目实际加载的 .claude/settings.json注意项目级和用户级是两个不同文件检查是否是 .claude/settings.local.json 覆盖了 settings.json 的内容最后再确认用的是不是旧版本 CLI升级之后往往很多“诡异问题”自己就消失了。5. 把这套玩法用于工作流的几个建议5.1 我日常的模型分配方案折腾了这么久最终形成的是一套很朴素的分层使用方案一次性脚本、写注释、改文案、批量重命名默认 haiku 或者第三方轻量模型日常业务功能开发、写单测、代码 review用 sonnet 或 DeepSeek 的通用模型系统设计、跨文件重构、疑难 bug 定位切 opus 或带推理增强的模型涉及大量中文文档、接口说明、产品文案的场景优先 GLM 这类中文优势模型。这套方案跑下来最直观的变化是 token 成本降下来了同时复杂任务的成功率没有因为省钱而下降。这种“重模型分析、轻模型执行”的组合打法其实和团队里架构师出方案、工程师写代码的协作模式很像。多模型切换的实质就是把不同模型的优势按任务重新编排。5.2 值得一试的进阶技巧最后分享几个我在实际使用中觉得特别顺手的小技巧。第一个是把模型切换写进工程文档。新成员入职或者队友第一次用 Claude Code给他们一份“本项目默认模型加切换方式”的说明比让他们自己摸索快得多。我会在 README 里写清楚日常开发用 sonnet重活切 opus要跑轻量批量任务用 haiku。第二个技巧是结合 .gitignore 管理配置文件。.claude/settings.json 我会提交到仓库保证团队所有人在同一套默认模型下干活而 .claude/settings.local.json 加进 gitignore给个人留足自由改动的空间。这样既统一又不僵化。第三个技巧是复杂任务的分段模型调度。遇到难啃的 bug我先切到推理强模型把问题分析透拿到方案后再切回轻量模型去执行。这样分析阶段虽然贵一点但整体执行成本反而低很多因为方案对了返工就少了。我自己现在最常用的操作路径是新任务先默认模型跑跑着跑着发现它有点顶不住复杂度了直接 /model 换推理强模型分析搞清楚方向之后再 /model 切回默认模型继续写代码。整个过程不需要退出会话不丢上下文非常丝滑。这套玩法我用了挺长时间它对项目效率的提升是实打实的。如果你还没试过多模型切换建议今天就打开 Claude Code输入 /model 看一眼动手配一套属于自己的模型路由方案。第一次切成功之后你大概就不想再回去了。