Este guia usa provisionamento gerenciado por webhooks com o Worker de referência da Cloudflare.
Veja os exemplos de provisionamento gerenciado pela aplicação e gerenciado por webhooks no OpenAI Cookbook.
Como funciona
- Sua aplicação cria uma sessão da API de Agentes e envia dados de entrada.
- A OpenAI envia webhooks de sessão para um Worker na sua conta da Cloudflare.
- O Worker inicia ou reconecta um Container específico da sessão que executa
codex exec-server. O executor estabelece uma conexão de saída com a OpenAI para que o agente possa executar comandos e trabalhar com arquivos.
Sua aplicação usa a API de Agentes; o Worker de referência gerencia o provisionamento do sandbox. Consulte Ciclo de vida do sandbox para entender o comportamento de conexão e recuperação.
Antes de começar
Você precisa de uma conta da Cloudflare com acesso ao Containers. Use OPENAI_API_KEY para as requisições da aplicação. Defina OPENAI_EXECUTOR_API_KEY como uma chave de ambiente e passe apenas essa chave para o Container como CODEX_API_KEY.
Crie um agente e salve seu ID como OPENAI_AGENT_ID. Use o mesmo ID de agente na sua aplicação e no Worker de referência.
Implante o Worker de referência
O Worker de referência da Cloudflare inclui o manipulador de webhooks, a imagem do Container, a configuração de implantação e o endpoint de limpeza.
Gere um segredo para o endpoint de limpeza e salve-o como EXECUTOR_CLIENT_SECRET:
openssl rand -hex 32
Implante o Worker na sua conta da Cloudflare:
Implantar na Cloudflare
Insira estes valores quando solicitado:
| Variável | Valor |
|---|---|
OPENAI_API_KEY | Chave usada pelo Worker para obter o estado da sessão |
OPENAI_EXECUTOR_API_KEY | Chave de ambiente passada ao executor como CODEX_API_KEY |
OPENAI_AGENT_ID | ID do agente atendido por este Worker |
OPENAI_WEBHOOK_SECRET | pending-webhook-registration para a primeira implantação |
EXECUTOR_CLIENT_SECRET | Segredo gerado para limpeza |
Salve a URL do Worker implantado como WORKER_URL.
Registre o webhook
Siga as instruções de configuração de webhooks para registrar $WORKER_URL/webhook no seu projeto da OpenAI. Habilite os eventos listados pela integração de referência da Cloudflare:
agent.session.createdagent.session.action_requiredagent.session.in_progressagent.session.idleagent.session.failed
Substitua OPENAI_WEBHOOK_SECRET pelo segredo de assinatura retornado pela OpenAI e implante a nova versão do Worker. Verifique sua configuração. Estes exemplos usam clientes HTTP padrão para chamar o Worker:
# Replace the illustrative IDs and URLs below with your own resource values.
import urllib.request
url = "https://worker.example.com".rstrip("/") + "/health"
request = urllib.request.Request(url, method="GET")
with urllib.request.urlopen(request) as response:
print(response.read().decode())A resposta deve conter tanto "configured": true quanto "webhook_configured": true.
Uma ação obrigatória do tipo environment_connection é o sinal para reconectar um executor offline. Um evento de inatividade, por si só, não indica que é seguro encerrar o executor; consulte comportamento do ciclo de vida.
Execute uma sessão
Siga as etapas da sessão com a OPENAI_API_KEY da sua aplicação e o mesmo OPENAI_AGENT_ID configurado no Worker. Crie uma sessão auto-hospedada e peça ao agente para gravar e ler o arquivo /workspace/hello.txt.
O Worker recebe os webhooks da sessão e conecta o executor do sandbox. Sua aplicação transmite a saída do agente em streaming pela API de Agentes.
Salve o ID da sessão como SESSION_ID. Para continuar a conversa, abra o fluxo de eventos da sessão antes de enviar novas entradas. Se o executor estiver offline, a nova entrada solicita uma conexão com o ambiente e aguarda até que o Worker reconecte o executor. A reconexão, por si só, não restaura arquivos de um Container anterior.
Execute sua aplicação em um Worker
A aplicação básica em um Worker da Cloudflare usa o SDK para TypeScript @openai/agents-api para criar sessões, enviar entradas iniciais e subsequentes e limpar recursos. Seu endpoint POST /demo executa o fluxo de trabalho.
Esta aplicação também usa provisionamento gerenciado por webhooks. Executar sua aplicação em um Worker não significa que ela precise provisionar o sandbox diretamente.
Limpeza
Quando a aplicação não precisar mais do sandbox, chame o endpoint de limpeza autenticado do Worker de referência:
# Replace the illustrative IDs and URLs below with your own resource values.
import os
from urllib.parse import quote
import urllib.request
url = (
"https://worker.example.com".rstrip("/")
+ "/executors/"
+ quote("sess_123", safe="")
)
request = urllib.request.Request(
url,
method="DELETE",
headers={"Authorization": "Bearer " + os.environ["EXECUTOR_CLIENT_SECRET"]},
)
with urllib.request.urlopen(request) as response:
print(response.read().decode())Exclua a sessão da API de Agentes separadamente. A exclusão da sessão não emite um webhook, portanto, execute as duas operações para fazer a limpeza imediata. Recupere os arquivos de que precisa antes de liberar o Container.
Avançado: provisionamento gerenciado pela aplicação
Para controlar diretamente o provisionamento do sandbox, use o Cloudflare Sandbox SDK com o ciclo de vida gerenciado pela aplicação e as instruções de conexão do executor. Use um controlador de provisionamento por sessão.
Referências
- Leia Use o Cloudflare Containers com a API de Agentes da OpenAI para saber mais sobre configuração, comportamento do ciclo de vida, snapshots e personalização de imagens.
- Leia a documentação do Cloudflare Sandbox.
- Leia a referência do SDK para TypeScript do Cloudflare Sandbox.