一、问题背景

之前我使用过第三方软件配置 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.tomlauth.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"
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