在Codex配置使用智谱GLM4.5

最近使用 AI 的频率大大提升了，Copilot 每次在月中额度就用完了，Gemini Cli 每天更是把 Pro 额度全部用完。用完后发现自己离开了 AI 变得巨菜。开始考虑给自己配一个三公主，所以选择了 Codex，但是副副手又不舍得花 20 刀开会员，最后选择了智谱 20 一个月的 Coding 会员（这是真便宜...)，虽然说 Codex 是支持自定义 provider 的，但是还是存在一些坑，网上资料也不多，简单记录一下。

安装

安装非常简单，基本上一个指令就能完成。

Copy
npm i -g @openai/codex 或
brew install codex 或
nix-shell -p codex

config.json 配置

codex 的默认配置文件夹在～/.codex/ 中，根据操作系统不同，家目录也会有所不同（可能就 windows 不太一样吧), 这个文件夹中包含 config.json 文件，用于 codex 配置。
首先在 0.1.2504 这个版本，很多教程配置 config.toml 无法生效，只能使用 json 或是 yaml，yaml 给出的官方示例不多，所以最好还是用 json，
以下是官方给出的 json 示例

Copy
{
"model": "o4-mini",
"provider": "openai",
"providers": {
"openai": {
"name": "OpenAI",
"baseURL": "https://api.openai.com/v1",
"envKey": "OPENAI_API_KEY"
},
"azure": {
"name": "AzureOpenAI",
"baseURL": "https://YOUR_PROJECT_NAME.openai.azure.com/openai",
"envKey": "AZURE_OPENAI_API_KEY"
},
"openrouter": {
"name": "OpenRouter",
"baseURL": "https://openrouter.ai/api/v1",
"envKey": "OPENROUTER_API_KEY"
},
"gemini": {
"name": "Gemini",
"baseURL": "https://generativelanguage.googleapis.com/v1beta/openai",
"envKey": "GEMINI_API_KEY"
},
"ollama": {
"name": "Ollama",
"baseURL": "http://localhost:11434/v1",
"envKey": "OLLAMA_API_KEY"
},
"mistral": {
"name": "Mistral",
"baseURL": "https://api.mistral.ai/v1",
"envKey": "MISTRAL_API_KEY"
},
"deepseek": {
"name": "DeepSeek",
"baseURL": "https://api.deepseek.com",
"envKey": "DEEPSEEK_API_KEY"
},
"xai": {
"name": "xAI",
"baseURL": "https://api.x.ai/v1",
"envKey": "XAI_API_KEY"
},
"groq": {
"name": "Groq",
"baseURL": "https://api.groq.com/openai/v1",
"envKey": "GROQ_API_KEY"
},
"arceeai": {
"name": "ArceeAI",
"baseURL": "https://conductor.arcee.ai/v1",
"envKey": "ARCEEAI_API_KEY"
}
},
"history": {
"maxSize": 1000,
"saveHistory": true,
"sensitivePatterns": []
}
}

其中没有我们所需要的智谱 provider，我们可以移除原有的 provirder，或者直接新增一个 provider。最后的 config.json 文件如下。

Copy
{
"model": "glm-4.5",
"approvalMode": "suggest",
"fullAutoErrorMode": "ask-user",
"notify": true,
"provider": "zhipuai",
"providers": {
"zhipuai": {
"name": "zhipuai",
"baseURL": "https://open.bigmodel.cn/api/coding/paas/v4",
"envKey": "OPENAI_API_KEY"
}
},
"history": {
"maxSize": 1000,
"saveHistory": true,
"sensitivePatterns": []
}
}

其中需要注意，provider 中不能使用 openai，要严格使用 zhipuai，name 也是严格使用 zhipuai，否则会出现 404 或是 401。其中的envKey的意思是，读取环境什么环境变量的名称。并不是在这真的要求你输入 API。如果你配置了 ZHIPUAI_API_KEY，则会在环境变量中读取 ZHIPUAI_API_KEY 作为该 provider 的 api，这种设计是为了切换不同供应商的不同模型。我们只使用智谱的模型，所以保持 OPENAI_API_KEY 也可以。

项目中使用

由于 codex 启动时读取的是环境变量，所以只要使用 echo $OPENAI_API_KEY 时能正确输出密钥就能正确使用，codex 也会读取.env 中的变量，所以配置的方式有很多。以下介绍主流的方法。

1. 当前会话 (Current Session)

这种方法只在当前的命令行会话中生效，当你关闭终端或开启新的终端会话时，这个变量就会失效。

如何操作

在 Linux 或 macOS 系统中，你可以使用 export 命令：

Copy
export OPENAI_API_KEY='你的密钥'

在 Windows 系统中，你可以使用 set 命令：

Copy
set OPENAI_API_KEY='你的密钥'

适用范围

临时测试和调试：当你只想在当前终端会话中快速测试一个脚本或命令，不希望永久保存密钥时，这种方法最方便。

安全性考虑：如果你的设备是公用的，或者你不希望密钥被长期保存在文件中，这种方式可以避免密钥泄露。

2. .bashrc 或 .zshrc

.bashrc 是 Bash shell 的配置文件，.zshrc 是 Zsh shell 的配置文件。这些文件在每次打开新的终端会话时都会被自动执行。将密钥添加到这些文件中，可以确保每次启动终端都能自动加载这个环境变量。

如何操作

用文本编辑器（如 nano 或 vim）打开 .bashrc 或 .zshrc 文件，然后在文件末尾添加一行：

Copy
export OPENAI_API_KEY='你的密钥'

保存并退出后，运行 source ~/.bashrc 或 source ~/.zshrc 来立即生效，或者直接关闭并重新打开终端。

适用范围

个人开发环境：如果你是唯一的设备使用者，并且希望在所有终端会话中都能使用这个密钥，那么这种方式非常方便。

长期使用：当你需要频繁使用依赖此密钥的工具时，设置一次就可以永久生效，省去了每次手动输入的麻烦。

3. .env 文件

.env 文件是一种通用格式，用于存储项目的环境变量。许多工具和框架（包括 Codex）都支持从 .env 文件中自动加载环境变量。这种方式通常与项目目录绑定。

如何操作

在你的项目根目录下创建一个名为 .env 的文件，然后添加以下内容：

Copy
OPENAI_API_KEY='你的密钥'

请注意，= 两边通常没有空格。

适用范围

项目特定配置：当你的密钥只用于特定项目时，将 .env 文件放在项目目录中，可以保持配置的独立性，避免与其他项目或全局环境变量冲突。

团队协作：.env 文件可以作为模板，方便团队成员配置自己的密钥。为了安全，通常会把 .env 文件添加到 .gitignore 中，防止密钥被上传到 Git 仓库。

框架和库支持：许多现代开发框架和库（如 Next.js、React、Python 的 dotenv 库）都原生支持读取 .env 文件。

最佳实践：

如果你只是想快速测试一下，用当前会话的方式最简单。

如果你经常在个人电脑上使用 Codex，并且不想每次都设置，那么将密钥添加到 .bashrc 最合适。

如果你正在进行一个具体的项目开发，并且希望配置与项目绑定，推荐使用 .env 文件，这是一种更安全、更通用的做法。