1. 为什么要在 Codex 里接 GLM 5.1,以及我踩过的坑
如果你最近在折腾 AI 编程助手,大概率听过两个名字:一个是 Codex,一个是 GLM 5.1。Codex 作为命令行里的编码代理,能读文件、改代码、跑命令,交互方式很接近一个坐在你旁边的结对程序员;而 GLM 5.1 是智谱这一代里代码能力比较能打的模型,尤其在中文注释理解、长上下文重构、函数级补全上表现稳定。把这两者接起来,等于给 Codex 换了一颗更懂中文工程语境的“大脑”。
但真正动手时,问题就来了。Codex 新版本默认走 Responses API,而 GLM 5.1 在当前这条链路上并不稳定,经常出现请求发出去了、模型也返回了,但 Codex 解析不了的情况。我一开始不信邪,硬用最新版 Codex 去连,结果就是终端里转圈半天,最后抛一个stream error或者干脆卡住。后来退回到 Codex 0.80.0,走 chat 协议,才把链路跑通。
另一个坑是 Key 的管理。GMI Cloud Inference Engine 本身提供 API Key,但如果你同时还在用别的模型通道,Key 散落在各个环境变量里,切换起来很烦。这次我的做法是:Codex 的config.toml里把 provider 指向 GMI Cloud Inference Engine 的base_url,但 Key 统一走 TaoToken 的通道来管理。这样模型侧是 GLM 5.1,凭证侧是统一入口,后面换模型、加通道都不用改 Codex 的配置文件。
这篇就按“能直接复制、能跑通、报错能查”的思路来写。你不需要先理解 Codex 的全部架构,只要跟着把config.toml填对、Key 设对、发一条测试消息,就能确认 GLM 5.1 在 Codex 里到底通没通。适合谁?适合已经在用 Codex CLI、想换 GLM 5.1 但被 Responses API 卡住的人;也适合刚接触 GMI Cloud Inference Engine、想找一个最小可跑通配置的人。
先说清楚一个前提:Codex 0.80.0 是这次验证过的版本,新版本如果官方后续修了 Responses API 的兼容性,你可以再试新版。但在这之前,按 0.80.0 来最稳。下面所有命令和配置,Windows、Linux、macOS 三端都覆盖,差异只在命令写法上。
2. TaoToken 前置:Key、通道与 GMI Cloud Inference Engine 的关系
在写配置之前,得先把“谁负责什么”理清楚,不然很容易把base_url和env_key填串。
GMI Cloud Inference Engine 是一个模型推理平台,底层跑在 H100/H200 这类卡上,集成了包括 GLM、DeepSeek、Qwen 等在内的多种模型。你要调 GLM 5.1,本质上就是向它的推理端点发一个 OpenAI 兼容格式的 chat 请求。它的base_url是https://api.gmi-serving.com/v1,模型 ID 是zai-org/GLM-5.1-FP8。这两个值是写死在 Codex 配置里的,不要改。
TaoToken 在这里的角色是统一凭证与通道管理。你可以把它理解成一个“Key 的集中收发室”:Codex 启动时读的是环境变量里的 Key,而这个 Key 由 TaoToken 侧统一签发和管理。这样做的好处是,你后面如果还要接别的模型或工具,不用每个地方都去 GMI 后台复制一遍 Key,也不用担心 Key 散落在多个 shell 配置文件里。
具体到操作上,你需要先拿到 TaoToken 的 API Key。入口在控制台的 API Keys 页面,路径是https://taotoken.net/api-keys。登录后创建一个 Key,复制出来,这个就是后面要填进环境变量的值。注意,这个 Key 只在创建时可见,刷新页面就看不到了,所以创建完立刻存到你的密码管理器里。
拿到 Key 之后,Codex 侧的配置逻辑是这样的:config.toml里声明一个 provider,名字叫gmicloud,它的base_url指向 GMI 的推理端点,env_key写GMI_API_KEY。然后你在 shell 里把GMI_API_KEY这个环境变量设成 TaoToken 给你的 Key。Codex 启动时就会读这个变量,带着它去请求 GMI 的端点。整条链路是:Codex → 读GMI_API_KEY→ 请求api.gmi-serving.com/v1→ 命中 GLM 5.1。
这里有个细节要注意:env_key的值是变量名,不是 Key 本身。很多人第一次配的时候会把真实 Key 直接写进config.toml的env_key里,结果 Codex 把它当成变量名去找,自然找不到。正确写法是env_key = "GMI_API_KEY",然后 Key 放在环境变量里。
另外,如果你之前已经配过别的 provider,比如 OpenAI 官方的,建议先把旧的model_provider注释掉,避免 Codex 启动时读错。config.toml是纯文本,改起来很快,但改完一定要保存再启动,不然读的还是旧配置。
TaoToken 的接入文档在https://taotoken.net/doc,里面有各语言和各工具的接入示例,遇到不确定的字段可以去对一下。模型对话的在线体验入口在https://taotoken.net/chat,如果你想先确认 GLM 5.1 本身能不能正常回话,可以先去那里发一条消息试试,排除模型侧的问题。
3. 可复制配置:config.toml 骨架与 API Key 设置
这一节是整篇的核心,所有内容都可以直接复制。我按“先建目录、再写配置、再设 Key、最后启动”的顺序来,你跟着做就行。
3.1 安装指定版本 Codex
先确认你装的是 0.80.0。如果你之前装过新版,先卸载再装指定版本:
npm uninstall -g @openai/codex npm install -g @openai/codex@0.80.0 codex --version最后一条命令应该输出0.80.0。如果还是别的版本,说明全局路径里有旧的二进制,检查一下npm root -g和 PATH。
3.2 创建配置目录并写入 config.toml
Windows 在 PowerShell 里执行:
New-Item -ItemType Directory -Force "$HOME\.codex" | Out-Null notepad "$HOME\.codex\config.toml"Linux / macOS 在终端里执行:
mkdir -p ~/.codex cd ~/.codex nano config.toml然后把下面这段完整粘贴进去,三端内容完全一致:
model = "zai-org/GLM-5.1-FP8" model_provider = "gmicloud" [windows] sandbox = "elevated" [model_providers.gmicloud] name = "GMIcloud OpenAI" base_url = "https://api.gmi-serving.com/v1" env_key = "GMI_API_KEY" wire_api = "chat"这里几个字段逐个说明。model是模型 ID,必须和 GMI 平台上的写法一致,zai-org/GLM-5.1-FP8是这次验证过的。model_provider指向下面定义的gmicloud。[windows]段里的sandbox = "elevated"是给 Windows 用的沙箱设置,Linux/macOS 可以保留也可以删掉,不影响。base_url是 GMI 的推理端点,wire_api = "chat"是关键,它让 Codex 走 chat 协议而不是 Responses API,这也是为什么要用 0.80.0 的原因。
保存时注意:Windows 记事本直接点保存;nano 里按Ctrl+O回车保存,再按Ctrl+X退出。建议用 VS Code 或 Notepad++ 编辑,避免编码或换行符问题导致 TOML 解析失败。
3.3 设置 API Key
把下面的<your-api-key>替换成你在 TaoToken 控制台创建的 Key。
Windows PowerShell:
$env:GMI_API_KEY = "<your-api-key>"Linux / macOS:
export GMI_API_KEY="<your-api-key>"这条命令只在当前窗口生效。如果你想让新开的窗口也生效,Windows 用:
setx GMI_API_KEY "<your-api-key>"Linux/macOS 可以把export GMI_API_KEY="<your-api-key>"写进~/.bashrc或~/.zshrc,然后source一下。
3.4 启动并确认目录信任
在终端里执行:
codex首次启动会出现Do you trust the contents of this directory?的提示,输入1回车,选择Yes, continue。这一步只是目录信任,不代表配置已经通了,真正的验证在下一步。
4. 验证请求:发一条最小对话确认 GLM 5.1 可用
配置写完,最怕的是“看起来都对,但就是不通”。所以验证要做得具体一点,不要只看 Codex 有没有启动。
进入 Codex 交互界面后,直接发一条最简单的指令:
请回复 OK如果配置正确,你会看到 GLM 5.1 返回类似OK的回复。这时候同时满足两个条件才算通:一是能正常对话、收到回复;二是界面里没有401、invalid api key这类密钥报错。
如果你想在终端里直接测,不进入交互界面,可以用 curl 打一发 GMI 的端点,确认 Key 和模型 ID 都对:
curl https://api.gmi-serving.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $GMI_API_KEY" \ -d '{ "model": "zai-org/GLM-5.1-FP8", "messages": [{"role": "user", "content": "请回复 OK"}], "max_tokens": 16 }'如果这条 curl 返回了正常的 JSON,里面有choices字段和内容,说明 Key、端点、模型 ID 三者都对。这时候再回到 Codex 里发消息,基本不会出问题。如果 curl 就报错,那问题在 Key 或端点上,跟 Codex 配置无关,先修这一层。
还有一种情况是 Codex 里发消息后一直转圈,最后超时。这通常是wire_api没设成chat,或者 Codex 版本不对。回去检查config.toml里有没有wire_api = "chat",以及codex --version是不是 0.80.0。
验证通过后,你可以试着让 Codex 做一件稍微真实的事,比如“读一下当前目录的 package.json,告诉我 dependencies 里有哪些包”。这一步能确认模型不只是能回 OK,而是真的能结合上下文干活。如果这一步也正常,那 GLM 5.1 在 Codex 里的接入就算完成了。
5. 常见报错排查:401、local proxy failed、reading choices
配置过程中最容易撞上的就是下面这几类报错。我按真实遇到的顺序列出来,每条都给排查路径。
401 / invalid api key
这是最常见的一类。原因通常是环境变量没设对,或者 Key 复制时带了空格。先在终端里执行echo $GMI_API_KEY(Windows 用echo $env:GMI_API_KEY),确认输出的 Key 和你复制的一致。如果为空,说明当前窗口没设上,重新执行 export 或 setx。如果 Key 末尾有换行或空格,重新复制一次。还有一种情况是 Key 被撤销了,去 TaoToken 控制台确认一下 Key 状态。
local proxy failed
这个报错通常出现在网络层,Codex 请求api.gmi-serving.com时连接没建立起来。先确认你的网络能正常访问这个域名,可以用curl -I https://api.gmi-serving.com/v1看返回头。如果 curl 也失败,那是网络环境问题,不是配置问题。如果 curl 正常但 Codex 报这个错,检查config.toml里base_url有没有多写或少写/v1,正确写法是https://api.gmi-serving.com/v1。
reading choices / stream error
这类报错说明请求发出去了,模型也返回了,但 Codex 解析响应时对不上格式。根因基本是wire_api没设成chat,或者 Codex 版本太新走了 Responses API。确认config.toml里有wire_api = "chat",并且codex --version是 0.80.0。如果两个都对还是报,把 Codex 完全退出再启动一次,有时候是旧进程缓存了配置。
OAuth 相关报错
如果你之前登录过 Codex 的官方账号,可能会残留 OAuth 凭证,导致它优先走官方通道而不是你配的 provider。解决办法是检查~/.codex目录下有没有auth.json之类的文件,如果有,先备份再移走,让 Codex 重新读config.toml。这一步做完再启动,通常就正常了。
配置改了但没生效
Codex 启动时读一次配置,运行中改config.toml不会热加载。改完配置后,先退出 Codex,再重新执行codex。另外,环境变量也是按窗口生效的,如果你新开了一个终端但没重新 export,Key 就是空的。
排查时建议按“先 curl 测端点、再 echo 测 Key、最后看 Codex 版本和 wire_api”的顺序来,一层一层排除,比一上来就改配置高效得多。
6. 接入之后:把 GLM 5.1 用顺手的几个实际建议
配置跑通只是第一步,真正影响体验的是后面怎么用。分享几个我实际用下来觉得有用的点。
第一,Codex 的会话是有上下文的,但上下文长度有限。如果你让它读一个大文件再改,最好先让它只读关键片段,而不是整个文件塞进去。GLM 5.1 在长上下文上表现不错,但 Codex 侧的窗口管理还是会截断,所以指令尽量聚焦。
第二,config.toml里可以保留多个 provider,用注释切换。比如你同时有 GMI 和其他通道,可以把两段[model_providers.xxx]都写上,改model_provider那一行来切换。这样不用每次重写配置。
第三,Key 的管理建议统一走 TaoToken。你可以在https://taotoken.net/api-keys里按用途建不同的 Key,比如一个给 Codex,一个给别的工具。这样某个 Key 泄露或要轮换时,不影响其他工具。接入文档在https://taotoken.net/doc,里面有字段说明和示例,遇到不确定的配置项可以去查。
第四,如果你后面要长期跑编码任务或者做 Agent 类的自动化,可以看一下 Coding Plan 的入口https://taotoken.net/coding-plan,它更适合持续性的编码场景,而不是一次性的对话验证。模型对话的在线入口在https://taotoken.net/chat,想快速试模型能力时可以用。
最后说一个实际感受:GLM 5.1 在 Codex 里最舒服的场景是“读代码 + 改代码 + 解释改动”这一套连招。你让它先读某个函数,再提一个修改需求,它给出的 diff 通常比较克制,不会大改特改。这一点在真实项目里比“能写多少代码”更重要。配置一次,后面就是日常使用了。