本文所有命令和输出,都是 2026-09-28 在 Codex CLI 0.158.0(当前最新版)上实测的原样结果。网上 4 到 6 月写的教程有几处已经对不上新版了,文中会标出来。
先说 4 件老教程里没写的事
config.toml里写[profiles.xxx]的老写法,新版直接报错,要改成单独的配置文件(第 5 节)- GPT-6 系列(gpt-6-sol / gpt-6-astra / gpt-6-luna)已经进了 Codex 自带的模型目录,不用再手动补;DeepSeek 这类第三方模型还需要补(第 3 节)
- 接第三方服务商时,启动信息里的思考强度显示是
none,写代码建议手动调高(第 4 节) - 出错时会先重试 5 次,屏幕上一直刷
Reconnecting... 1/5,很容易被当成网络问题,真正的原因在 5/5 之后那一行(第 7 节)
1. 安装
Codex CLI 是一个 npm 包,装好 Node.js(16 以上)就行:
npm install -g @openai/codex codex --version输出:
codex-cli 0.158.0已经装过的,升级也是这一句,后面加@latest:
npm install -g @openai/codex@latest2. 国内怎么用:接一个 OpenAI 兼容的服务商
Codex 不一定要登录 ChatGPT 账号,它可以接任何支持 Responses 接口的 OpenAI 兼容服务商。国内用法就三步:拿到服务商的 API key 和接口地址 → 写进配置文件 → 用 key 登录。
2.1 配置文件在哪
- macOS / Linux:
~/.codex/config.toml - Windows:
C:\Users\你的用户名\.codex\config.toml
没有这个文件就新建一个。
2.2 写配置
本文以 wanapis 为例,换成你用的服务商地址即可:
model_provider = "wanapis" model = "gpt-6-sol" [model_providers.wanapis] name = "wanapis" wire_api = "responses" requires_openai_auth = true base_url = "https://api.wanapis.com/v1"每个字段是什么意思:
| 字段 | 说明 |
|---|---|
model_provider | 默认用哪个服务商,对应下面[model_providers.xxx]里的 xxx |
model | 默认模型,名字要和服务商那边一字不差 |
wire_api | 必须写"responses"。新版已经不支持"chat",写了配置直接加载失败 |
requires_openai_auth | 写true,Codex 才会带上你登录的 key |
base_url | 服务商的接口地址,要带/v1,但不要写到/v1/responses |
写成wire_api
"chat"的话,一启动就是这个报错:
Error loading config.toml: `wire_api = "chat"` is no longer supported. How to fix: set `wire_api = "responses"` in your provider config. in `model_providers.wanapis.wire_api`所以只提供 Chat Completions 接口、没有 Responses 接口的服务商,新版 Codex 接不了。
2.3 用 key 登录
printenv OPENAI_API_KEY | codex login --with-api-key--with-api-key从标准输入读 key,所以先export OPENAI_API_KEY=你的key,再用上面这句登录。成功会显示:
Successfully logged inWindows 在 PowerShell 里也一样,用管道把 key 传给codex login --with-api-key。
2.4 跑一下,看通没通
codex exec "只回复两个字母:ok"输出里看这几行:
OpenAI Codex v0.158.0 -------- workdir: /你的项目目录 model: gpt-6-sol provider: wanapis ... -------- user 只回复两个字母:ok codex ok tokens used 2,776provider是你配的服务商、最后回了ok,就通了。
如果当前目录不是 git 仓库,会报:
Not inside a trusted directory and --skip-git-repo-check was not specified.在项目目录里跑,或者加上--skip-git-repo-check。
3. 接 DeepSeek 等国产模型
同一个服务商下,换模型只要加-m:
codex exec -m deepseek-v4.1-flash "只回复两个字母:ok"能跑通,但会多一行警告:
warning: Model metadata for `deepseek-v4.1-flash` not found. Defaulting to fallback metadata; this can degrade performance and cause issues.意思是 Codex 自带的模型目录里没有这个模型,只能用一套默认参数。消掉它要自己补一份模型目录,三步:
第一步,导出 Codex 自带的目录:
codex debug models --bundled > ~/.codex/models.json0.158 自带 10 个模型,里面已经有 gpt-6-astra、gpt-6-sol、gpt-6-luna、gpt-5.6-sol,所以用 GPT-6 的不用做这一节。
第二步,打开~/.codex/models.json,在models数组里把gpt-6-sol那一整条复制一份,slug改成deepseek-v4.1-flash,display_name顺手改成DeepSeek V4.1 Flash。
第三步,在config.toml最上面加一行,写绝对路径:
model_catalog_json = "/Users/你的用户名/.codex/models.json"注意这一行要放在所有[xxx]小节的前面,放到[model_providers.wanapis]下面就成了那个小节的字段,不生效。
再跑-m deepseek-v4.1-flash,警告就没了。
4. 思考强度:第三方服务商默认是 none
接第三方服务商时,启动信息里有一行:
reasoning effort: none而 Codex 自带目录里,gpt-6-sol 的默认值是 medium,gpt-6-astra 是 low。写代码建议在config.toml里显式写上:
model_reasoning_effort = "high"重新启动就变成:
reasoning effort: high可选值有 low / medium / high / xhigh / max / ultra,越往后想得越久、越慢、token 越多。日常写功能 medium 或 high 就够了。
5. 多套配置来回切:profile 的新写法
老教程教的是在config.toml里加一段[profiles.ds],新版直接报错:
Error loading config.toml: --profile `ds` cannot be used while ~/.codex/config.toml contains legacy `profile = "ds"` or `[profiles.ds]` config; move those settings into ~/.codex/ds.config.toml and remove the legacy profile selector/table. See https://developers.openai.com/codex/config-advanced#profiles for more information.新写法:每个 profile 单独一个文件,放在~/.codex/下,文件名是名字.config.toml,里面只写要改的项。比如建一个用 DeepSeek 的:
echo 'model = "deepseek-v4.1-flash"' > ~/.codex/ds.config.toml codex -p ds启动信息里就是:
model: deepseek-v4.1-flash provider: wanapis记得把config.toml里老的[profiles.xxx]段删掉,留着的话,-p用到同名的 profile 就会报上面那个错。
我自己是这么分的:默认 gpt-6-sol 写功能、做 review;
codex -p ds用 DeepSeek 跑测试、查资料、改格式这种不费脑子的活,它出字快。
6. 同一个会话里换模型
不用开新会话,恢复会话时加-m就行:
codex resume --last -m gpt-6-sol非交互模式对应的是:
codex exec resume --last -m gpt-6-sol "接着刚才的,review 一下改动"上下文、改过的文件、跑过的命令都还在,只会多一行提醒:
warning: This session was recorded with model `deepseek-v4.1-flash` but is resuming with `gpt-6-sol`. Consider switching back to `deepseek-v4.1-flash` as it may affect Codex performance.这只是提醒,不影响干活。我实测:先用 DeepSeek 跑一轮,让它记住「蓝莓」这个词;再resume --last -m gpt-6-sol问它刚才记住了什么,Sol 答出了「蓝莓」。上下文确实带过去了。
我最常用它做交叉审查:一个模型改完代码,换另一个模型带着完整上下文来审。同一个模型审自己写的代码,基本都觉得没问题。有一次 DeepSeek 修完一个价格解析的 bug,切到 Sol 一审,挑出了
"¥1,,299"、"¥12,34"这种会被悄悄吞掉的输入。
7. 报错速查(0.158 实测原文)
先说一个行为:出错时 Codex 会先自动重试 5 次,屏幕上一直刷:
ERROR: Reconnecting... 1/5 ERROR: Reconnecting... 2/5 ERROR: Reconnecting... 3/5很多人看到这个就以为是网络问题,去换梯子。其实要等到 5/5 之后,下面那一行才是真正的原因:
| 5/5 之后那一行 | 原因 | 怎么改 |
|---|---|---|
unexpected status 401 Unauthorized: Invalid token | key 错了,或者没登录上 | 重新codex login --with-api-key |
unexpected status 503 Service Unavailable: ... 无可用渠道(distributor) | 模型名写错了,或者这个服务商没有这个模型 | 去服务商的模型列表核对名字,一个字母都不能差 |
unexpected status 404 Not Found: Invalid URL (POST /v1/responses/responses) | base_url写到了/v1/responses | 改成只到/v1 |
unexpected status 404 Not Found,请求地址是/responses | base_url漏了/v1 | 在末尾补上/v1 |
base_url漏/v1这一条,不同服务商报的不一样:有的直接说「少了 /v1」,有的会返回一个网页,Codex 那边就只剩一句stream disconnected before completion,和网络不稳长得一模一样,最难往地址上想。
其它几个常见的:
| 报错 | 原因 | 怎么改 |
|---|---|---|
Error loading config.toml: --profile ... legacy ... [profiles.xx] | 老的 profile 写法 | 见第 5 节 |
Error loading config.toml: wire_api = "chat" is no longer supported | 新版不支持 chat | 改成wire_api = "responses" |
warning: Model metadata for ... not found | 模型不在 Codex 自带目录里 | 能用;想消掉见第 3 节 |
warning: This session was recorded with model ... | 会话中途换了模型 | 只是提醒,可以忽略 |
Not inside a trusted directory and --skip-git-repo-check was not specified. | 当前目录不是 git 仓库 | 到项目目录里跑,或加--skip-git-repo-check |
卡在Reading additional input from stdin...不动 | 在脚本或 CI 里跑codex exec,它在等标准输入 | 命令末尾加< /dev/null |
8. 一份完整的配置
~/.codex/config.toml:
model_catalog_json = "/Users/你的用户名/.codex/models.json" model_provider = "wanapis" model = "gpt-6-sol" model_reasoning_effort = "high" [model_providers.wanapis] name = "wanapis" wire_api = "responses" requires_openai_auth = true base_url = "https://api.wanapis.com/v1"~/.codex/ds.config.toml:
model = "deepseek-v4.1-flash"日常用法:
codex:默认 gpt-6-solcodex -p ds:用 DeepSeekcodex resume --last -m 模型名:会话中途换模型,上下文不丢
以上基于 Codex CLI 0.158.0,2026-09-28 实测。Codex 更新很快,遇到和本文对不上的地方,先codex --version看一下版本。