LinSoap

LinSoap

Null
github
x

在Codex配置使用智谱GLM4.5

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

安装#

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

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 示例

{
  "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 文件如下。

{
  "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 命令:

export OPENAI_API_KEY='你的密钥'

在 Windows 系统中,你可以使用 set 命令:

set OPENAI_API_KEY='你的密钥'

适用范围

  • 临时测试和调试:当你只想在当前终端会话中快速测试一个脚本或命令,不希望永久保存密钥时,这种方法最方便。
  • 安全性考虑:如果你的设备是公用的,或者你不希望密钥被长期保存在文件中,这种方式可以避免密钥泄露。

2. .bashrc.zshrc#

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

如何操作

用文本编辑器(如 nanovim)打开 .bashrc.zshrc 文件,然后在文件末尾添加一行:

export OPENAI_API_KEY='你的密钥'

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

适用范围

  • 个人开发环境:如果你是唯一的设备使用者,并且希望在所有终端会话中都能使用这个密钥,那么这种方式非常方便。
  • 长期使用:当你需要频繁使用依赖此密钥的工具时,设置一次就可以永久生效,省去了每次手动输入的麻烦。

3. .env 文件#

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

如何操作

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

OPENAI_API_KEY='你的密钥'

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

适用范围

  • 项目特定配置:当你的密钥只用于特定项目时,将 .env 文件放在项目目录中,可以保持配置的独立性,避免与其他项目或全局环境变量冲突。
  • 团队协作.env 文件可以作为模板,方便团队成员配置自己的密钥。为了安全,通常会把 .env 文件添加到 .gitignore 中,防止密钥被上传到 Git 仓库。
  • 框架和库支持:许多现代开发框架和库(如 Next.js、React、Python 的 dotenv 库)都原生支持读取 .env 文件。

最佳实践

  • 如果你只是想快速测试一下,用当前会话的方式最简单。
  • 如果你经常在个人电脑上使用 Codex,并且不想每次都设置,那么将密钥添加到 .bashrc 最合适。
  • 如果你正在进行一个具体的项目开发,并且希望配置与项目绑定,推荐使用 .env 文件,这是一种更安全、更通用的做法。
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。