ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ubuntu 上安装 Codex 并接入 DeepSeek API:TaoToken 统一 Key 配置实战

Ubuntu 上安装 Codex 并接入 DeepSeek API:TaoToken 统一 Key 配置实战

1. Ubuntu 终端里跑 Codex 的真实痛点:为什么我放弃了可视化方案

如果你在 Ubuntu 上搜「codex 安装教程」,大概率会先撞上一堆 Windows 截图——点安装包、点下一步、填个 Key 就完事。但 Ubuntu 版本的 Codex 是纯终端界面,没有可视化 UI,所有配置都落在~/.codex目录下的文件里。这意味着两件事:一是配置错了没有弹窗提示,只能靠终端报错自己排查;二是 Base URL、API Key、Model ID 这三样东西必须手写进配置文件,少一个都跑不起来。

我最初的想法很朴素:既然 Codex 是 OpenAI 出的 CLI,那接 DeepSeek API 应该就是改个 Base URL 的事。实际操作下来发现,Ubuntu 环境下从 Node.js 依赖到 auth.json 字段,每一步都有坑。比如 Node.js 版本低于 18 时 npm 装 Codex 会直接报 engine 不匹配;比如 auth.json 里字段名写错一个字母,终端只会给你一句401 Unauthorized,不会告诉你到底哪个字段有问题。

这篇内容聚焦的场景很明确:Ubuntu 从零搭建 Codex,通过 TaoToken 统一 Key 通道接入 DeepSeek API,最终在终端里跑通一次真实对话请求。适合谁?适合已经在 Ubuntu 上写代码、想用 DeepSeek 模型做终端 Agent 辅助、但不想在多个平台之间来回切换 Key 的开发者。核心检索词就三个:Ubuntu 安装 Codex、DeepSeek API 接入、TaoToken 统一 Key 配置。下面按步骤走,命令可以直接复制。

2. TaoToken 前置准备:统一 Key 通道与 Codex 的对接逻辑

在动手装 Codex 之前,先把 TaoToken 这边的准备工作做完。TaoToken 在这里扮演的角色是统一 Key 通道——你不需要把 DeepSeek 官方的 Key 直接写进 Codex 配置,而是用 TaoToken 生成的 Key 作为统一入口,Base URL 指向 TaoToken 的 API 地址。这样做的好处是:以后换模型、换供应商,只需要在 TaoToken 后台调整,Codex 本地的 auth.json 不用动。

具体操作分三步。第一步,打开 TaoToken 官网https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=注册并登录。第二步,进入控制台创建 API Key,路径是 console 页面下的 API Keys 管理。创建时建议给 Key 起个能识别的名字,比如ubuntu-codex-deepseek,方便以后在多个项目之间区分。第三步,记下两个东西:生成的 Key 字符串(通常以sk-开头),以及 TaoToken 的 API Base URLhttps://taotoken.net/api。注意这个 API 地址后面不加 UTM 参数,直接用作 Codex 的 base_url 字段值。

这里有个容易混淆的点:TaoToken 的官网地址和 API 地址是两个不同的东西。官网地址用于注册、登录、管理 Key;API 地址用于程序调用。Codex 的 auth.json 里填的是 API 地址,不是官网地址。我见过有人把官网地址填进 base_url,结果请求一直超时,排查了半天才发现是地址写错了。

另外,Model ID 这一项需要确认清楚。DeepSeek 在 TaoToken 通道下的模型标识通常是deepseek-chat或deepseek-reasoner,具体以 TaoToken 控制台模型列表里显示的为准。如果你不确定,可以在 TaoToken 的模型对话页面先手动发一条消息测试,确认模型能正常响应,再把 Model ID 抄进 Codex 配置。这一步花两分钟,能省掉后面半小时的排错时间。

3. 可复制配置:Node.js 20.x + Codex CLI + auth.json 完整片段

这一节是整篇的核心操作区,命令和配置片段都可以直接复制。先装 Node.js 20.x,Ubuntu 自带的 apt 源里 Node 版本往往偏低,用 NodeSource 的脚本装比较稳:

# 配置 Node.js 20.x 源 curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs # 确认版本,应输出 v20.x node -v npm -v

如果node -v输出的是 v18 以下,说明系统里还有旧版本残留,可以用sudo apt remove nodejs清掉再重装。npm 一般随 Node.js 一起装上,如果npm -v报 command not found,单独执行sudo apt install -y npm补一下。

接着装 Codex CLI:

npm install -g @openai/codex

装完后在终端运行一次codex,它会自动创建~/.codex配置目录,然后按Ctrl + C退出。这一步不能跳过,因为 auth.json 需要放在这个目录下。目录结构大致是:

~/.codex/ ├── auth.json └── config.toml # 部分版本需要

现在写 auth.json。用你习惯的编辑器打开~/.codex/auth.json,填入以下内容:

{ "OPENAI_API_KEY": "sk-你的TaoTokenKey", "OPENAI_BASE_URL": "https://taotoken.net/api", "OPENAI_MODEL": "deepseek-chat" }

三个字段对应三件套:Base URL 指向 TaoToken API 地址,Key 用 TaoToken 生成的 Key,Model ID 填 DeepSeek 模型标识。注意 JSON 格式对引号和逗号很敏感,最后一个字段后面不能有逗号,否则解析会失败。如果你用的 Codex 版本还读取 config.toml,可以补一个:

model = "deepseek-chat" base_url = "https://taotoken.net/api"

