1. 为什么要在 Codex 里接 DeepSeek V4
Codex 桌面端和 CLI 默认走的是 OpenAI 官方通道,对国内开发者来说,延迟和成本是两个绕不开的问题。DeepSeek V4 在代码补全、长上下文理解上的表现已经能满足日常开发,价格又比官方通道低不少,所以把 Codex 的请求切到 DeepSeek V4 上,是很多本地已有 Codex 的开发者会做的第一件事。
问题在于,Codex 本身不提供「换供应商」的图形化入口,它读的是~/.codex/config.toml这个配置文件。手动改 TOML 容易写错字段,尤其是model_providers下面的base_url、wire_api、env_key这几项,一旦拼错,Codex 启动时不会给你友好提示,只会静默回退到默认模型,你甚至察觉不到请求根本没发出去。
CC Switch 就是来解决这个痛点的。它是一个专门管理 Codex、Claude Code 这类工具供应商配置的切换器,把config.toml的写入和备份做成可视化操作,切换供应商时自动改配置、自动重启路由。我试过纯手改和用 CC Switch 两种方式,后者在反复切换供应商时省事很多,尤其是你同时要维护官方通道和 DeepSeek 通道的时候。
这篇面向的是本地已经装好 Codex、想接 DeepSeek V4 的开发者。我会先讲清楚 TaoToken 在链路里的位置,再给出可复制的config.toml骨架,然后走一遍 CC Switch 的切换步骤,最后用一次真实请求验证接入是否生效。目标是一次配置,之后在 Codex 里稳定调用 DeepSeek V4。
2. TaoToken 在 Codex 接入链路里的位置
Codex 要调用 DeepSeek V4,需要三样东西:一个兼容 OpenAI 协议的base_url、一个可用的 API Key、以及正确的模型名。DeepSeek 官方 API 是兼容 OpenAI 格式的,但如果你同时要用多个模型、或者想让 Key 的管理和额度查看集中在一个地方,用 TaoToken 做统一入口会更顺手。
TaoToken 在这里的角色是「OpenAI 兼容的 API 网关」:Codex 把请求发到 TaoToken 的base_url,TaoToken 再按你选的模型转发到对应的上游。对 Codex 来说,它只认base_url和api_key,不关心中间是谁在转发。所以配置的核心就是把 Codex 的base_url指向 TaoToken 的 API 地址,把 Key 填成 TaoToken 生成的 Key。
这里要区分两个地址,别搞混:
| 用途 | 地址 |
|---|---|
| 官网(注册、看文档、进控制台) | https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= |
| API 基址(写进 config.toml 的 base_url) | https://taotoken.net/api |
注意 API 基址后面不要加多余的路径,Codex 会自己在后面拼/chat/completions或/responses。如果你写成https://taotoken.net/api/v1,有些版本会拼成/api/v1/chat/completions导致 404,这个坑我在下面排障部分会再展开。
提示:TaoToken 的 Key 在控制台的 API Keys 页面生成,生成后只显示一次,记得先复制到安全的地方。控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
3. 可复制的 config.toml 骨架
Codex 的配置文件默认在~/.codex/config.toml(Windows 是C:\Users\你的用户名\.codex\config.toml)。如果你之前没改过,这个文件可能只有几行默认配置。下面是一个接 DeepSeek V4 的最小可用骨架,你可以直接复制后替换 Key:
# ~/.codex/config.toml # 默认使用的模型,这里指向下面定义的 deepseek 供应商 model = "deepseek-v4" model_provider = "deepseek" # 供应商定义 [model_providers.deepseek] name = "DeepSeek V4 via TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat" # 可选:控制请求超时和重试 request_timeout_ms = 120000几个字段逐个说明,这些是踩过坑之后确认必须对的:
model_provider的值必须和[model_providers.xxx]里的xxx完全一致,大小写敏感。上面写的是deepseek,下面就必须是[model_providers.deepseek]。
base_url填https://taotoken.net/api,不要带尾部斜杠,也不要自己加/v1。
env_key是环境变量的名字,不是 Key 本身。Codex 启动时会去读这个环境变量拿 Key。这样设计是为了避免把 Key 明文写进配置文件。你需要设置:
# macOS / Linux,写进 ~/.zshrc 或 ~/.bashrc export TAOTOKEN_API_KEY="sk-你的TaoToken密钥" # Windows PowerShell,临时生效 $env:TAOTOKEN_API_KEY="sk-你的TaoToken密钥"wire_api填chat,表示走 OpenAI 的/chat/completions协议。DeepSeek V4 兼容这个协议,填responses反而可能因为上游不支持而报错。
model填deepseek-v4,这是模型标识。如果你在 TaoToken 控制台看到的模型名带前缀或后缀,以控制台显示的为准。
注意:改完
config.toml后,Codex 需要重启才会重新读取配置。如果你是在终端里跑codex,直接退出再进即可。
4. 用 CC Switch 切换供应商的完整步骤
如果你不想手改 TOML,或者需要在多个供应商之间来回切,CC Switch 是更省心的选择。它的原理是帮你管理config.toml的写入,切换时自动备份旧配置、写入新配置。
4.1 安装与首次启动
CC Switch 是开源工具,从它的 release 页面下载对应平台的安装包即可。安装后首次启动,它会自动检测你本地的~/.codex/config.toml,如果存在就读取现有供应商列表,不存在就创建一个空的。
启动后主界面会列出当前已配置的供应商,以及一个「当前激活」的标记。默认情况下,如果你之前手改过配置,这里会显示你手写的那个供应商。
4.2 添加 DeepSeek 供应商
点击「添加供应商」,填写以下字段:
| 字段 | 填写值 |
|---|---|
| 名称 | DeepSeek V4(自定义,方便识别即可) |
| Base URL | https://taotoken.net/api |
| API Key | sk-你的TaoToken密钥 |
| 模型 | deepseek-v4 |
| 协议 | chat(OpenAI 兼容) |
填完后保存,CC Switch 会把这个供应商写进它自己的配置库,但此时还没有激活。你会在列表里看到新增的条目,旁边有一个「激活」按钮。
4.3 激活并写入 config.toml
点击 DeepSeek V4 条目旁边的「激活」,CC Switch 会做三件事:备份当前的config.toml为config.toml.bak,把model_provider改成deepseek,把[model_providers.deepseek]段写入文件。
激活成功后,界面上的「当前激活」标记会移到 DeepSeek V4 上。这时候你打开~/.codex/config.toml看一眼,应该能看到和上一节骨架一致的内容,只是 Key 可能被 CC Switch 用环境变量或直接写入的方式处理,取决于它的版本。
4.4 打开路由开关
部分版本的 CC Switch 有一个「路由开关」,作用是启动一个本地代理,把 Codex 的请求先转到本地再转发出去。如果你只是直连 TaoToken,这个开关可以不开。开了的话,base_url会被改成http://127.0.0.1:某端口,多一层转发。
我的建议是:如果你网络环境直连 TaoToken 没问题,就别开路由,少一层故障点。如果开了,记得在 CC Switch 里确认端口没被占用。
4.5 重启 Codex 验证
关掉所有 Codex 窗口,重新打开。如果是 CLI,直接在终端重新运行codex。启动后 Codex 会读取新的config.toml,用 DeepSeek V4 作为默认模型。
5. 发一次请求验证接入是否生效
配置改完不代表生效,必须发一次真实请求确认。有两种验证方式,建议都做一遍。
5.1 用 curl 直接打 TaoToken 接口
这一步绕过 Codex,直接验证 Key 和 base_url 是否可用:
curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-v4", "messages": [ {"role": "user", "content": "用一句话说明什么是快速排序"} ] }'如果返回 JSON 里choices[0].message.content有内容,说明 Key 和 base_url 都没问题。如果返回 401,是 Key 错了;返回 404,是 base_url 路径拼错了;返回 400 且提示 model 不存在,是模型名写错了。
5.2 在 Codex 里发一条真实请求
打开 Codex,输入一个需要模型回答的问题,比如「帮我写一个 Python 函数,判断一个数是否为质数」。观察返回内容。
如果 Codex 正常返回了代码,说明整条链路通了。如果 Codex 返回的是官方模型的回答风格,或者提示模型不可用,说明config.toml没被正确读取,回到上一节检查model_provider和model字段。
你也可以在 Codex 里输入/model(如果版本支持)查看当前使用的模型,确认显示的是deepseek-v4。
5.3 确认请求真的走了 DeepSeek
一个简单的判断方法:DeepSeek V4 在中文代码注释和中文解释上风格比较明显,回答里如果出现比较自然的中文技术解释,基本可以确认走的是 DeepSeek。另一个方法是去 TaoToken 控制台的用量页面,看请求计数有没有增加,增加的那条对应的模型是不是deepseek-v4。
6. 本篇常见错误排查
下面这些是我在配置过程中实际遇到过的报错,按出现频率排序。
报错一:401 Unauthorized
原因通常是环境变量没生效。Codex 读的是env_key指定的那个环境变量,如果你在config.toml里写的是TAOTOKEN_API_KEY,但终端里export的是别的名字,就会 401。检查方法:
echo $TAOTOKEN_API_KEY如果输出为空,说明没设置成功。注意 macOS 上如果你改的是~/.zshrc,需要source ~/.zshrc或重开终端。
报错二:404 Not Found
九成是base_url写错了。正确写法是https://taotoken.net/api,不要加/v1,不要加尾部斜杠。Codex 会自己在后面拼路径,你多写一段它就拼成不存在的地址。
报错三:model not found或模型回退到默认
检查model字段的值是否和 TaoToken 控制台里显示的模型名完全一致。有些控制台显示的是deepseek-v4,有些带版本号后缀,以控制台为准。另外确认model_provider和[model_providers.xxx]的xxx拼写一致。
报错四:CC Switch 激活后 Codex 没变化
CC Switch 写的是~/.codex/config.toml,但如果你设置了CODEX_HOME环境变量指向别的目录,Codex 读的就不是这个文件。检查:
echo $CODEX_HOME如果有输出,说明 Codex 的配置目录被改过,你需要让 CC Switch 也指向那个目录,或者把CODEX_HOME去掉。
报错五:请求超时
DeepSeek V4 在长上下文场景下响应会慢一些,默认超时可能不够。在config.toml里加一行request_timeout_ms = 120000,把超时提到 120 秒。如果还是超时,检查网络到taotoken.net的连通性。
报错六:开了路由开关后连不上
CC Switch 的路由开关会起一个本地代理,如果端口被占用或者代理进程没起来,Codex 会连不上。关掉路由开关,直接用直连模式,base_url改回https://taotoken.net/api。
7. 接入之后:Key 管理与长期使用建议
配置跑通只是第一步,长期用下去还有几件事值得做。
Key 的管理建议集中在 TaoToken 控制台做。你可以为 Codex 单独生成一个 Key,和别的工具用的 Key 分开,这样某个 Key 泄露或额度异常时能单独吊销,不影响其他工具。控制台的 API Keys 页面可以生成和吊销 Key:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
如果你打算在 Codex 里长期跑编码任务,尤其是那种一次要改多个文件、跑好几轮的重构,建议了解一下 Coding Plan。它针对长时间、多轮次的编码场景做了额度优化,比按次调用更划算:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
配置文件的备份也别忽略。CC Switch 激活时会自动备份config.toml.bak,但如果你手改过,建议自己再存一份。我习惯把可用的config.toml存到 dotfiles 仓库里,换机器时直接拉下来改个 Key 就能用。
最后,如果你在接入过程中遇到本文没覆盖的报错,可以先翻接入文档,里面按错误码列了常见原因:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
想先确认 DeepSeek V4 在当前链路上的回答质量,也可以直接在模型对话页面发几条测试请求,不用改 Codex 配置就能验证:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
整套流程走下来,核心其实就三件事:base_url写对、Key 通过环境变量传进去、model_provider和model字段对齐。这三件事对了,Codex 调 DeepSeek V4 就是稳定的。剩下的时间,交给模型去写代码就行。