1. 为什么 Codex 直连 DeepSeek V4 会失败Codex 是 OpenAI 推出的编码智能体桌面端和 CLI 都能跑任务规划、Bug 排查、代码补全都在行。DeepSeek V4 发布后代码能力相当能打API 成本比 OpenAI 低一大截国内访问也稳定。很自然就会想能不能让 Codex 直接调用 DeepSeek V4动手之后才发现没那么顺。根本原因是协议不兼容——Codex 底层走的是 OpenAI 自家的 Responses API而 DeepSeek 用的是标准 Chat Completions 协议两边说的不是同一套语言直连必然失败。早期思路是搭中间网关做协议转换和路由转发能用但配置繁琐出问题也难定位。好消息是 cc-switch 更新了关键功能在工具层面直接解决这个痛点本地代理自动把 Codex 发出的 Responses 格式请求转成 Chat Completions 发给上游再把上游响应重建回 Responses 格式返回给 Codex推理过程、工具调用、流式输出状态全部保留对上层完全透明。下面给出两种落地方案挑一个跟着配就行。2. 前置准备TaoToken 与 DeepSeek V4 的 Key在动手改 config.toml 之前先把两件事准备好。第一件是 DeepSeek V4 的 API Key。打开 DeepSeek 开放平台在 API Keys 页面创建一个sk-开头的那一串就是你的 apikey复制下来备用。注意保存好DeepSeek 开放平台不支持再次查看 key 的内容丢了只能重建。第二件是如果你还想在复杂任务里切换 Claude、GPT 这类模型可以准备一个聚合入口。我日常用的是 TaoToken官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。注册登录后在控制台创建令牌分组倍率越高的线路速度越快越稳定编码场景推荐选高倍率分组。拿到 key 之后Codex 侧只需要把 base_url 指向 TaoToken 的 API 地址模型名填对应模型即可切换成本很低。这里要强调一点Codex 本身是编码智能体不是编辑器替代品它的定位是帮你规划任务、排查 Bug、生成代码片段最终落地还是在你自己的 IDE 里。理解这一点后面的配置思路会清晰很多。3. 可复制配置config.toml 骨架与 cc-switch 路由Codex 的配置核心是config.toml默认位置在用户目录下的.codex/config.toml。下面是一份可以直接复制的骨架重点是model_providers段和profiles段。# ~/.codex/config.toml model deepseek-v4-pro model_provider deepseek [model_providers.deepseek] name DeepSeek V4 base_url https://api.deepseek.com/v1 env_key DEEPSEEK_API_KEY wire_api chat [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api/v1 env_key TAOTOKEN_API_KEY wire_api chat [profiles.deepseek] model deepseek-v4-pro model_provider deepseek [profiles.claude] model claude-sonnet-4-5 model_provider taotoken几个关键字段说明wire_api chat告诉 Codex 这个 provider 走 Chat Completions 协议而不是默认的 Responsesenv_key指定从哪个环境变量读 key不要把 key 明文写进 toml。环境变量这样设置export DEEPSEEK_API_KEYsk-你的deepseek-key export TAOTOKEN_API_KEYsk-你的taotoken-key如果你用 cc-switch它会在本地起一个代理端口Codex 的base_url指向http://127.0.0.1:端口/v1即可协议转换由 cc-switch 完成。cc-switch 需要 3.16.0 及以上版本低版本不支持 Responses 到 Chat Completions 的自动转换。安装后切到 Codex 栏添加供应商时选 DeepSeek 内置预设填入 apikey本地路由映射开关必须打开否则会弹提示且用不了。路由开关在右下角设置图标里的「路由」标签页把本地路由开关、路由总开关、Codex 路由启用三项全部打开再回去启用 DeepSeek。4. 验证请求一次实际调用跑通链路配置写完先别急着开 Codex用 curl 直接验证上游链路是否通curl https://api.deepseek.com/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $DEEPSEEK_API_KEY \ -d { model: deepseek-v4-pro, messages: [{role: user, content: 用一句话说明快速排序的核心思想}], stream: false }返回 200 且 body 里有choices字段说明 key 和 base_url 都没问题。接着启动 Codexcodex --profile deepseek第一次安装 Codex 打开后有两种登录方式表现不一样容易让人懵。第一种是没有 ChatGPT 账号直接选其他方式登录即用 apikey 登录随便输一个sk-开头的字符串比如sk-1234即可。这种情况下浏览器插件没解锁但 DeepSeek 模型是有的跑个测试任务token 有消耗就说明调用链通了。第二种是用 ChatGPT 账号登录插件能正常用测一下能看到插件在调用。说白了想用浏览器插件得有过 ChatGPT 登录记录纯 apikey 进来插件是锁着的但不影响你用 DeepSeek 写代码。在 Codex 里发一条真实任务比如「帮我审查这段 Python 函数的边界条件」观察终端是否流式输出、是否触发工具调用。如果 cc-switch 路由开着你会在 cc-switch 界面看到请求计数在涨这就是链路跑通的直接证据。5. 本篇常见错排查报错一unsupported wire_api: responses。说明 provider 段没写wire_api chatCodex 默认按 Responses 协议发请求DeepSeek 不认。补上这一行重启 Codex。报错二401 Unauthorized。九成是环境变量没生效。echo $DEEPSEEK_API_KEY确认一下如果为空检查是不是写在了.zshrc但当前 shell 没 source。另外注意 key 前后不要带空格或换行。报错三cc-switch 提示路由未开启。回到设置里的「路由」标签页确认本地路由开关、路由总开关、Codex 路由启用三项都是开的。只开其中一项不够三个是串联关系。报错四模型列表里看不到 DeepSeek V4。检查model字段拼写DeepSeek V4 的模型名是deepseek-v4-pro或deepseek-v4-flash写错会回落到默认模型或直接报模型不存在。报错五流式输出中断。多半是网络层超时把 cc-switch 的代理超时调大或者换 TaoToken 的高倍率分组线路。如果用的是 Codex它支持纯 API key 登录后解锁插件无需 ChatGPT 账号也能用插件功能图形化配置对新手更友好但它是第三方工具Codex 更新后可能要等适配。6. 多模型切换与进阶玩法跑通 DeepSeek V4 之后真正的效率提升来自按任务难度分配模型。重复或中低难度的任务用 DeepSeek V4成本低响应快难度复杂的任务切到 Claude 或 GPT通过 TaoToken 的聚合入口统一管理 key 和计费。切换方式有两种一是改config.toml里的profile用codex --profile claude启动二是在 cc-switch 界面点一下切换它会自动改写 Codex 读取的配置。如果你长期跑编码任务或 Agent 工作流可以考虑 Coding Plan 这类按周期计费的方案比按 token 计费更可控。模型对话入口可以用来快速验证某个模型是否适合你的任务类型接入文档里有完整的参数说明和示例。API Keys 页面管理你的所有令牌建议按用途分 key方便排查和限额。我自己的习惯是日常写业务代码用 DeepSeek V4遇到架构设计或复杂重构切 Claude两边共用一套 config.toml 骨架只改 profile 名。这样既高效又省 token 费用配置一次后面基本不用动。