最近使用 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 的配置文件。這些文件在每次打開新的終端會話時都會被自動執行。將密鑰添加到這些文件中,可以確保每次啟動終端都能自動加載這個環境變量。
如何操作
用文本編輯器(如 nano
或 vim
)打開 .bashrc
或 .zshrc
文件,然後在文件末尾添加一行:
export OPENAI_API_KEY='你的密鑰'
保存並退出後,運行 source ~/.bashrc
或 source ~/.zshrc
來立即生效,或者直接關閉並重新打開終端。
適用範圍
- 個人開發環境:如果你是唯一的設備使用者,並且希望在所有終端會話中都能使用這個密鑰,那麼這種方式非常方便。
- 長期使用:當你需要頻繁使用依賴此密鑰的工具時,設置一次就可以永久生效,省去了每次手動輸入的麻煩。
3. .env
文件#
.env
文件是一種通用格式,用於存儲項目的環境變量。許多工具和框架(包括 Codex)都支持從 .env
文件中自動加載環境變量。這種方式通常與項目目錄綁定。
如何操作
在你的項目根目錄下創建一個名為 .env
的文件,然後添加以下內容:
OPENAI_API_KEY='你的密鑰'
請注意,=
兩邊通常沒有空格。
適用範圍
- 項目特定配置:當你的密鑰只用於特定項目時,將
.env
文件放在項目目錄中,可以保持配置的獨立性,避免與其他項目或全局環境變量衝突。 - 團隊協作:
.env
文件可以作為模板,方便團隊成員配置自己的密鑰。為了安全,通常會把.env
文件添加到.gitignore
中,防止密鑰被上傳到 Git 倉庫。 - 框架和庫支持:許多現代開發框架和庫(如 Next.js、React、Python 的
dotenv
庫)都原生支持讀取.env
文件。
最佳實踐:
- 如果你只是想快速測試一下,用當前會話的方式最簡單。
- 如果你經常在個人電腦上使用 Codex,並且不想每次都設置,那麼將密鑰添加到
.bashrc
最合適。 - 如果你正在進行一個具體的項目開發,並且希望配置與項目綁定,推薦使用
.env
文件,這是一種更安全、更通用的做法。