從寫程式碼,到創作下一幕

探索 字節跳動 - 火山方舟 的 AI 程式設計與影片創作活動。

Agent Plan & Coding Plan

一站體驗多款熱門模型,為 AI 程式設計與智能體開發提供更多選擇。新使用者可聯絡(微信: goo_lvyouyou)免費體驗 9.9 agent plan。

Seedance 2.5

讓創意,躍然成片。探索 30 秒影片、多模態參考與局部編輯,把腦海中的畫面變成下一支作品。

繁體中文

通過閘道器使用 ChatGPT 登入

為什麼選擇這種方式

如果你已有模型閘道器,並通過 API Platform 使用 Codex,可以在切換到使用 ChatGPT 登入 時保留閘道器。這樣既能使用符合條件的 ChatGPT 工作區功能和控制項(例如語音模式),又能保留模型閘道器。有關登入方式的比較,請參閱功能可用性。

如何設定

現有的基於命令的身份驗證將閘道器金鑰放在 Authorization 中。使用 ChatGPT 登入時,該請求頭承載的是 ChatGPT 令牌。請選擇提供獨立閘道器憑據的方式:

  • 方案 A: 通過一個小型啟動輔助程式複用憑據命令。在單獨的請求頭中傳送同一個閘道器金鑰。
  • 方案 B: 讓 Codex 通過原生 OAuth 取得閘道器憑據。

在託管設定中,將所選供應商的設定新增到工作區的雲端託管 requirements.toml 中。這些要求在使用者使用 ChatGPT 登入後生效,不會限制其他登入方式。閘道器相容 Codex 的基礎 URL 必須將 /models 和 /responses 代理到 https://chatgpt.com/backend-api/codex。

方案 A:通過輔助程式複用憑據命令

保留現有的憑據命令。一個小型輔助程式會在啟動 Codex 前執行該命令,並將其輸出匯出為 GATEWAY_KEY。這與當前使用的閘道器金鑰相同,只是改用另一個請求頭傳遞。

例如,現有的 API/供應商設定可能包含:

# config.toml — existing API/provider setup
model_provider = "enterprise_gateway"

[model_providers.enterprise_gateway]
name = "Enterprise gateway"
base_url = "https://gateway.example.com/v1"
requires_openai_auth = false

[model_providers.enterprise_gateway.auth]
command = "/usr/local/bin/fetch-gateway-token"

要使用 ChatGPT 登入,請將該供應商替換為以下託管設定。移除其中的 auth 設定塊:基於命令的供應商身份驗證不能與 requires_openai_auth = true 結合使用。

# requirements.toml
model_provider = "enterprise_gateway"

[model_providers.enterprise_gateway]
name = "Enterprise gateway"
base_url = "https://gateway.example.com/backend-api/codex" # Keep the gateway route.
requires_openai_auth = true # Use the ChatGPT credential for OpenAI.
env_http_headers = { "X-Gateway-Key" = "GATEWAY_KEY" } # Send the same gateway key separately.

為 CLI 使用啟動輔助程式,例如下面的 shell 函式。將命令和參數替換為現有 auth 設定塊中的命令和參數:

codex_with_gateway() (
  set -eu
  GATEWAY_KEY=$(/usr/local/bin/fetch-gateway-token)
  test -n "$GATEWAY_KEY"
  export GATEWAY_KEY
  exec codex "$@"
)

codex_with_gateway

設定閘道器,使其接受 X-Gateway-Key、驗證金鑰,並在將請求轉發到後端前移除該請求頭。客戶端發出的請求現在攜帶:

Authorization: Bearer <ChatGPT token>
ChatGPT-Account-ID: <workspace ID, when available>
X-Gateway-Key: <same gateway key returned by your command>

輔助程式在每次啟動時執行一次。Codex 不會重新執行它,也不會重新整理此請求頭;金鑰過期後,需要取得新金鑰並重新啟動。對於桌面應用,啟動整合必須向應用程序提供 GATEWAY_KEY。如果希望由 Codex 管理閘道器登入和令牌續期,請選擇方案 B。

圖中簡化了請求頭和啟動輔助程式。請使用 Authorization: Bearer <ChatGPT token>,並保留上述範例中輔助程式對空金鑰的檢查。如果 GATEWAY_KEY 為空,Codex 會省略 X-Gateway-Key。