保存后,可以用cat ~/.codex/auth.json确认内容写入正确。如果终端里显示的中文 Key 变成乱码,说明编辑器编码不是 UTF-8,重新用nano或vim写一遍即可。

4. 验证请求:在终端跑通一次 DeepSeek 对话

配置写完后,验证动作很简单:在任意项目根目录下输入codex,进入交互式终端。启动信息里会显示当前使用的模型,如果看到deepseek-chat或你配置的 Model ID,说明 auth.json 被正确读取了。

第一次请求建议用一句简单的话测试,比如让它解释一段代码。输入后回车,观察终端输出。如果模型正常返回内容,说明整条链路通了:Codex CLI → TaoToken API → DeepSeek 模型 → 返回结果。实测下来,首次响应可能会有几秒延迟,属于正常范围。

Codex 会话里有一些常用命令值得记住。/diff查看当前 Agent 对代码做的修改对比,走的是 Git diff;/model切换模型或调整推理强度;/compact压缩对话历史释放上下文 Token;/new或/clear清空对话重新开始;/quit或/exit退出终端。会话恢复方面,codex resume查看并选择历史会话,codex resume --last直接恢复最近一次,codex fork从当前会话派生新分支。

验证成功后,你可以试着让它改一个真实文件。比如在项目里让它给某个函数加注释,然后用/diff看改动。这一步能确认 Codex 不只是能聊天,还能实际操作文件。如果/diff显示为空,检查一下当前目录是不是 Git 仓库,Codex 的 diff 功能依赖 Git。

5. 常见报错排查:401、local proxy failed 与 reading choices 怎么解

排错环节按真实报错来对照。第一个高频错误是401 Unauthorized。终端输出类似:

Error: 401 Unauthorized

原因通常是三个:Key 写错、Key 过期、或者 auth.json 字段名不对。先确认OPENAI_API_KEY的值是不是完整的 TaoToken Key,有没有多余空格。然后去 TaoToken 控制台确认 Key 状态是否正常。如果 Key 没问题,检查字段名是不是写成了API_KEY或OPENAI_KEY,Codex 认的是OPENAI_API_KEY。

第二个错误是local proxy failed或连接超时:

Error: connect ETIMEDOUT https://taotoken.net/api

这种一般是 Base URL 写错,或者网络环境导致请求发不出去。先确认OPENAI_BASE_URL填的是https://taotoken.net/api,没有多余路径。如果地址正确仍然超时,检查本机 DNS 解析是否正常,可以用curl -I https://taotoken.net/api测试连通性。注意不要使用任何网络代理工具,保持直连即可。

第三个错误是reading choices相关:

TypeError: Cannot read properties of undefined (reading 'choices')

这个报错说明请求发出去了,但返回结构里没有choices字段。常见原因是 Model ID 填错,比如填了一个 TaoToken 通道里不存在的模型名。回到 TaoToken 控制台的模型列表,确认deepseek-chat是否可用,然后同步修改 auth.json 里的OPENAI_MODEL字段。另外,如果返回的是错误信息而不是正常响应,也会触发这个报错,可以先用curl手动发一条请求看原始返回:

curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-chat","messages":[{"role":"user","content":"hi"}]}'

如果这条 curl 能返回正常 JSON,说明 Key 和地址没问题,问题在 Codex 配置;如果 curl 也报错,按返回的错误信息定位。

第四个是 OAuth 相关报错。部分 Codex 版本启动时会尝试走 OAuth 登录流程,如果你看到类似OAuth token expired的提示,说明它没有读取 auth.json 里的 Key。检查~/.codex目录下是否有其他残留的 token 文件,清理后重新写入 auth.json。如果 Codex 版本强制走 OAuth,可以在启动时加参数跳过,或者降级到支持 API Key 直连的版本。

6. 长期编码场景下的 Key 管理与模型切换建议

跑通一次请求只是开始,真正长期用起来,Key 管理和模型切换才是省心的关键。TaoToken 统一 Key 通道的价值在这里体现得比较明显:你不需要在 Codex、其他 CLI 工具、网页端之间维护多套 Key。一个 TaoToken Key 可以同时给多个工具用,换模型时只改 Model ID 字段,Base URL 和 Key 都不用动。

如果你打算把 Codex 用在日常编码里,建议把 auth.json 里的 Model ID 按场景区分。写业务代码时用deepseek-chat,需要深度推理时切到deepseek-reasoner。切换方式就是改 auth.json 里的OPENAI_MODEL字段,然后重启 Codex 会话。如果你不想每次手动改文件,可以在 shell 里加个别名,比如:

alias codex-reason='OPENAI_MODEL=deepseek-reasoner codex'

这样启动时临时覆盖模型,不用动配置文件。另外,Codex 的/model命令在会话内也能切换模型,适合临时调整。

Key 安全方面,auth.json 里存的是明文 Key,建议把~/.codex目录权限收紧:

chmod 700 ~/.codex chmod 600 ~/.codex/auth.json

这样其他用户读不到你的 Key。如果团队多人共用一台 Ubuntu 机器,每个人用自己的系统账号,各自维护~/.codex/auth.json,互不干扰。

最后说一个实际使用中的小技巧:Codex 的会话历史存在本地,codex resume能恢复之前的上下文。如果你在做一个长期项目,可以每天用codex resume --last接着上次的会话继续,不用重新交代背景。但注意上下文窗口有限,聊得太长时用/compact压缩一下,避免 Token 超限。需要长期、高频使用编码 Agent 的场景,可以了解 TaoToken 的 Coding Plan,按需选择适合的通道方案。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进