Codex 环境变量怎么配:macOS、Linux、Windows 与排错

用 AI Code With 接入 Codex 不需要设 API Key 环境变量:在全局 config.toml 里用 experimental_bearer_token 写 Key 即可。本文给出完整配置、auth.json 备选写法,macOS、Linux、Windows 代理等变量设置,以及环境变量和 config.toml 冲突时谁生效的实测结果。

5 分钟阅读
Codex 环境变量怎么配:macOS、Linux、Windows 与排错

先说结论:用 AI Code With 接入 Codex,不需要设置任何 API Key 环境变量。 把地址和 Key 一起写进全局配置文件 ~/.codex/config.toml,换终端、换编辑器、重启电脑都能直接用。

本文的接入写法和冲突结论,都在 Codex CLI 0.162.1 上用独立的配置目录实际跑过。

环境变量在 Codex 里仍然有用,比如代理、公司证书、CI 里注入 Key。这篇先给推荐写法,再讲哪些环境变量值得设、在 macOS、Linux、Windows 上怎么设,最后是环境变量和 config.toml 冲突时谁生效的实测结果。配置文件的完整字段见《Codex config.toml 配置指南》。

推荐写法:全局 config.toml 里直接写 Key

第一步,先在控制台创建一个 Key:

创建 API Key →

第二步,打开(没有就新建)~/.codex/config.toml,写入下面这段完整配置,把 sk-你的Key 换成刚创建的 Key:

toml
model_provider = "aicodewith"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "sk-你的Key"

几个字段的含义:

  • model_provider:让 Codex 默认使用下面这段 aicodewith 配置。
  • base_url:AI Code With 给 Codex 用的专用地址,末尾是 /chatgpt/v1,不要改成别的路径。
  • wire_api = "responses":Codex 走 Responses 接口。
  • experimental_bearer_token:Codex 每次请求都会把它放进 Authorization 请求头,不需要再设任何环境变量。

第三步,在终端里运行 codex,能正常对话就说明接通了。

实测:用独立配置目录写入上面这段配置后运行 codex exec,Codex 发出的每个请求都带着 Authorization: Bearer 加 config.toml 里的那个 Key。

这个文件在 macOS、Linux 上的位置是 ~/.codex/config.toml;Windows 上是 %USERPROFILE%\.codex\config.toml。Key 是明文保存的,不要把这个文件提交到 Git 仓库,也不要同步到公开的 dotfiles。更多接入细节见《Codex 接入 AICodeWith》。

备选写法:Key 放进 auth.json

如果你是照着 AI Code With 控制台里的 Codex 教程配的,会看到另一种写法:Key 放在 ~/.codex/auth.json,config.toml 里不写 Key。这样写是为了和控制台教程保持一致,两种写法选一种即可。

config.toml 这样写,注意多了一行 requires_openai_auth = true,并且没有 experimental_bearer_token:

toml
model_provider = "aicodewith"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
requires_openai_auth = true

然后在同一个目录下的 ~/.codex/auth.json 里写 Key:

json
{
  "OPENAI_API_KEY": "sk-你的Key"
}
requires_openai_auth = true 这一行不能省。实测中,只放 auth.json、不加这一行时,Codex 发出的请求根本不带 Authorization 头,服务端直接返回 401;加上之后,请求头里带上了 auth.json 里的 Key。

哪些环境变量真正有用

变量作用什么时候需要
HTTPS_PROXY / HTTP_PROXY让 Codex 的网络请求走代理本机访问外网需要代理时
NO_PROXY指定不走代理的地址公司内网地址需要直连时
CODEX_CA_CERTIFICATE指定公司根证书(PEM)公司网络有 TLS 代理、报证书错误时
SSL_CERT_FILE通用证书路径,没设 CODEX_CA_CERTIFICATE 时使用同上
CODEX_HOMECodex 配置和本地数据的目录,默认 ~/.codex一般不需要改
关于 CODEX_HOME:接入 AI Code With 不需要改它,直接用默认的 ~/.codex 即可。改了它,Codex 就会去另一个目录找 config.toml,你写在 ~/.codex 里的配置反而不生效。

API Key 不在这张表里:用本站时,Key 写在 config.toml 或 auth.json 里就够了。

macOS:设置代理等变量

macOS 默认 shell 是 zsh。只对当前终端生效的写法:

bash
export HTTPS_PROXY="http://127.0.0.1:7890"
codex

想每个新终端都自动生效,把这一行写进 ~/.zshrc,再让当前终端重新加载:

bash
echo 'export HTTPS_PROXY="http://127.0.0.1:7890"' >> ~/.zshrc
source ~/.zshrc

不想要了就清除当前终端里的值;写进 ~/.zshrc 的那一行也要手动删掉,否则新终端还会加载:

bash
unset HTTPS_PROXY
代理地址和端口以你本机代理软件显示的为准,127.0.0.1:7890 只是示例。

Linux:设置代理等变量

临时设置和清除的命令和 macOS 一样。大多数发行版默认用 bash,永久保存写进 ~/.bashrc:

