1. 为什么要在 Codex 里接 DeepSeek
Codex 这类本地 CLI 工具,默认走的是 OpenAI 官方通道,模型和计费都绑得比较死。很多做本地开发的朋友想把它换成 DeepSeek,原因很直接:中文代码注释理解更顺、长上下文便宜、日常补全和重构够用。但真动手时,卡点往往不在模型本身,而在config.toml这个配置文件——字段名写错一个字母,CLI 就直接报连接失败,连日志都懒得给你。
这篇就聚焦一件事:在 Codex 的本地 CLI 场景下,用config.toml把 DeepSeek 接进来,给出可直接复制的配置骨架,再跑一次最小请求确认通道真的通了。适合已经在用 Codex、想换模型后端但不想折腾源码的人。整个流程不涉及改 Codex 本体,只动配置文件和一次命令行验证。
需要提前说清楚:Codex 的配置读取路径和字段命名,不同版本会有差异,下面给的骨架是通用结构,你对照自己版本的文档微调字段名即可。核心思路是——把model、base_url、api_key三个东西填对,剩下的交给 CLI 自己拼请求。
2. TaoToken 作为统一 Key 通道的前置准备
在填config.toml之前,得先有一个能用的 API Key 和对应的 base_url。这里我用 TaoToken 作为统一 Key/API 通道来举例,原因是它把多个模型的调用入口收敛到一个地址上,配置时不用为每个模型单独记一套域名,换模型只改model字段就行。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,注册后进控制台拿 Key。
拿到 Key 之后,你要确认两件事:一是 base_url 的写法,TaoToken 的 API 入口是 https://taotoken.net/api ,注意这个地址不带任何查询参数,直接作为base_url的值;二是 Key 的权限范围,确保它至少对 DeepSeek 系列模型有调用权限,否则后面验证会返回 403 而不是 200。
如果你还没建 Key,进控制台的 API Keys 页面新建一个,复制出来先存到本地临时文件里,别直接贴在聊天窗口。这个 Key 后面要写进config.toml,属于敏感信息,建议用环境变量引用而不是硬编码,具体写法在下一节展开。
3. config.toml 配置骨架:model、base_url、api_key 三件套
Codex 的config.toml一般放在用户配置目录下,Linux/macOS 常见路径是~/.config/codex/config.toml,Windows 在%APPDATA%\codex\config.toml。如果目录不存在就手动建一个。下面这份骨架你可以直接复制,把占位符替换成自己的值:
# Codex 接入 DeepSeek 配置骨架 # 字段名以你本地 Codex 版本为准,结构供参考 [model] # 指定要调用的模型标识,DeepSeek 常用 deepseek-chat name = "deepseek-chat" # 上下文窗口,按需调整 context_window = 64000 [provider] # 统一 API 入口,TaoToken 的地址不带查询参数 base_url = "https://taotoken.net/api" # 从环境变量读取 Key,避免明文写死在文件里 api_key = "${TAOTOKEN_API_KEY}" # 请求超时,单位秒 timeout = 60 [request] # 是否流式返回,CLI 场景建议开 stream = true # 最大输出 token max_tokens = 4096几个关键点解释一下。base_url结尾不要带/v1之类的路径,Codex 会自己拼接;如果你手动加了反而会拼成/api/v1/chat/completions之外的怪路径。api_key用${TAOTOKEN_API_KEY}这种写法,前提是你的 Codex 版本支持环境变量插值,不支持的话就老老实实写字符串,但记得给文件设权限chmod 600。
设置环境变量的命令,Linux/macOS 下:
export TAOTOKEN_API_KEY="你的Key"Windows PowerShell:
$env:TAOTOKEN_API_KEY="你的Key"想让变量持久化,Linux/macOS 写进~/.bashrc或~/.zshrc,Windows 用系统环境变量面板加。配完记得重开终端,否则当前会话读不到。
4. 最小请求验证:确认通道真的通了
配置写完别急着开 Codex 交互界面,先用一条最小请求确认通道可用。最直接的方式是用 curl 打一次 chat completions 接口,看返回是不是正常 JSON。命令如下:
curl -s https://taotoken.net/api/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -d '{ "model": "deepseek-chat", "messages": [{"role": "user", "content": "只回复两个字:通了"}], "max_tokens": 16 }'正常返回会长这样,choices数组里有内容,finish_reason是stop:
{ "id": "chatcmpl-xxx", "object": "chat.completion", "model": "deepseek-chat", "choices": [ { "index": 0, "message": {"role": "assistant", "content": "通了"}, "finish_reason": "stop" } ], "usage": {"prompt_tokens": 12, "completion_tokens": 2, "total_tokens": 14} }看到这个就说明 Key、base_url、模型名三者都对上了。接着回到 Codex CLI,跑一次实际请求,比如让它解释一段代码:
codex "解释这段 Python 的作用:def f(x): return x[::-1]"如果 CLI 能正常输出中文解释,说明config.toml被正确加载,整条链路打通。这一步的意义在于把「配置层」和「调用层」分开验证——curl 通了但 CLI 不通,问题就在配置文件字段名或路径;两个都不通,问题在 Key 或网络。
5. 本篇常见错排查
配置过程中最容易踩的坑集中在下面几类,对照排查能省不少时间。
报 401 Unauthorized:Key 没读到。先确认环境变量在当前终端echo $TAOTOKEN_API_KEY有值,再确认config.toml里的引用写法和你 Codex 版本匹配。有些版本不支持${}插值,会把它当字面量发出去,那就直接写 Key 字符串。
报 404 Not Found:base_url 拼错了。检查是不是多写了/v1或结尾斜杠。正确值就是https://taotoken.net/api,不带多余路径。
报 model not found:model字段的值和通道支持的模型标识不一致。DeepSeek 常用deepseek-chat,别写成deepseek或deepseek-v3这种非标准名。不确定就去控制台看模型列表。
CLI 完全没反应或读不到配置:配置文件路径不对。用codex --help看有没有打印配置路径的选项,或者直接 strace 一下看它读了哪个文件。Windows 下注意%APPDATA%和%LOCALAPPDATA%的区别,有的版本读后者。
流式返回卡住:stream = true但终端不支持流式渲染时会看起来像卡死。临时改成false验证,确认是渲染问题还是请求问题。
超时:timeout设太短,长上下文请求还没返回就断了。调到 120 秒再试。
6. 后续怎么用:从验证到日常编码
通道验证通过后,日常使用就顺了。如果你只是偶尔在 CLI 里问几句,保持现在的配置就行,Key 走环境变量,换模型只改model字段。如果你打算把 Codex 当长期编码助手,频繁跑重构、补全、Agent 任务,那建议了解一下 Coding Plan 这类按周期计费的方案,比按 token 计费在重度使用下更划算,入口在 https://taotoken.net/api 对应的控制台里能找到。
另外,接入文档里对config.toml的字段有更细的说明,包括不同 Codex 版本的差异,遇到字段名对不上时去翻一下比猜快。模型对话入口可以用来快速试新模型,不用改配置就能对比输出质量。API Keys 页面则是管理 Key 权限和配额的地方,建议给 CLI 单独建一个 Key,方便出问题时快速吊销而不影响其他服务。
最后提醒一句:config.toml里别留明文 Key,环境变量是底线。文件权限设好,提交到 git 前确认.gitignore里有它。这套配置我用了几个月,换模型只改一行,比每次重装工具省事得多。