如何讓 Codex App 連接公司架設的 LLM
從 Caddy 閘道安裝、遠端 Ollama API 金鑰,到 Codex 的 config.toml 組態設定,一次整理成可直接照做的流程。
前言
OpenAI 提供免費下載的 Codex 系列代理軟體(Agent Software),其中分成 文字命令列版 Codex CLI ,及桌機應用版 Codex App,或稱 Codex Desktop。 兩者皆可代理操作電腦,自動完成眾多工作。 Codex 預設使用 OpenAI 收費的大語言模型(LLM),但允許接到外部架設的語言模型。
由於外部語言模型眾多,最穩定的做法不是直接讓 Codex 連接遠端服務,而是先在本機安裝一個中介閘道(gateway)。此時,建議用免費的 Caddy 閘道軟體,將本機作為中繼站 (relay),把 Codex 送給 http://localhost:11434 的請求,對外轉送到一台支援 /v1/responses 請求的遠端 Ollama 伺服器。下面範例的 IP 與主機名稱已匿名化,請自行替換成公司實際值。
如果自己電腦夠強, Ollama 服務已經在本機 localhost:11434 運行且無需 API 金鑰,則請直接跳過 Caddy 相關步驟,設定讓 Codex 直接連本機即可。但如果打算用公司遠端 Ollama 服務,則 Caddy 可以將本地請求轉發到遠地服務端點,並在轉發時自動加入遠端的 API 金鑰。
整體思路很簡單:
- 若本機未安裝 Ollama 服務,先安裝 Caddy 中介閘道,設定 Caddyfile 組態檔,於本機 11434 埠號,轉送請求到遠端 Ollama。
- 準備 Caddy 啟動腳本,方便啟動閘道。
- 安裝 Codex App,設定
~/.codex/config.toml組態檔,設定本機閘道位置與採用模型。
1a. 安裝 Caddy 閘道服務 🔧
Caddy 支援 Windows、macOS 與 Linux 三種平台。以下分別說明:
Windows
使用 Chocolatey 安裝,或手動下載官方安裝檔:
# 使用 Chocolatey(需管理員權限)
> choco install caddy
# 或手動下載:https://caddyserver.com/download?platform=windows&plugins=reverse_proxy
macOS
使用 Homebrew 安裝:
> brew install caddy
Linux(Ubuntu / Debian)
使用官方腳本一鍵安裝:含更新套件,安裝倉庫金鑰,從倉庫下載 caddy
> sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
> curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
> curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
> sudo apt update
> sudo apt install caddy
安裝完成後,所有平台都可以用以下指令確認版本:
> caddy version
1b. 建立 Caddy 組態檔
假設公司 Ollama 伺服器提供 OpenAI 相容服務,並且需要 API 金鑰。則可建立如下 Caddyfile 組態檔:其中,reverse_proxy 標示多對一的反向代理區塊。
http://localhost:11434 {
reverse_proxy <REMOTE_IP>:443 {
header_up Host <REMOTE_HOST>
header_up Authorization "Bearer YOUR_API_KEY"
header_up X-Forwarded-Proto https
transport http {
tls
tls_insecure_skip_verify
}
}
}
localhost:11434 代表 Codex 只要連接本機埠號即可,真正的遠端網址與認證都由 Caddy 處理。
其中,REMOTE_IP 填入公司 Ollama 伺服器 IP,REMOTE_HOST 填入公司 Ollama 伺服器域名。若反向代理或TLS握手出問題,header_up Host <REMOTE_HOST> 亦可不寫死,改成 header_up Host {upstream_hostport}。若伺服器使用自簽憑證,加入 tls_insecure_skip_verify 也能避免 TLS 驗證失敗。
2. 準備 Caddy 啟動腳本 🚀
如下以 macOS 及 Linux 平台常見的 bash 腳本語言為例。此腳本利用 caddy 指令,依照 caddyfile 格式,讀入 ./Caddyfile 組態檔,執行閘道轉送工作。至於Windows 用戶,則可直接在 PowerShell 執行 caddy start --config ./Caddyfile,以自動在背景執行。
#!/usr/bin/env bash
set -euo pipefail
nohup caddy run --config ./Caddyfile --adapter caddyfile > /tmp/caddy.log 2>&1 &
autosave.json 或舊設定干擾,記得先清掉,否則 Caddy 可能載入到舊的 host match,導致看起來像「有啟動但沒回應」。
3a. 安裝 Codex App
安裝 Codex App 後,先確認是否正常啟動。
然後,目標是讓 Codex 透過組態檔,使用本地閘道,選用語言模型。
3b. 編輯 ~/.codex/config.toml 組態檔 🧩
如下設定範例把模型提供者指向本機的 Caddy 閘道,並讓 Codex 走 /v1 這種 OpenAI 相容 API 格式。
model = "qwen3.6:35b-a3b-q8_0"
model_provider = "my-caddy-gateway"
[model_providers.my-caddy-gateway]
name = "Custom Gateway"
base_url = "http://localhost:11434/v1"
api_key = "not-empty"
wire_api = "responses"
openai_compatibility_fallback = true
model
指定要使用的模型名稱,必須跟遠端 Ollama 服務支援的模型一致。
base_url
指向本機的 Caddy 閘道位置,而不是直接連接遠端伺服器。
wire_api
如果遠端 Ollama 服務支援 /v1/responses,這個設定通常最合適。
4. 驗證連線 ✅
完成設定後,可以先用 curl 網頁請求工具,測試本機 11434 埠號是否通到遠端 LLM:
curl -s http://localhost:11434/v1/models
curl -s http://localhost:11434/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer not-empty" \
-d '{
"model": "qwen3.6:35b-a3b-q8_0",
"input": "Say hello in one word",
"stream": false
}'
如果看到回應裡面有 Via: 1.1 Caddy,而且回傳的模型名稱正確,就代表本機中繼服務 與遠端 Ollama 已經接起來了。
5. 啟動 Codex App
最後一步就是啟動 Codex App,選用剛剛設定好的組態檔:
codex app ~/Documents/Codex
剛才的啟動腳本,也可以在啟動 Caddy 閘道後,再開啟 Codex App,帶上初始工作目錄。只要 http://localhost:11434/v1 能正常回應,Codex 就會透過這個埠號 11434,使用遠端模型。
常見問題
Q:為什麼 Codex 明明有連上,但回應看起來像空的?
A:有些模型會把內容放在 reasoning 或其他欄位,而不是 content。另外如果 max_tokens 太小,也可能只拿到半截輸出。
Q:如果 Caddy 起來了但沒有轉發怎麼辦?
A:先檢查 autosave.json 是否有舊設定,再確認 Host、TLS 與 金鑰正確否。
注意事項
Ollama 實作的 /v1/responses 介面僅支援無狀態(non-stateful)請求。以下欄位雖然可以傳入以維持相容性,但 Ollama 伺服器並不會實際使用這些欄位,來維護對話狀態:
previous_response_id— 不會用於追蹤歷史回應。conversation— 不會用於維護伺服器端的對話上下文。
這表示每次請求都是獨立的。如果需要多輪對話,必須在客戶端(如 Codex App)自行管理對話歷史,並將完整的訊息列表傳給 Ollama。
結語
把 Codex App 接到本地 LLM 的核心,其實就是「閘道」建置,與「組態」設定。Caddy 閘道負責把流量轉到遠端 Ollama,Codex 只要知道本機的 base_url 閘道位置即可。這樣做的好處是設定清楚、可除錯,也比較容易切換不同後台及語言模型。
沒有留言:
張貼留言