1. 为什么 Codex 多模型切换会让人抓狂
如果你同时用 Codex CLI 写代码,又订阅了不止一个模型服务,大概率经历过这种场景:早上想用推理强的模型啃一段复杂逻辑,中午想换成响应快的模型批量改注释,晚上又想切回便宜的大模型跑长任务。每换一次,就得打开~/.codex/config.toml,手动改model、base_url、api_key三行,改完还得重启终端。
改一两次还行,一天改五六次,人真的会麻。更麻烦的是手滑:模型 ID 打错一个字母,Codex 启动直接报 404;API Key 复制时多带一个空格,请求全部 401。这些错误不会告诉你「你填错了」,只会甩一堆看不懂的堆栈。
CC Switch 就是来解决这个问题的。它是一个本地桌面工具,专门管理 AI 编程 CLI 的配置,支持 Codex、Claude Code、Gemini CLI 等。核心能力是:把每套「模型 + 地址 + Key」存成一条供应商配置,点一下「启用」就切换,不用再碰配置文件。
这篇教程面向需要在本地快速切换不同模型的开发者,交付三样东西:一份可直接复制的config.toml骨架、CC Switch 的配置示例、以及切换后验证模型真正生效的命令与检查步骤。跟着做,你能一次跑通多模型切换,而不是切完还在猜「现在到底用的哪个模型」。
2. 前置准备:TaoToken 与 Codex 环境
在讲 CC Switch 之前,先把「模型从哪来」这件事定下来。Codex CLI 本身只是个客户端,它需要一个兼容 OpenAI 接口的服务端。你可以用官方,也可以用聚合平台。这里我用 TaoToken 作为示例,因为它一个 Key 就能覆盖多个模型,正好配合 CC Switch 做多模型切换。
TaoToken 的定位是模型聚合接入层,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。它的价值在于:你不需要为每个模型单独申请 Key、单独记地址,一个 Key 加一个 base_url 就能调不同模型,这对 CC Switch 的「一条配置一个模型」模式非常友好。
你需要准备的东西:
- 一个 TaoToken 账号,并在控制台创建一个 API Key。创建入口在 https://taotoken.net/console/api-keys ,建议给这个 Key 起个能认出来的名字,比如
codex-multi。 - 本地已安装 Codex CLI。验证命令:
codex --version,能打印版本号即可。 - 本地已安装 CC Switch。下载地址在 GitHub Releases,Windows 下拿
.exe安装包,双击一路下一步。第一次打开如果被 SmartScreen 拦截,点「更多信息」→「仍要运行」。
注意:CC Switch 的配置全部存在本地,不上传任何服务器。但前提是从官方仓库下载,别用来路不明的安装包。
装完之后,先别急着配。打开终端跑一次codex,确认它当前能正常启动。如果这一步就报错,先解决 Codex 本身的问题,再进 CC Switch,否则后面排查会分不清是工具问题还是配置问题。
3. 可复制配置:config.toml 骨架与 CC Switch 示例
这一节是全文的核心。我会先给你一份config.toml骨架,让你理解 Codex 到底在读什么;再讲 CC Switch 怎么把这份骨架变成「点一下就切」。
3.1 Codex 的 config.toml 骨架
Codex CLI 的配置文件默认在~/.codex/config.toml(Windows 是C:\Users\你的用户名\.codex\config.toml)。一份最小可用的多模型配置长这样:
# 默认使用的模型供应商 model_provider = "taotoken-glm" # 供应商定义区 [model_providers.taotoken-glm] name = "TaoToken GLM" base_url = "https://taotoken.net/api/v1" env_key = "TAOTOKEN_API_KEY" [model_providers.taotoken-deepseek] name = "TaoToken DeepSeek" base_url = "https://taotoken.net/api/v1" env_key = "TAOTOKEN_API_KEY" [model_providers.taotoken-kimi] name = "TaoToken Kimi" base_url = "https://taotoken.net/api/v1" env_key = "TAOTOKEN_API_KEY"这里有几个关键点,踩过坑的人才知道:
base_url一定要带/v1。Codex 走的是 OpenAI 兼容协议,路径拼的是/v1/chat/completions。如果你只写https://taotoken.net/api,请求会打到错误路径,返回 404。
env_key是环境变量名,不是 Key 本身。Codex 会去读这个环境变量。所以你还得在系统里设一个TAOTOKEN_API_KEY,值就是你在控制台创建的那串 Key。Windows 下可以用:
setx TAOTOKEN_API_KEY "你的Key"设完要重开终端才生效。Linux/macOS 写进~/.bashrc或~/.zshrc:
export TAOTOKEN_API_KEY="你的Key"model_provider决定当前用哪个供应商。上面骨架里默认是taotoken-glm。想切到 DeepSeek,把这行改成taotoken-deepseek就行——但这就是手动改的痛点,也正是 CC Switch 要接管的地方。
3.2 CC Switch 里怎么配
打开 CC Switch,顶部选择 Codex 模式。点加号新增一条供应商配置,关键字段这样填:
| 字段 | 填什么 | 说明 |
|---|---|---|
| 配置名 | 模型名,如glm-5.2 | 一眼能认出是哪个模型 |
| API 请求地址 | https://taotoken.net/api/v1 | 必须带/v1 |
| API Key | 你的 TaoToken Key | 从控制台复制,别手打 |
| 模型 ID | 如glm-5.2 | 从控制台复制,别手打 |
配完一条,直接点「复制」,改一下配置名和模型 ID,就得到第二条。把你要用的模型都这样加进去。CC Switch 的 Codex 模式不支持一条配置里塞多个模型再内部切换,所以「一个模型一条配置」是正确姿势。
提示:不要点「获取模型列表」。列表里返回的模型不一定在你的套餐范围内,选了可能直接报无权限。以控制台里实际可用的为准。
配置名建议直接写模型名,比如glm-5.2、doubao-seed-2.0-code。切换的时候一眼就知道点哪个,不用回忆「这条配置到底是啥」。
3.3 切换动作
在 CC Switch 里点某条配置的「启用」,它会把这套配置写进 Codex 的config.toml。但注意:Codex 不会热加载配置。你必须关掉当前终端,重开一个,新配置才生效。这一步是 90% 的人「切了没反应」的原因。
4. 验证请求:确认模型真的切过去了
切完不验证,等于没切。这一节给你三个层次的验证方法,从粗到细。
4.1 第一层:看 Codex 启动日志
重开终端,跑:
codex --debug启动日志里会打印当前使用的 provider 和 base_url。如果你看到的是刚启用的那条配置对应的地址,说明配置读取成功。如果还是旧地址,说明终端没重开,或者 CC Switch 没写进去。
4.2 第二层:发一个最小请求
在 Codex 里输入一句最简单的:
用一句话解释什么是递归如果模型正常返回,说明链路通了。但这一步只能证明「有模型在回」,不能证明「是你想用的那个模型」。因为不同模型的回答风格差异,肉眼不一定分得清。
4.3 第三层:直接打 API 看返回的 model 字段
最可靠的验证是绕过 Codex,直接用 curl 打一次接口,看返回体里的model字段:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-5.2", "messages": [{"role": "user", "content": "hi"}] }'返回的 JSON 里会有一个model字段,值应该和你请求的模型一致。如果返回 401,检查 Key;如果返回 404,检查base_url有没有带/v1;如果返回 400 说模型不存在,检查模型 ID 拼写。
Windows PowerShell 下$TAOTOKEN_API_KEY的写法不同,用:
curl https://taotoken.net/api/v1/chat/completions ` -H "Authorization: Bearer $env:TAOTOKEN_API_KEY" ` -H "Content-Type: application/json" ` -d '{\"model\":\"glm-5.2\",\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}]}'三层验证都过了,你才能说「这个模型真的生效了」。只做第一层,你只是在猜。
5. 本篇常见错排查
这一节把我在配置过程中真实遇到、以及社区里高频出现的问题集中列一下。每条都给现象、原因、解法。
Q1:切了模型,Codex 还是用旧的。
现象:CC Switch 里点了启用,Codex 里问问题,回答风格没变。原因:终端没重开,Codex 进程还持有旧配置。解法:完全关掉终端窗口,重开一个。如果用的是 IDE 内置终端,也要重启 IDE 的终端会话,不是只关标签页。
Q2:请求返回 404 Not Found。
现象:Codex 启动就报错,或者发消息直接 404。原因:base_url少了/v1。Codex 拼的是/v1/chat/completions,你给https://taotoken.net/api,它拼出来就是https://taotoken.net/api/chat/completions,路径不对。解法:改成https://taotoken.net/api/v1。
Q3:请求返回 401 Unauthorized。
现象:所有请求都被拒。原因:环境变量没设,或者设了没重开终端,或者 Key 复制时带了空格。解法:先echo $TAOTOKEN_API_KEY(Windows 用echo $env:TAOTOKEN_API_KEY)确认能打印出来,再检查有没有首尾空格。设完环境变量必须重开终端。
Q4:模型 ID 报不存在。
现象:返回 400,提示 model not found。原因:模型 ID 手打错了,或者用了不在套餐里的模型。解法:去 TaoToken 控制台复制模型 ID,别手打。也别用「获取模型列表」里的,那个列表不一定等于你的可用范围。
Q5:CC Switch 里配置了,但 Codex 读不到。
现象:CC Switch 显示已启用,但config.toml没变化。原因:CC Switch 可能写到了别的路径,或者 Codex 读的不是默认路径。解法:打开~/.codex/config.toml直接看内容,确认 CC Switch 写进去了。如果没写进去,检查 CC Switch 里 Codex 的配置路径设置。
Q6:想同时用多个模型怎么办。
现象:想在一个会话里既用 A 又用 B。原因:Codex 一次只认一个model_provider。解法:CC Switch 切完 A,重开终端用 A;要换 B,再切再重开。这是当前架构的限制,不是配置错误。
6. 把切换这件事固化下来
配置跑通之后,真正提升效率的是把「切换」这个动作变成肌肉记忆。我的做法是:在 CC Switch 里按使用频率排序,最常用的模型放最上面;配置名统一用模型名,不用「配置1」「配置2」这种;每次切完,先跑一次第 4.3 节的 curl 验证,确认model字段对了再开始干活。
如果你长期用 Codex 写代码、跑 Agent 任务,可以考虑把常用模型组合固化成一个 Coding Plan 思路:推理任务用强模型,批量改动用快模型,长文本用便宜模型。TaoToken 的 Coding Plan 入口在 https://taotoken.net/coding-plan ,一个 Key 覆盖多模型,配合 CC Switch 的「一条配置一个模型」,切换成本几乎为零。
需要看模型对话效果、快速试不同模型的回答差异,可以直接用模型对话页:https://taotoken.net/chat 。接入文档在 https://taotoken.net/doc ,里面有完整的 base_url、鉴权方式和参数说明,配 CC Switch 时对着抄就行。
最后留一个我自己的检查清单,每次切完模型按顺序过一遍:
- CC Switch 里点启用,确认状态变成「已启用」。
- 完全关闭终端,重开。
codex --debug看 provider 和 base_url 对不对。- curl 打一次接口,看返回的
model字段。 - 在 Codex 里发一句测试,确认能正常返回。
这五步走完,你就能确定当前用的到底是哪个模型,而不是靠感觉猜。多模型切换这件事,配一次麻烦,配好之后就是点鼠标的事。