ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Codex + cc-switch + ccx 使用deepseek等国内大模型:把 auth.json 改到 TaoToken

2026/10/4 9:47:26 拓冰建站 浏览量
Codex + cc-switch + ccx 使用deepseek等国内大模型:把 auth.json 改到 TaoToken 1. 为什么 Codex 直连国内大模型总卡在鉴权这一步Codex 本身是 OpenAI 官方推出的命令行编码代理工具它能读代码、改文件、跑命令很多人拿它当终端里的结对程序员。但默认情况下Codex 只认 OpenAI 的官方端点你想让它调用 deepseek、qwen、glm 这些国内大模型就得动它的auth.json和 provider 配置。问题就出在这里Codex 的鉴权链路和普通聊天客户端不一样它不是简单填个 Base URL 就能跑而是要走一套 provider auth 的组合逻辑。我见过太多人卡在同一个地方cc-switch 里配好了 API 地址ccx 也生成了 keyCodex 启动后却报 401 或者local proxy failed。原因通常有三个一是auth.json里的 endpoint 没改对Codex 还在往官方地址发请求二是 ccx 生成的 key 没有正确写进 Codex 的鉴权字段三是 cc-switch 的网关没重启配置没生效。这三个环节任何一个断了Codex 都跑不起来。这篇要解决的就是这条完整链路Codex 通过 cc-switch 做 provider 切换ccx 做本地网关和 key 生成最终把 Codex 的auth.json指向 TaoToken 的统一 API 通道让它能稳定调用 deepseek 等国内大模型。适合已经在用 Codex、想接入国内模型但被鉴权卡住的开发者也适合想用统一 Key 管理多个模型通道的人。核心检索词先明确Codex 接入国内大模型、cc-switch 配置 auth.json、ccx 生成 API Key、TaoToken 统一通道。这几个词贯穿全文你照着做就能跑通。先说清楚整体架构不然后面配置容易晕。Codex 是客户端它读~/.codex/auth.json和~/.codex/config.toml来决定请求发往哪里、用什么 key。cc-switch 是一个 provider 管理工具它帮你切换不同的 API 端点配置。ccx 是一个本地网关负责生成 key、转发请求。TaoToken 在这里扮演统一 API 通道的角色你只需要一个 Key就能通过它的端点访问 deepseek 等模型不用每个模型单独申请。所以链路是Codex → cc-switch 管理的配置 → ccx 本地网关 → TaoToken API 通道 → deepseek 等模型。你要改的核心就是让 Codex 的auth.json里的 endpoint 和 key 指向这条链路而不是 OpenAI 官方。很多人第一次配的时候以为只要在 cc-switch 里填个地址就行结果 Codex 根本不读 cc-switch 的配置它只读自己的auth.json。这就是为什么你 cc-switch 配得再对Codex 还是报错。正确的做法是让 cc-switch 去写 Codex 的配置文件或者你手动把auth.json改到位。下面进入实操。我会先讲 TaoToken 的前置准备再给可复制的auth.json片段和 cc-switch 配置项然后给 ccx 启动参数最后用一次真实请求验证。每一步都有命令和结果说明你跟着敲就行。2. TaoToken 前置准备拿 Key、认端点、装工具在改 Codex 配置之前你得先把 TaoToken 的 Key 和端点准备好。这一步不复杂但顺序不能乱否则后面auth.json里的字段填什么你都不知道。首先打开 TaoToken 官网注册并登录。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 进去之后找到控制台。控制台里有一个 API Keys 管理页面你可以在这里创建一个新的 Key。这个 Key 就是你后面要填进 Codexauth.json的鉴权凭证。创建的时候建议起个能认出来的名字比如codex-deepseek方便以后多个 Key 并存时区分。创建完 Key 之后复制下来先存到一个安全的地方。注意这个 Key 只显示一次关掉页面就看不到了所以一定要先复制。如果你不小心关了就重新创建一个不麻烦。接下来确认 API 端点。TaoToken 的 API 基础地址是 https://taotoken.net/api 这个地址就是你后面要填进auth.json的 endpoint 前缀。注意这里不要加任何 UTM 参数就是干净的/api路径。Codex 在发请求的时候会在这个基础地址后面拼接具体的模型路径所以你只需要填基础地址。然后确认你要用的模型 ID。TaoToken 支持 deepseek 等国内大模型具体模型 ID 你可以在文档里查或者直接在模型对话页面看可选列表。常见的 deepseek 模型 ID 类似deepseek-chat、deepseek-coder这种格式。你记下你要用的那个 ID后面填进 Codex 的 config.toml 里。工具方面你需要准备三个东西Codex 本体、cc-switch、ccx。Codex 你可以从官方渠道获取cc-switch 和 ccx 都是开源工具在 GitHub 上有 Releases 页面下载对应你系统的版本就行。Windows 下通常是.exemacOS 下是.dmg或者二进制文件Linux 下是二进制。下载完先别急着配把三个工具都放到你能找到的目录里。这里有个小坑要提醒ccx 首次启动的时候会初始化本地网关配置它会生成一个默认的 key 和端口。你要先启动一次 ccx让它把配置文件写出来然后再去改。如果你先改 Codex 配置再启动 ccxkey 对不上照样报 401。启动 ccx 之后它会告诉你本地网关监听的地址通常是http://127.0.0.1:某个端口。这个地址就是你 cc-switch 里要填的 API 请求地址。同时 ccx 会生成一个 key这个 key 你要复制出来填进 cc-switch 和 Codex 的鉴权字段。所以前置准备的顺序是TaoToken 拿 Key → 确认 API 端点 → 确认模型 ID → 下载三个工具 → 首次启动 ccx 拿本地网关地址和 key。这五步做完你手里就有了后面配置需要的所有信息。我建议你把这些信息先写在一个临时文本里格式大概是TaoToken Key: sk-xxxxxxxx TaoToken API Base: https://taotoken.net/api 模型 ID: deepseek-chat ccx 本地网关: http://127.0.0.1:xxxx ccx 生成的 Key: xxxxxxxx这样后面填配置的时候直接对照不容易漏。很多人配到一半发现少个字段又回去翻效率很低。先整理好一次配完。另外TaoToken 的文档页面有详细的接入说明如果你对某个字段不确定可以去文档里查。文档地址在官网导航里能找到里面有针对不同客户端的配置示例。不过 Codex 这种改auth.json的方式比较特殊文档里不一定有完全对应的例子所以这篇才要专门讲。还有一点TaoToken 的 Coding Plan 适合长期做编码代理的场景如果你打算把 Codex 当日常主力工具可以了解一下。不过这篇先聚焦配置链路套餐的事你后面按需看。前置准备做完下面进入真正的配置环节。我会先给auth.json的完整片段再给 cc-switch 的配置项然后给 ccx 的启动参数。你按顺序来不要跳步。3. 可复制配置auth.json、cc-switch 与 ccx 启动参数这一节是全文的核心你照着复制粘贴就能把链路搭起来。我会分三块讲Codex 的auth.json和config.toml、cc-switch 的配置项、ccx 的启动参数。每一块都给完整片段路径和字段名保持一致你直接改值就行。先找到 Codex 的配置目录。不同系统路径不一样Windows:C:\Users\你的用户名\.codex\macOS/Linux:~/.codex/这个目录下有两个关键文件auth.json和config.toml。如果不存在就手动创建。auth.json管鉴权config.toml管模型和 provider。先写auth.json。这个文件的作用是告诉 Codex 用哪个 key、往哪个端点发请求。你要把 endpoint 改成 TaoToken 的 API 地址key 填 TaoToken 的 Key。完整片段如下{ OPENAI_API_KEY: sk-你的TaoTokenKey, OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_API_TYPE: openai, tokens: { access_token: sk-你的TaoTokenKey, refresh_token: , expires_at: null } }这里有几个点要注意。OPENAI_API_KEY和tokens.access_token都填同一个 TaoToken KeyCodex 在不同代码路径下会读不同的字段两个都填上最稳。OPENAI_BASE_URL填https://taotoken.net/api不要加尾斜杠也不要加 UTM 参数。OPENAI_API_TYPE保持openai因为 TaoToken 的接口是 OpenAI 兼容格式。如果你之前登录过 Codex 官方账号auth.json里可能有refresh_token之类的字段直接覆盖成上面的结构就行。覆盖前建议备份一下原文件改错了能回滚。然后是config.toml。这个文件告诉 Codex 用哪个模型、走哪个 provider。完整片段model deepseek-chat model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key OPENAI_API_KEY wire_api chat [model_providers.taotoken.query_params] # 如果需要额外参数在这里加一般留空model填你要用的 deepseek 模型 ID比如deepseek-chat。model_provider填taotoken和下面[model_providers.taotoken]对应。base_url同样是 TaoToken 的 API 地址。env_key填OPENAI_API_KEYCodex 会从环境变量或auth.json里读这个 key。wire_api填chat表示用 chat completions 接口。如果你要用多个模型可以在config.toml里加多个 provider 块然后通过model_provider切换。不过这篇先聚焦单模型跑通多模型后面你自己扩展。接下来是 cc-switch 的配置。cc-switch 的作用是管理不同的 provider 配置它可以把上面这些配置写进 Codex 的目录也可以自己维护一套。你打开 cc-switch 之后新建一个 provider填以下字段Provider 名称: TaoToken-DeepSeek API 请求地址: http://127.0.0.1:ccx端口 API Key: ccx生成的Key 模型: deepseek-chat注意cc-switch 里的 API 请求地址填的是 ccx 的本地网关地址不是 TaoToken 的地址。因为链路是 Codex → ccx → TaoTokencc-switch 管的是 Codex 到 ccx 这一段。ccx 再负责把请求转发到 TaoToken。这里容易搞混auth.json里的OPENAI_BASE_URL填 TaoToken 地址cc-switch 里的 API 请求地址填 ccx 本地地址。两者不一样别填反了。如果你填反了Codex 会直接往 ccx 发请求但 ccx 没配 TaoToken 的上游就会报local proxy failed。cc-switch 配置完之后点击应用或者切换它会帮你把配置写进 Codex 的auth.json和config.toml。如果你不放心它自动写就手动按上面的片段改效果一样。最后是 ccx 的启动参数。ccx 是一个本地网关启动的时候需要告诉它上游是谁、用什么 key。启动命令大概是这样ccx --upstream https://taotoken.net/api --upstream-key sk-你的TaoTokenKey --port 8080--upstream填 TaoToken 的 API 地址--upstream-key填 TaoToken 的 Key--port填你想要的本地端口比如 8080。启动之后ccx 会监听http://127.0.0.1:8080并生成一个本地 key 给客户端用。如果你不想每次敲命令可以写一个启动脚本。Windows 下写.batmacOS/Linux 下写.sh。脚本内容就是上面那行命令加上cd到 ccx 所在目录。ccx 启动后你会在终端看到类似这样的输出ccx gateway started listening on http://127.0.0.1:8080 local key: xxxxxxxx upstream: https://taotoken.net/api这个local key就是你要填进 cc-switch 和 Codex 的 key。注意这个 key 是 ccx 生成的不是 TaoToken 的 Key。两者不要混。Codex 用 ccx 的 key 访问本地网关ccx 用 TaoToken 的 Key 访问上游。三块配置都完成后重启 ccx 网关然后重启 Codex。重启顺序是先启动 ccx再启动 Codex。如果反过来Codex 启动时 ccx 还没监听会连接失败。配置环节的常见错误我列一下你对照检查错误现象可能原因修正401 Unauthorizedkey 填错或没填检查 auth.json 和 ccx keylocal proxy failedcc-switch 地址填成 TaoToken改成 ccx 本地地址reading choices 报错模型 ID 不对确认 deepseek 模型 IDOAuth 相关报错auth.json 残留官方字段覆盖成纯 API 结构这张表你先留着后面排障会用到。配置写完下一步就是验证。别急着写代码先用一条 curl 命令确认链路通不通。4. 验证请求用一次真实调用确认模型返回与鉴权状态配置改完不代表能跑必须验证。验证分两层先验证 ccx 到 TaoToken 这一段通不通再验证 Codex 到 ccx 这一段通不通。两层都通了才算真正跑起来。先验证 ccx 到 TaoToken。ccx 启动之后你可以直接用 curl 打 ccx 的本地端口让它转发到 TaoToken。命令如下curl -X POST http://127.0.0.1:8080/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer ccx生成的Key \ -d { model: deepseek-chat, messages: [ {role: user, content: 用一句话说明什么是递归} ], max_tokens: 100 }这条命令的意思是向本地 ccx 网关发一个 chat 请求ccx 会用你启动时配的 TaoToken Key 转发到上游然后把结果返回。如果返回类似下面的 JSON说明 ccx 到 TaoToken 这一段通了{ id: chatcmpl-xxxx, object: chat.completion, choices: [ { index: 0, message: { role: assistant, content: 递归是指函数在定义中调用自身的一种编程技巧。 }, finish_reason: stop } ], usage: { prompt_tokens: 15, completion_tokens: 20, total_tokens: 35 } }看到choices里有内容就说明鉴权通过了模型也返回了。如果这里报 401说明 ccx 的--upstream-key填错了或者 TaoToken Key 失效了。如果报model not found说明模型 ID 不对去 TaoToken 文档确认。这一步通了之后再验证 Codex 到 ccx。Codex 的验证方式很简单直接在终端里跑codex 用一句话说明什么是递归如果 Codex 正常返回模型输出说明整条链路通了。如果报错看错误类型401Codex 的auth.json里 key 不对检查是不是填了 ccx 的 key。local proxy failedcc-switch 的地址填错了或者 ccx 没启动。reading choicesCodex 收到的响应格式不对可能是wire_api配错了确认是chat。OAuth相关auth.json里还有官方登录残留覆盖成纯 API 结构。我实测下来最容易出问题的是auth.json里的OPENAI_BASE_URL。很多人填了 TaoToken 地址但忘了 cc-switch 会覆盖这个文件结果 cc-switch 一应用地址又变回 ccx 本地地址了。这时候你要么让 cc-switch 管到底要么手动改完auth.json后不再动 cc-switch。两者选一个别混着来。还有一种情况Codex 启动时读的是环境变量里的OPENAI_API_KEY而不是auth.json。如果你系统里设过这个环境变量它会优先用环境变量的值。检查方法echo $OPENAI_API_KEY如果输出的是旧 key就把它清掉或者改成 TaoToken 的 Key。Windows 下用echo %OPENAI_API_KEY%。验证通过之后你可以再跑一个稍微复杂点的请求确认多轮对话也正常codex 写一个 Python 函数计算斐波那契数列的第 n 项并解释时间复杂度如果 Codex 能返回完整代码和解释说明链路稳定。这时候你就可以正常用 Codex 做编码任务了。验证环节的核心就一句话先 curl 本地网关再跑 Codex。两步都过才算成。别跳过 curl 直接跑 Codex不然报错了你分不清是 ccx 的问题还是 Codex 的问题。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置和验证过程中报错是常态。这一节我把最常见的四类错误拆开讲每类给现象、原因、修正步骤。你对照着查基本能解决 90% 的问题。第一类401 Unauthorized。现象是 Codex 或 curl 返回 401提示鉴权失败。原因通常有三个TaoToken Key 填错、ccx 的 key 填错、key 过期。排查顺序是先从 ccx 的 curl 开始如果 curl 就 401说明 ccx 到 TaoToken 这一段有问题检查--upstream-key是不是 TaoToken 的 Key有没有多余空格。如果 curl 通了但 Codex 401说明 Codex 到 ccx 这一段有问题检查auth.json里的 key 是不是 ccx 生成的 key别填成 TaoToken 的 Key。这里有个细节ccx 生成的 key 和 TaoToken 的 Key 长得可能很像都是sk-开头容易混。你可以在 ccx 启动输出里确认本地 key在 TaoToken 控制台确认上游 key两个分开存。第二类local proxy failed。现象是 Codex 报local proxy failed或者连接被拒绝。原因是 Codex 尝试连接的地址不对或者 ccx 没启动。排查先确认 ccx 是否在运行终端里有没有listening on的输出。然后确认 cc-switch 里的 API 请求地址是不是http://127.0.0.1:ccx端口不是 TaoToken 地址。如果你在 cc-switch 里填了 TaoToken 地址Codex 会直接往 TaoToken 发请求但 TaoToken 不认 ccx 的 key就会失败。修正方法把 cc-switch 的 API 请求地址改成 ccx 本地地址重启 ccx重启 Codex。顺序不能反。第三类reading choices 报错。现象是 Codex 返回类似error reading choices或者unexpected response format。原因是 Codex 收到的响应不是它期望的 chat completions 格式。可能的原因wire_api配错了或者模型 ID 不对或者上游返回了错误信息但被当成正常响应解析。排查先看 curl 本地网关返回的 JSON 结构确认有choices字段。如果没有说明上游返回了错误检查模型 ID 和 TaoToken 的接口路径。如果 curl 正常但 Codex 报错检查config.toml里的wire_api是不是chatbase_url是不是https://taotoken.net/api。第四类OAuth 相关报错。现象是 Codex 启动时提示 OAuth 登录失败或者让你重新登录。原因是auth.json里残留了官方登录的字段Codex 以为你要走 OAuth 流程。修正把auth.json完全覆盖成第 3 节给的结构不要保留refresh_token、id_token这些字段。覆盖前备份覆盖后重启 Codex。除了这四类还有一个隐蔽问题环境变量覆盖。如果你系统里设了OPENAI_API_KEY或OPENAI_BASE_URLCodex 会优先用环境变量忽略auth.json。排查方法是在终端里echo这两个变量如果有值且不是 TaoToken 的就清掉。Windows 下在系统设置里找环境变量macOS/Linux 下改.bashrc或.zshrc。再给一个排查流程你按顺序走确认 ccx 在运行端口正确。curl 本地网关确认返回choices。检查auth.json的 key 和 base_url。检查config.toml的 model 和 wire_api。检查环境变量有没有覆盖。重启 ccx 和 Codex。这套流程走完基本都能定位。如果还不行把 curl 的完整返回和 Codex 的完整报错贴出来对照上面的分类找。我踩过的坑是 cc-switch 自动写配置后auth.json被改成了 ccx 地址但我又手动改回 TaoToken 地址结果两边打架。后来统一让 cc-switch 管手动不动auth.json就稳定了。你也可以选一种方式别两边都改。排障的核心是分层先确认 ccx 到 TaoToken再确认 Codex 到 ccx。一层一层来别跳。6. 长期使用建议与统一通道的取舍配置跑通之后你可能会想这套链路要不要长期用我的建议是如果你只是偶尔用 Codex 跑个任务手动配一次就行。但如果你打算把 Codex 当日常编码代理那就要考虑稳定性和可维护性。先说稳定性。ccx 是本地网关它挂了 Codex 就连不上。所以你要保证 ccx 常驻运行。Windows 下可以把它做成服务macOS/Linux 下用systemd或者launchd。这样开机自启不用每次手动敲命令。ccx 的日志也要留着出问题能查。再说 Key 管理。TaoToken 的统一 Key 好处是一个 Key 能访问多个模型你不用为每个模型单独申请。但这也意味着 Key 泄露的风险集中。建议定期轮换 Key在 TaoToken 控制台删旧建新然后更新 ccx 的--upstream-key和auth.json。轮换的时候注意顺序先建新 Key更新 ccx重启 ccx再删旧 Key。别先删不然中间会断。模型切换方面如果你要在 deepseek 和其他模型之间切改config.toml里的model字段就行base_url不用动因为都走 TaoToken。这样切换成本很低。你可以准备几个config.toml模板用的时候复制过去。关于 Coding Plan如果你长期用 Codex 做 Agent 任务可以了解一下 TaoToken 的 Coding Plan它在用量和通道上有针对编码场景的优化。不过这篇聚焦配置套餐你按需看。最后说一个取舍用 ccx 本地网关的好处是灵活能改请求、能加日志、能换上游。坏处是多一层多一个故障点。如果你追求极简也可以让 Codex 直接连 TaoToken不走 ccx。但那样 cc-switch 的 provider 管理就用不上了而且 Codex 的auth.json要直接填 TaoToken 的 Key。两种方式都行看你需求。如果你想让 Codex 直接连 TaoTokenauth.json改成{ OPENAI_API_KEY: sk-你的TaoTokenKey, OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_API_TYPE: openai }config.toml里的base_url也改成 TaoToken 地址。这样就不需要 ccx 了。但 cc-switch 还是可以用来管理多个 provider只是它写的地址要改成 TaoToken。我个人倾向保留 ccx因为本地网关能看请求日志排障方便。而且 ccx 的 key 和 TaoToken 的 Key 分离安全性好一点。Codex 那边泄露了 ccx key影响范围有限你换一个 ccx key 就行不用动 TaoToken。长期使用的另一个建议是把配置写成脚本。每次换机器或者重装跑一遍脚本就恢复。脚本内容包括创建.codex目录、写auth.json、写config.toml、启动 ccx。这样你不用记每个字段。还有Codex 的版本更新可能会改配置格式。升级之后如果报错先看官方 changelog再对照这篇的字段检查。TaoToken 的接口是 OpenAI 兼容的一般不会变所以base_url和wire_api相对稳定。最后如果你在团队里用可以把这套配置做成文档让每个人填自己的 TaoToken Key。ccx 的端口可以统一也可以每人不同。Key 不要共享每人一个方便审计和轮换。这套链路我用了几个月整体稳定。deepseek 的编码能力在 Codex 里表现不错尤其是代码补全和重构。TaoToken 的统一通道省去了多平台申请的麻烦。你按这篇配完应该能直接跑起来。如果遇到上面没覆盖的报错先按分层排查走一遍基本能定位。