Codex 如何从第三方 API 切换回自己的 OpenAI API Key:环境变量与 config.toml 排查记录
一、问题背景
之前我使用过第三方软件配置 Codex,因此 Codex 并不是直接使用我自己的 OpenAI API Key,而是通过第三方配置好的 API 服务运行。
后来我想切换回自己的 OpenAI 账号额度,于是在终端里配置了自己的环境变量:
export OPENAI_API_KEY="自己的 OpenAI API Key"
刚开始可以正常使用,但过了几天之后,Codex 又出现了类似下面的报错:
Missing environment variable: `OPENAI_API_KEY_0011AI`
这个报错说明:Codex 当前并没有读取标准的 OPENAI_API_KEY,而是在尝试读取第三方软件配置过的环境变量:
OPENAI_API_KEY_0011AI
因此问题不在于 OpenAI API Key 本身,而在于 Codex 的配置还没有彻底切换回官方 OpenAI provider。
二、先检查终端环境变量
首先检查当前终端中到底使用的是哪个 API Key。
不要直接 echo 完整 key,避免泄露。可以用下面的 Python 命令只显示前后几位:
python3 - <<'PY'
import os
for name in ["OPENAI_API_KEY", "OPENAI_API_KEY_0011AI"]:
v = os.getenv(name)
if not v:
print(f"{name}: NOT SET")
else:
print(f"{name}: {v[:12]}...{v[-6:]}")
PY
如果这里显示 OPENAI_API_KEY 是自己的 key,说明终端环境变量本身是正确的。
但是这还不够,因为 Codex 可能还有自己的配置文件。
三、检查 zsh 配置文件
macOS 默认一般使用 zsh,所以可以检查:
nano ~/.zshrc
在文件末尾可以加入:
# >>> OpenAI API Key >>>
export OPENAI_API_KEY="自己的 OpenAI API Key"
export OPENAI_API_KEY_0011AI="$OPENAI_API_KEY"
# <<< OpenAI API Key <<<
其中第二行:
export OPENAI_API_KEY_0011AI="$OPENAI_API_KEY"
是为了兼容某些旧配置。如果 Codex 或第三方工具仍然在读取 OPENAI_API_KEY_0011AI,这行可以让它暂时指向自己的 key。
保存后执行:
source ~/.zshrc
再次检查:
echo $OPENAI_API_KEY
echo $OPENAI_API_KEY_0011AI
如果都显示自己的 key,说明 shell 环境变量已经配置成功。
四、真正的问题:Codex 的 config.toml
后来我发现,虽然终端里的 key 是自己的,但 Codex 仍然在用以前第三方的配置。
这时需要检查 Codex 的配置文件:
cat ~/.codex/config.toml
OpenAI 官方文档说明,Codex 的用户级配置文件位于:
~/.codex/config.toml
并且 Codex 的本地状态通常存放在 ~/.codex 下,包括 config.toml、auth.json 等文件。
我当时看到的关键配置是:
model_provider = 'code-switch'
以及:
[model_providers.code-switch]
base_url = 'http://127.0.0.1:18100'
env_key = 'OPENAI_API_KEY_0011AI'
name = 'code-switch'
requires_openai_auth = false
wire_api = 'responses'
这几行说明 Codex 当前并没有直接请求 OpenAI 官方 API,而是在使用一个名为 code-switch 的自定义 provider。
其中:
base_url = 'http://127.0.0.1:18100'
表示请求会发到本地代理地址。
env_key = 'OPENAI_API_KEY_0011AI'
表示 Codex 会读取 OPENAI_API_KEY_0011AI 这个环境变量。
requires_openai_auth = false
说明它不是标准的 OpenAI 官方认证方式。
所以,即使终端里的 OPENAI_API_KEY 已经改成自己的,只要 Codex 的 model_provider 仍然是 code-switch,它还是会走以前第三方的配置。
五、备份配置文件
修改前建议先备份:
cp ~/.codex/config.toml ~/.codex/config.toml.bak
如果后面改错,可以恢复:
cp ~/.codex/config.toml.bak ~/.codex/config.toml
六、修改 Codex 配置
打开配置文件:
nano ~/.codex/config.toml
找到这一行:
model_provider = 'code-switch'
改成:
model_provider = 'openai'
然后找到并删除或注释掉这一整段:
[model_providers.code-switch]
base_url = 'http://127.0.0.1:18100'
env_key = 'OPENAI_API_KEY_0011AI'
name = 'code-switch'
requires_openai_auth = false
wire_api = 'responses'
修改后的文件顶部大概类似:
disable_response_storage = true
model = 'gpt-5.5'
model_provider = 'openai'
model_reasoning_effort = 'xhigh'
preferred_auth_method = 'apikey'
这里的核心是:
model_provider = 'openai'
也就是让 Codex 使用官方 OpenAI provider。
OpenAI 官方配置文档中也说明,Codex 可以通过 config.toml 设置模型、provider、认证方式等配置;CLI 和 IDE 扩展会共享这些配置。
七、重新加载环境变量
修改完成后保存退出:
Ctrl + O
Enter
Ctrl + X
然后执行:
source ~/.zshrc
再检查一次:
python3 - <<'PY'
import os
for name in ["OPENAI_API_KEY", "OPENAI_API_KEY_0011AI"]:
v = os.getenv(name)
if not v:
print(f"{name}: NOT SET")
else:
print(f"{name}: {v[:12]}...{v[-6:]}")
PY
八、重新登录 Codex
如果修改配置后 Codex 仍然异常,可以清理旧认证缓存。
先备份:
cp ~/.codex/auth.json ~/.codex/auth.json.bak 2>/dev/null
然后清空:
echo '{}' > ~/.codex/auth.json
重新登录:
codex login
或者使用 API Key 登录:
printenv OPENAI_API_KEY | codex login --with-api-key
OpenAI 官方 Codex CLI 文档中也提供了通过 codex login --with-api-key 从标准输入读取 API key 的方式。
如果使用 API key 登录,Codex 会按照 OpenAI API 的标准计费方式使用你的 OpenAI Platform 账号额度。
九、检查是否还有第三方残留配置
可以用下面的命令搜索残留内容:
grep -R "code-switch\|OPENAI_API_KEY_0011AI\|127.0.0.1:18100" ~/.codex ~/.zshrc ~/.zprofile ~/.config 2>/dev/null
如果仍然出现:
model_provider = 'code-switch'
或者:
base_url = 'http://127.0.0.1:18100'
说明还有地方在写入第三方配置。
还可以搜索项目目录下是否有 .env 文件覆盖环境变量:
ls -la | grep env
cat .env 2>/dev/null
cat .env.local 2>/dev/null
如果项目中有:
OPENAI_API_KEY=旧的 key
OPENAI_API_KEY_0011AI=旧的 key
需要删除或改成自己的 key。
十、最终排查思路总结
这次问题的本质是:终端环境变量和 Codex 内部配置不是同一层东西。
即使终端里:
echo $OPENAI_API_KEY
显示的是自己的 key,Codex 仍然可能因为 ~/.codex/config.toml 中的配置而继续使用第三方 provider。
排查顺序建议如下:
# 1. 检查终端环境变量
python3 - <<'PY'
import os
for name in ["OPENAI_API_KEY", "OPENAI_API_KEY_0011AI"]:
v = os.getenv(name)
print(name, "=", "NOT SET" if not v else v[:12] + "..." + v[-6:])
PY
# 2. 检查 Codex 配置
cat ~/.codex/config.toml
# 3. 搜索第三方配置残留
grep -R "code-switch\|OPENAI_API_KEY_0011AI\|127.0.0.1:18100" ~/.codex ~/.zshrc ~/.zprofile ~/.config 2>/dev/null
如果 config.toml 中出现类似下面的配置:
model_provider = 'code-switch'
[model_providers.code-switch]
base_url = 'http://127.0.0.1:18100'
env_key = 'OPENAI_API_KEY_0011AI'
就说明 Codex 仍然在使用第三方或本地代理配置。
正确做法是改为:
model_provider = 'openai'
preferred_auth_method = 'apikey'
并确保环境变量中存在:
export OPENAI_API_KEY="自己的 OpenAI API Key"
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)