1. 为什么要在 Linux 上给 Codex 换一个模型
Codex CLI 在 Linux 服务器上跑起来之后,默认会连 OpenAI 的模型。但很多人手里已经有 GLM-5.3-Flash 的额度,或者想用国产模型来降低日常编码成本,这时候就需要把 Codex 的底层推理引擎换掉。Codex 本身支持 Custom Model Provider,也就是说只要第三方服务提供 Codex 能识别的 API 协议,我们就可以通过修改~/.codex/config.toml把模型切换成 GLM-5.3-Flash。
这件事的核心难点不在安装,而在协议匹配。新版 Codex 的自定义 Provider 只认 Responses API,wire_api目前唯一合法值是responses,而不是网上大量教程里写的/chat/completions。如果你直接把旧教程里的base_url和wire_api = "chat"抄过来,启动就会报配置错误。所以这篇教程会围绕三个关键点展开:模型标识怎么写、API 地址填哪个、统一 Key 通道怎么配,最后给出可复制的config.toml骨架和一次真实对话验证。
适合谁看?如果你在 Linux 服务器上做开发,已经装了 Codex CLI,想让它跑 GLM-5.3-Flash,或者你手上有一个兼容 Responses API 的统一 Key 通道,想把 Codex 的模型层解耦出来,这篇都能直接跟着做。下面从环境准备开始,一步步走到启动验证。
2. 前置准备:Codex CLI 与统一 Key 通道
2.1 安装 Codex CLI
Linux 下安装 Codex 比较直接,官方提供了一键脚本。以 Ubuntu / Debian / CentOS 为例,执行:
curl -fsSL https://chatgpt.com/codex/install.sh | sh安装完成后检查版本:
codex --version正常会输出类似codex-cli x.x.x。如果提示codex: command not found,先重新打开终端,或者手动加载环境:
source ~/.bashrc # 如果用的是 zsh source ~/.zshrc然后再执行一次codex --version确认。
2.2 准备统一 Key 通道
这里我用 TaoToken 作为统一 Key 通道来演示。它的作用是帮你把不同模型的 API Key 收口到一个地方,Codex 只需要认一个环境变量,不用把真实 Key 写进配置文件。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。
你需要先在控制台创建一个 API Key。创建入口在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,Key 管理页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。拿到 Key 之后不要直接写进config.toml,而是通过环境变量注入,原因后面会讲。
注意:Codex 自定义 Provider 走的是 Responses API,所以统一 Key 通道必须支持
POST /v1/responses以及流式和工具调用行为。如果你用的通道只支持/chat/completions,Codex 是接不上的。
2.3 确认模型标识
GLM-5.3-Flash 在 API 里的模型 ID 是glm-5.3-flash。这个字符串要原样填到config.toml的model字段里,大小写和连字符都不能改。上下文窗口官方给到 1M Tokens,也就是 1048576,这个值可以写进model_context_window。
3. 可复制配置:config.toml 骨架与字段说明
3.1 找到配置目录
Codex 默认配置目录在~/.codex/。先看一下是否存在:
ls -la ~/.codex如果目录不存在就创建:
mkdir -p ~/.codex touch ~/.codex/config.toml然后用编辑器打开:
nano ~/.codex/config.toml3.2 写入完整配置
下面这份是可以直接复制的骨架,把统一 Key 通道的地址和模型标识都填好了:
model = "glm-5.3-flash" model_provider = "taotoken" approval_policy = "on-request" sandbox_mode = "workspace-write" model_context_window = 1048576 model_reasoning_effort = "high" [model_providers.taotoken] name = "TaoToken Unified" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" env_key_instructions = "请先设置环境变量 TAOTOKEN_API_KEY" wire_api = "responses" requires_openai_auth = false request_max_retries = 4 stream_max_retries = 5 stream_idle_timeout_ms = 300000保存退出:Ctrl + O回车,然后Ctrl + X。
3.3 逐字段解释
model = "glm-5.3-flash"告诉 Codex 默认使用 GLM-5.3-Flash。model_provider = "taotoken"表示不要走默认 OpenAI Provider,而是去找[model_providers.taotoken]这一段。Provider 的 ID 叫taotoken,你也可以改成glm或别的名字,只要两处对应即可。
base_url = "https://taotoken.net/api"是统一 Key 通道的入口。Codex 会在这个地址后面拼接 Responses API 的路径。注意这里不要写成/chat/completions结尾,Codex 需要的是 Responses 协议。
env_key = "TAOTOKEN_API_KEY"的意思是:Codex 去 Linux 环境变量里找一个叫TAOTOKEN_API_KEY的变量,而不是把 Key 直接写在这里。这样config.toml即使被备份、打包、提交 Git,也不会泄露真实 Key。
wire_api = "responses"是整份配置里最关键的一行。新版 Codex 自定义 Provider 只支持responses,写chat或chat_completions都会报错。
requires_openai_auth = false表示认证走的是统一 Key 通道的 Key,而不是 OpenAI 的 Key。
model_context_window = 1048576对应 GLM-5.3-Flash 的 1M 上下文。model_reasoning_effort = "high"是 Codex 配置层面的取值,支持minimal / low / medium / high / xhigh,不要写max,那是模型 API 的参数,Codex 不一定识别。
3.4 设置环境变量
在终端里临时设置:
export TAOTOKEN_API_KEY="你的统一 Key"检查是否生效:
echo $TAOTOKEN_API_KEY能看到 Key 就说明当前终端已经加载。如果希望长期生效,编辑~/.bashrc:
nano ~/.bashrc加入一行:
export TAOTOKEN_API_KEY="你的统一 Key"保存后执行source ~/.bashrc。zsh 用户改~/.zshrc即可。
注意:如果你是通过 systemd、Docker、非交互式 SSH 或 CI 启动 Codex,要确保对应进程能继承这个环境变量,否则会报
environment variable TAOTOKEN_API_KEY is not set。
4. 验证请求:启动 Codex 并确认模型生效
4.1 启动 Codex
进入你的项目目录,例如:
cd /www/wwwroot/my-project codex正常情况下 Codex 会开始使用glm-5.3-flash,而不是默认的 OpenAI 模型。
4.2 用 /status 检查当前状态
进入 Codex 后执行:
/status重点看两处:model应该显示glm-5.3-flash,provider应该显示taotoken。如果这两项对上了,说明配置已经被读取。
4.3 发一次真实对话请求
先做一个只读测试,避免误改文件:
分析一下当前项目的技术栈,不要修改任何文件。如果它能读取文件、分析代码结构并返回结果,说明基础文本推理和文件读取已经通了。再试一个工具调用:
找到这个项目的启动入口,并告诉我对应的文件路径。这一步会触发 Codex 的搜索和 Shell 能力。如果它能执行grep、读取源码并返回路径,说明 Responses API 的流式和工具调用行为都正常。
4.4 用 curl 单独验证通道
如果你想确认是通道问题还是 Codex 配置问题,可以先用 curl 打一次 Responses 接口:
curl -s https://taotoken.net/api/v1/responses \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-5.3-flash", "input": "用一句话说明什么是 Responses API" }'如果返回里有模型输出内容,说明统一 Key 通道和模型标识都没问题,剩下的就是 Codex 配置层面的事。
5. 本篇常见错排查
5.1 Missing environment variable
报错类似:
environment variable TAOTOKEN_API_KEY is not set先检查echo $TAOTOKEN_API_KEY有没有输出。没有就重新export,或者写进~/.bashrc后source。如果是非交互式环境,确认进程能继承变量。
5.2 401 Unauthorized
优先查三件事:Key 是否正确、Key 是否失效、Key 和通道是否对应。不要看到账户里有一个 Key 就默认所有 Endpoint 都能调,先确认 Key 类型和权限范围。
5.3 404 Not Found
大概率是base_url写错了。Codex 需要的是 Responses API 入口,不要把/chat/completions的地址填进来。本篇用的是https://taotoken.net/api,Codex 会自己拼接 Responses 路径。
5.4 invalid value for wire_api
检查是不是写成了wire_api = "chat"或wire_api = "chat_completions"。新版 Codex 只认wire_api = "responses",改成这个值即可。
5.5 模型能聊天但 Codex 不能用
这种情况很常见。你用 curl 打/chat/completions能出结果,但 Codex 启动就报错。原因是模型能调用和接口能兼容 Codex 是两件事。Codex 自定义 Provider 依赖 Responses API,普通聊天接口即使通了也不代表 Codex 能用。
5.6 能回答但不会修改文件
如果 Codex 只返回“你可以这样修改……”却不真正操作文件,说明基础文本推理正常,但 Tool Calling 协议兼容有问题。Coding Agent 的流程是:用户 → Codex → 模型 → 决定调用工具 → Codex 执行 Shell / 文件操作 → 结果返回模型 → 继续推理。Function Calling 的稳定性比单轮回答质量更重要。
5.7 不要一上来开 danger-full-access
有些教程为了省事直接配sandbox_mode = "danger-full-access"和approval_policy = "never"。在生产服务器或重要项目里不建议这么做。稳妥的配置是approval_policy = "on-request"加sandbox_mode = "workspace-write",既能改当前工作区,敏感操作又受限制。
6. 长期编码与多模型切换建议
如果你只是偶尔测试 GLM-5.3-Flash,不想改默认模型,可以用 Profile。在config.toml里加:
[profiles.glm] model = "glm-5.3-flash" model_provider = "taotoken" model_context_window = 1048576 model_reasoning_effort = "high"平时直接codex走默认配置,想用 GLM 时执行:
codex --profile glm这样以后还能继续加 DeepSeek、Qwen 或其他兼容 Responses 的模型,统一交给 Codex 调度。Codex 和模型 Provider 是分离的,可以理解成 Codex 是 Agent Harness,模型是推理引擎,只要协议兼容就能自由切换。
如果你打算长期在 Linux 上做编码和 Agent 任务,建议把统一 Key 通道的额度规划好,走 Coding Plan 会更划算,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。模型对话验证可以在 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 里先试一轮,确认模型行为符合预期再接到 Codex。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,Claude Code 相关配置在 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后提醒一句:整份配置里最容易错的就是wire_api和base_url。把这两个搞对,Codex 接 GLM-5.3-Flash 其实十分钟就能跑通。