Iniciar sessão com o ChatGPT através de um gateway
Porquê utilizar esta opção
Se já tem um gateway de modelos e utiliza o Codex com a API Platform, pode manter o seu gateway ao passar para Iniciar sessão com o ChatGPT. Isto permite-lhe aceder às funcionalidades e aos controlos elegíveis do espaço de trabalho do ChatGPT (por exemplo, o modo de voz), mantendo o seu gateway de modelos. Compare os métodos de início de sessão em Disponibilidade das funcionalidades.
Como configurar
A autenticação baseada em comandos existente coloca a chave do gateway em Authorization. Com o início de sessão com o ChatGPT, esse cabeçalho transporta o token do ChatGPT. Escolha como fornecer a credencial separada do gateway:
- Opção A: Reutilize o seu comando de credenciais através de um pequeno programa auxiliar de arranque. Envie a mesma chave do gateway num cabeçalho separado.
- Opção B: Deixe o Codex obter a credencial do gateway através de OAuth nativo.
Adicione a configuração do fornecedor selecionado ao requirements.toml do seu espaço de trabalho gerido na nuvem, em Configuração gerida. Estes requisitos aplicam-se após os utilizadores iniciarem sessão com o ChatGPT; não restringem outros métodos de início de sessão. O URL base do gateway compatível com o Codex tem de encaminhar por proxy /models e /responses para https://chatgpt.com/backend-api/codex.
Opção A: Reutilizar o comando de credenciais com um programa auxiliar
Mantenha o seu comando de credenciais existente. Um pequeno programa auxiliar executa-o antes de iniciar o Codex e exporta o respetivo resultado como GATEWAY_KEY. Trata-se da mesma chave do gateway que utiliza atualmente; apenas muda o cabeçalho através do qual é enviada.
Por exemplo, a configuração de API/fornecedor existente pode conter:
# 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"Para iniciar sessão com o ChatGPT, substitua esse fornecedor pela seguinte configuração gerida. Remova o respetivo bloco auth: a autenticação do fornecedor baseada em comandos não pode ser combinada com 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.Utilize um programa auxiliar de arranque, como esta função de shell para a CLI. Substitua o comando e os argumentos pelos do seu bloco auth existente:
codex_with_gateway() (
set -eu
GATEWAY_KEY=$(/usr/local/bin/fetch-gateway-token)
test -n "$GATEWAY_KEY"
export GATEWAY_KEY
exec codex "$@"
)
codex_with_gatewayConfigure o seu gateway para aceitar X-Gateway-Key, validar a chave e remover esse cabeçalho antes de encaminhar o pedido para o backend. O pedido do cliente passa a transportar:
Authorization: Bearer <ChatGPT token>
ChatGPT-Account-ID: <workspace ID, when available>
X-Gateway-Key: <same gateway key returned by your command>O programa auxiliar é executado uma vez por arranque. O Codex não volta a executá-lo nem atualiza este cabeçalho; quando a chave expirar, obtenha uma nova chave e reinicie. Na aplicação de computador, a sua integração de arranque tem de fornecer GATEWAY_KEY ao processo da aplicação. Escolha a Opção B se pretender que o Codex gira o início de sessão no gateway e a renovação dos tokens.
Os diagramas abreviam os cabeçalhos dos pedidos e o programa auxiliar de arranque. Utilize Authorization: Bearer <ChatGPT token> e mantenha a verificação de chave vazia do programa auxiliar apresentada nos exemplos acima. Se GATEWAY_KEY estiver vazio, o Codex omite X-Gateway-Key.


Opção B: Utilizar OAuth nativo do gateway
Utilize esta opção para substituir o comando e o programa auxiliar de arranque pelo início de sessão no gateway gerido pelo Codex. O seu gateway tem de ter um servidor de autorização OAuth. Registe um cliente público que suporte código de autorização com PKCE e substitua os URLs e o ID de cliente do exemplo. Remova o bloco auth do fornecedor existente e utilize a seguinte configuração gerida.
# 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 = 43127Por predefinição, o Codex utiliza uma porta de loopback livre. Se o seu fornecedor de identidade exigir um URI de redirecionamento fixo, defina redirect_port e registe http://127.0.0.1:43127/callback para este exemplo.


Adicionar cabeçalhos de encaminhamento (opcional)
Com qualquer uma das opções, o Codex pode enviar cabeçalhos de encaminhamento personalizados para o gateway. Por exemplo, adicione estes cabeçalhos ao mesmo fornecedor enterprise_gateway no seu requirements.toml gerido na nuvem:
[model_providers.enterprise_gateway.http_headers]
x-portkey-config = "<gateway-routing-config-id>"
x-portkey-metadata = '{"tool_id":"codex"}'O Codex envia os cabeçalhos nos pedidos ao fornecedor de modelos; o gateway aplica as regras de encaminhamento. Utilize env_http_headers para valores lidos do ambiente do processo do Codex. Teste um pedido para confirmar que o gateway recebe ambos os cabeçalhos e seleciona a rota pretendida. Consulte Fornecedores de modelos personalizados para obter mais opções de cabeçalhos.
Mantenha as credenciais nos respetivos percursos
O Codex envia o cabeçalho Authorization do ChatGPT, qualquer cabeçalho ChatGPT-Account-ID e o cabeçalho ou cookie do gateway. Configure o gateway para verificar e remover a sua credencial e, em seguida, encaminhar os cabeçalhos do ChatGPT sem alterações.
Ressalvas e limitações
- Utilize uma compilação do Codex que suporte requisitos geridos de fornecedores de modelos e, para a Opção B, OAuth nativo do gateway. As compilações mais antigas podem ignorar ou rejeitar campos não suportados.
- Esta rota abrange os pedidos através do fornecedor de modelos selecionado. O início de sessão com o ChatGPT, o MCP, os plugins e outras ligações de aplicações podem utilizar percursos diferentes.
- O seu gateway pode ver os dados dos pedidos e ambas as credenciais. Oculte-os nos registos; nunca encaminhe credenciais do gateway para os serviços a montante.
- O OAuth nativo do gateway necessita de um navegador e de um callback de loopback acessível. Não dispõe de uma alternativa por código de dispositivo. Sem um token de atualização, os utilizadores têm de repetir o início de sessão no navegador quando o token de acesso expirar.
- Uma resposta genérica
/v1/modelsda OpenAI é insuficiente: o Codex espera um arraymodels. Teste a lista de modelos, um prompt e cada funcionalidade utilizada pela sua implementação.
Voz através de um gateway
Esta configuração encaminha os pedidos do Codex ao fornecedor de modelos; não ativa o ChatGPT Voice. Nas sessões de voz WebRTC, a criação de chamadas e a ligação de banda lateral utilizam rotas separadas. A definição experimental experimental_realtime_webrtc_call_base_url em ~/.codex/config.toml altera apenas o URL base HTTP para a criação de chamadas. Não redireciona a ligação de banda lateral, os conteúdos multimédia nem os pedidos normais aos modelos. Trabalhe com a OpenAI para verificar o destino das chamadas e o tratamento das credenciais antes de utilizar esta substituição e, em seguida, teste uma sessão de voz completa.
Para o percurso com credenciais de API/fornecedor, consulte Compatibilidade do gateway e Implementar um gateway. Para estas definições geridas, consulte Configuração gerida e a Referência de configuração.