方案 A:通過啟動輔助程式複用憑據命令。同一個閘道器金鑰從 Authorization 移至 X-Gateway-Key,而 Authorization 由 ChatGPT 登入提供。
方案 A 執行流程:閘道器驗證並移除 X-Gateway-Key,然後將 ChatGPT Authorization 和任何帳戶 ID 原樣轉發到 Codex 後端。

方案 B:使用原生閘道器 OAuth

此方案通過 Codex 管理的閘道器登入替代命令和啟動輔助程式。閘道器必須具備 OAuth 授權伺服器。註冊一個支援帶 PKCE 的授權碼流程的公共客戶端,然後替換範例中的 URL 和客戶端 ID。移除現有供應商的 auth 設定塊,並使用以下託管設定。

# requirements.toml
model_provider = "enterprise_gateway"

[model_providers.enterprise_gateway]
name = "Enterprise gateway"
base_url = "https://gateway.example.com/backend-api/codex" # Keep the gateway route.
requires_openai_auth = true # Use the ChatGPT credential for OpenAI.

[model_providers.enterprise_gateway.gateway_oauth] # Add gateway OAuth.
authorization_url = "https://login.example.com/oauth/authorize"
token_url = "https://login.example.com/oauth/token"
client_id = "YOUR_PUBLIC_CLIENT_ID"
delivery = { kind = "cookie", name = "auth-openid" } # Add gateway auth as a cookie.
# redirect_port = 43127

Codex 預設使用空閒的環回埠。如果身份供應商要求固定的重定向 URI,請設定 redirect_port,並為此範例註冊 http://127.0.0.1:43127/callback。

方案 B:將基於 API key 的閘道器身份驗證替換為原生閘道器 OAuth,並與 ChatGPT 登入配合使用。
方案 B 執行流程:閘道器處理其 OAuth cookie,並將 ChatGPT 憑據轉發到 Codex 後端。

新增路由請求頭(可選)

無論使用哪種方案,Codex 都可以向閘道器傳送自定義路由請求頭。例如,在雲端託管的 requirements.toml 中,為同一個 enterprise_gateway 供應商新增以下請求頭:

[model_providers.enterprise_gateway.http_headers]
x-portkey-config = "<gateway-routing-config-id>"
x-portkey-metadata = '{"tool_id":"codex"}'

Codex 在模型供應商請求中傳送這些請求頭,閘道器則應用路由規則。對於從 Codex 程序環境中讀取的值,請使用 env_http_headers。測試一個請求,確認閘道器收到這兩個請求頭並選擇了預期路由。有關更多請求頭選項,請參閱自定義模型供應商。

分別處理各自的憑據

Codex 會傳送 ChatGPT 的 Authorization 請求頭、任何 ChatGPT-Account-ID 請求頭,以及閘道器請求頭或 cookie。讓閘道器驗證並移除自己的憑據,然後原樣轉發 ChatGPT 請求頭。

注意事項與限制

  • 使用支援託管模型供應商要求的 Codex 版本;對於方案 B,還需支援原生閘道器 OAuth。舊版本可能會忽略或拒絕不支援的欄位。
  • 此路由涵蓋通過所選模型供應商發出的請求。ChatGPT 登入、MCP、外掛和其他應用連線可能使用不同的路徑。
  • 閘道器可以看到請求資料和兩種憑據。請在日誌中對其進行脫敏;切勿將閘道器憑據轉發到上游。
  • 原生閘道器 OAuth 需要瀏覽器和可存取的環回回呼。它不支援裝置程式碼回退方式。如果沒有重新整理令牌,使用者必須在存取令牌過期後重新通過瀏覽器登入。
  • 通用的 OpenAI /v1/models 響應並不足夠:Codex 需要一個 models 陣列。請測試模型列表、一個提示詞,以及部署中使用的每項功能。

通過閘道器使用語音

此設定為 Codex 模型供應商請求設定路由,並不會啟用 ChatGPT 語音。對於 WebRTC 語音會話,通話建立和邊帶連線使用不同的路由。~/.codex/config.toml 中的實驗性 experimental_realtime_webrtc_call_base_url 設定僅更改用於建立通話的 HTTP 基礎 URL,不會重定向邊帶連線、媒體或普通模型請求。在使用此覆蓋設定前,請與 OpenAI 協作驗證通話目標地址和憑據處理方式,然後測試一次完整的語音會話。

有關 API/供應商憑據路徑,請參閱閘道器相容性和部署閘道器。有關這些託管設定,請參閱託管設定和設定參考。