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 文件,這是一種更安全、更通用的做法。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。