从写代码,到创作下一幕

探索 字节跳动 - 火山方舟 的 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/提供商凭据路径,请参阅网关兼容性和部署网关。有关这些托管设置,请参阅托管配置和配置参考。