bash
echo 'export HTTPS_PROXY="http://127.0.0.1:7890"' >> ~/.bashrc
source ~/.bashrc

如果你通过 systemd、cron 运行 codex exec,这些场景不一定读取 ~/.bashrc,需要在服务或脚本里显式设置变量。好在接入配置写在 config.toml 里,这类后台任务也能直接读到,不用额外传 Key。

Windows:设置代理等变量

只对当前 PowerShell 窗口生效:

powershell
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
codex

永久保存到当前用户,已经打开的窗口不会生效,要关掉 PowerShell、VS Code 等程序后重新打开:

powershell
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', 'http://127.0.0.1:7890', 'User')

清除时,第一条只清当前窗口,第二条删除永久保存的值:

powershell
Remove-Item Env:HTTPS_PROXY
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', $null, 'User')

环境变量和 config.toml 冲突时谁生效

很多人以前设过 OPENAI_API_KEY 或 OPENAI_BASE_URL,改成 config.toml 写法后担心互相打架。我们用独立配置目录把两者同时设上,看 Codex 实际发出的请求:

同时存在实际生效的
环境变量 OPENAI_API_KEY + config.toml 里的 experimental_bearer_tokenconfig.toml 里的 Key,环境变量被忽略
环境变量 OPENAI_BASE_URL + config.toml 里的 base_urlconfig.toml 里的地址,环境变量被忽略
auth.json 里的 Key,但没写 requires_openai_auth = true都不生效,请求不带 Key

结论:model_provider 指向 aicodewith 时,以 config.toml 为准。旧的 OPENAI_API_KEY、OPENAI_BASE_URL 留着不会干扰,但为了以后排查省事,建议清掉。

排错

报 401:请在请求中提供有效的 API Key

实测中,用了 auth.json 却没在 config.toml 里加 requires_openai_auth = true,Codex 输出的原文是:

text
ERROR: unexpected status 401 Unauthorized: {"error":"请在请求中提供有效的 API Key。"}, url: https://api.aicodewith.ai/chatgpt/v1/responses

Key 填错或已经失效,也会是同一条报错。按顺序检查:

  1. 用 experimental_bearer_token 写法的,确认引号里是完整的 Key,前后没有空格。
  2. 用 auth.json 写法的,确认 config.toml 里有 requires_openai_auth = true。
  3. 确认 model_provider = "aicodewith" 写在文件最上面,不在任何 [ ] 小节下面。
  4. Key 被删除或失效的,去控制台重新创建一个。

更多 401 的情况见《Codex 401 Unauthorized 怎么解决》。

改完不生效:重开终端

环境变量只在启动时读取一次。在一个终端里 export,或者改了 ~/.zshrc、~/.bashrc、Windows 用户变量,已经打开的终端和编辑器拿不到新值。处理办法:

  • 关掉当前终端,开一个新的再运行 codex;或者在当前终端执行 source ~/.zshrc(bash 用 ~/.bashrc)。
  • 在 VS Code 等编辑器里用 Codex 的,要完全退出编辑器再打开,只关内置终端不够。
  • config.toml 改完后,重新启动 codex 即可生效。

别让 Codex 运行的命令读到你的敏感变量

Codex 执行命令时会把环境变量传给子进程。如果终端里放着别的服务的密钥,可以在 config.toml 里加上:

toml
[shell_environment_policy]
ignore_default_excludes = false

这样名字里带 KEY、SECRET、TOKEN 的变量会被过滤,不会交给 Codex 运行的命令。

常见问题

用 AI Code With 还要设置 OPENAI_API_KEY 环境变量吗?

不用。Key 写在 config.toml 的 experimental_bearer_token 里,或者放进 auth.json 并加 requires_openai_auth = true,二选一即可。实测中,model_provider 指向 aicodewith 时,环境变量 OPENAI_API_KEY 会被忽略。

experimental_bearer_token 和 auth.json 选哪个?

推荐 experimental_bearer_token,地址和 Key 都在一个文件里,少一个出错点。如果你已经按控制台教程用了 auth.json,也可以继续用,记得 config.toml 里要有 requires_openai_auth = true。

设了 OPENAI_BASE_URL 会把请求发到别的地址吗?

不会。实测中,config.toml 里写了 base_url 时,环境变量 OPENAI_BASE_URL 被忽略,请求仍然发到 config.toml 里的地址。

需要改 CODEX_HOME 吗?

不需要。默认的 ~/.codex 就是 Codex 读取 config.toml 和 auth.json 的位置,按本文写进去即可。

公司网络报证书错误怎么办?

设置 CODEX_CA_CERTIFICATE 指向公司提供的 PEM 根证书,再启动 codex;Windows 上用 $env:CODEX_CA_CERTIFICATE = '路径'。

换了 Key 为什么还在用旧的?

先看 config.toml 或 auth.json 里是不是已经换成新 Key,再重开终端或编辑器重新启动 codex。

免费注册 AI Code With,给 Codex 配一个专用 Key →

相关阅读

资料来源