把 Codex 接到 DeepSeek 这类国内大模型,改的还是同一个 config.toml 文件。但它比接中转站要多一道工序,原因在协议上。最新版的 Codex 只认 Responses 协议,国内大模型多数只提供 Chat 协议,两边对不上。
中间要加一层做协议转换。这一层不装,配置文件写得再对也会报错。整个流程可以拆成四步:拿 API Key,装并启动那一层转换,改配置文件,最后验证。
中间那层协议转换
案例里用的转发中间件叫 codex-relay,依赖 Python 环境。另一个可选项是 Moon Bridge,依赖 Node.js,在 GitHub 上能找到,DeepSeek 的说明仓库里还配了一份中文教程。
选哪个看本机已经有什么环境。Python 现成就用 codex-relay,Node 现成就用 Moon Bridge。
先拿到 DeepSeek 的 API Key
进 DeepSeek 的开放平台注册账号,然后充值,先充 10 块钱就够试。进 API Keys 页面点创建,填一个名称,确认之后 key 就出来了。
key 只在创建那一次能复制,之后回到这个页面也看不到完整的一串。创建完先粘到别处临时存一下。真忘了也不麻烦,把旧 key 删掉重建一个就可以。
拿 key 的同时把 codex-relay 装上。在 PowerShell 里运行 pip install codex-relay。本机要先有 Python 环境,跑完没报错就算装好了。
启动脚本写好再运行
启动 codex-relay 要用一段 PowerShell 脚本。脚本里要设三样东西:上游地址指向 DeepSeek 的接口,API Key 换成你刚建的那一串,端口固定用 4446。脚本开头清掉旧的环境变量,末尾打印三行确认信息,顺便检查 codex-relay 命令找不找得到。
把这段内容粘进一个文本文件,后缀名改成 ps1,右键选 PowerShell 运行。控制台出现正在监听 127.0.0.1:4446 并把请求转发到 DeepSeek 地址的提示,就说明这一层通了。
这个窗口不能关。关了等于关掉转发服务,Codex 那边立刻用不了。想长期用就让它一直开着。

config.toml 里要改的几行
配置文件在用户目录下的 .codex 文件夹里,文件名是 config.toml。装 Codex 的时候它会自动创建。如果找不到,就手动建一个文本文件,再把名称和后缀改成 config.toml。用记事本打开,把下面这些项加到文件最前面。文件原本有内容不影响,只要这段在顶部。
| 配置项 | 写什么 |
|---|---|
| model | deepseek-chat |
| model_provider | deepseek_relay |
| approval_policy | never |
| sandbox_mode | danger-full-access |
| model_providers 里的 name | DeepSeek via Relay |
| base_url | 本机 4446 端口上的地址 |
| wire_api | responses |
| requires_openai_auth | false |
| supports_websockets | false |
| request_max_retries 和 stream_max_retries | 0 |
| stream_idle_timeout_ms | 300000 |
关键几行各自管一件事。model 选 deepseek-chat,model_provider 指向下面定义的 deepseek_relay。base_url 写成本机上 4446 端口那个地址,让所有请求先走本地这一层。wire_api 保持 responses,让 Codex 看到的是它认的协议。
还有三处必须关掉。requires_openai_auth 设成 false,鉴权交给本地代理来做。supports_websockets 设成 false,DeepSeek 不支持 WebSocket。features 里的 responses_websockets_v2 也设成 false,版本对不上的功能先别开。
重试次数设成 0,避免同一个问题被回复好几次。超时时间拉长到 300000 毫秒,给 DeepSeek 留出思考的余地。
多智能体那几项也一起开。max_threads 设 4,max_depth 设 1,单任务运行上限 1800 秒。
配置里的 approval_policy 和 sandbox_mode 是示例给的放开权限写法。真要长期用,建议先在测试目录里跑顺再说。

验证和排错
配置写完,打开 Codex 试一轮。能正常回话就说明闭环成了。请求先到本地的 4446 端口,再由代理转给 DeepSeek。base_url 和启动脚本里的监听端口必须是同一个,两边不一致就断在中间。
用不起来的常见原因就那么几个。那个 PowerShell 窗口被关了,转发服务跟着停。config.toml 里还留着示例 Key,没换成自己的,或者用的是已经作废的 key。上游地址和端口写错一位。websockets 那几处没关。报错里出现协议不兼容的提示,基本就是代理这一层没起来。
另一条路是用面板工具切换
不想手工改文件,还有一个办法。CC Switch 是一个第三方开源桌面工具,用来统一管理不同的 Agent 工具。以前要手动改 Claude Code,Codex,Gemini CLI 各自的配置文件,现在它把这些收进一个可视化面板。
| 用途 | 说的是什么 |
|---|---|
| Provider 切换 | 从官方 API 切到中转 API 或者另一个模型服务 |
| MCP 统一管理 | 不用分别给 Claude Code,Codex,Gemini 配 MCP |
| Skills 管理 | 从 GitHub 或压缩包装 Skill,同步到不同 AI 编程工具 |
用法不复杂。在官网下载装上,先去 DeepSeek 官网建一个 API Key。打开 CC Switch,添加模型,把 key 粘进去。再开启本地路由映射,然后点添加。进设置把路由全部打开,点启用。如果它的路由,模型服务和 Codex 侧配置都兼容,再打开 Codex 就有可能通过这套路由用上 DeepSeek。
这条路不属于 OpenAI 官方功能。能不能正常使用,模型能力,上下文长度和工具调用兼容性都要以 CC Switch 和模型服务商为准,费用和隐私规则也一样。重要项目先用测试仓库验证,别直接在生产项目上试。
两条路都指向同一个结果。区别在配置这条路要自己看懂每一行,面板那条省事但多了一层第三方。