Esta guía usa el aprovisionamiento mediante webhooks con el Worker de referencia de Cloudflare.
Consulta los ejemplos de aprovisionamiento desde la aplicación y aprovisionamiento mediante webhooks en el OpenAI Cookbook.
Cómo funciona
- Tu aplicación crea una sesión de la API de agentes y envía datos de entrada.
- OpenAI envía los webhooks de la sesión a un Worker en tu cuenta de Cloudflare.
- El Worker inicia o vuelve a conectar un contenedor dedicado a la sesión que ejecuta
codex exec-server. El ejecutor establece una conexión saliente con OpenAI para que el agente pueda ejecutar comandos y trabajar con archivos.
Tu aplicación usa la API de agentes y el Worker de referencia se encarga de aprovisionar el sandbox. Consulta el ciclo de vida del sandbox para ver cómo funcionan la conexión y la recuperación.
Antes de empezar
Necesitas una cuenta de Cloudflare con acceso a Containers. Usa OPENAI_API_KEY para las solicitudes de la aplicación. Configura OPENAI_EXECUTOR_API_KEY con una clave de entorno y pasa solo esa clave al contenedor como CODEX_API_KEY.
Crea un agente y guarda su ID como OPENAI_AGENT_ID. Usa el mismo ID de agente en tu aplicación y en el Worker de referencia.
Despliega el Worker de referencia
El Worker de referencia de Cloudflare incluye el controlador de webhooks, la imagen del contenedor, la configuración de despliegue y el punto de acceso de limpieza.
Genera un secreto para el punto de acceso de limpieza y guárdalo como EXECUTOR_CLIENT_SECRET:
openssl rand -hex 32
Despliega el Worker en tu cuenta de Cloudflare:
Desplegar en Cloudflare
Ingresa estos valores cuando se te soliciten:
| Variable | Valor |
|---|---|
OPENAI_API_KEY |
Clave que usa el Worker para consultar el estado de la sesión |
OPENAI_EXECUTOR_API_KEY |
Clave de entorno que se pasa al ejecutor como CODEX_API_KEY |
OPENAI_AGENT_ID |
ID del agente cuyas sesiones gestiona este Worker |
OPENAI_WEBHOOK_SECRET |
pending-webhook-registration para el primer despliegue |
EXECUTOR_CLIENT_SECRET |
Secreto generado para la limpieza |
Guarda la URL del Worker desplegado como WORKER_URL.
Registra el webhook
Sigue los pasos para configurar un webhook y registra $WORKER_URL/webhook en tu proyecto de OpenAI. Habilita los eventos que se indican en la integración de referencia de Cloudflare:
agent.session.createdagent.session.action_requiredagent.session.in_progressagent.session.idleagent.session.failed
Reemplaza el valor de OPENAI_WEBHOOK_SECRET por el secreto de firma que devuelve OpenAI y despliega la nueva versión del Worker. Verifica su configuración. Estos ejemplos usan clientes HTTP estándar para enviar solicitudes al 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())La respuesta debe incluir tanto "configured": true como "webhook_configured": true.
Una acción requerida de tipo environment_connection indica que se debe volver a conectar un ejecutor que está sin conexión. Un evento de inactividad por sí solo no indica que sea seguro apagar el ejecutor. Consulta el comportamiento durante el ciclo de vida.
Ejecuta una sesión
Sigue los pasos para ejecutar una sesión con la clave OPENAI_API_KEY de tu aplicación y el mismo OPENAI_AGENT_ID que configuraste en el Worker. Crea una sesión autoalojada y pídele al agente que escriba en /workspace/hello.txt y luego lea el archivo.
El Worker recibe los webhooks de la sesión y conecta el ejecutor del sandbox. Tu aplicación transmite la salida del agente a través de la API de agentes a medida que se genera.
Guarda el ID de la sesión como SESSION_ID. Para continuar la conversación, abre el flujo de eventos de la sesión antes de enviar más datos de entrada. Si el ejecutor está sin conexión, al enviar nuevos datos de entrada se solicita una conexión con el entorno y se espera a que el Worker vuelva a conectar el ejecutor. La reconexión por sí sola no restaura los archivos de un contenedor anterior.
Ejecuta tu aplicación en un Worker
La aplicación básica para Workers de Cloudflare usa el SDK de TypeScript @openai/agents-api para crear sesiones, enviar datos de entrada al inicio y durante la sesión, y liberar recursos. Su punto de acceso POST /demo ejecuta el flujo de trabajo.
Esta aplicación también usa el aprovisionamiento mediante webhooks. Aunque tu aplicación se ejecute en un Worker, no es necesario que aprovisione el sandbox directamente.
Limpieza
Cuando la aplicación ya no necesite el sandbox, llama al punto de acceso de limpieza del Worker de referencia, que requiere autenticación:
# 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())Elimina la sesión de la API de agentes por separado. Al eliminar la sesión no se envía ningún webhook, así que realiza ambas operaciones para liberar los recursos de inmediato. Recupera los archivos que necesites antes de liberar el contenedor.
Uso avanzado: aprovisionamiento desde la aplicación
Para controlar directamente el aprovisionamiento del sandbox, usa el SDK de Cloudflare Sandbox con el ciclo de vida gestionado desde la aplicación y sigue las instrucciones para conectar el ejecutor. Usa un solo controlador de aprovisionamiento por sesión.
Referencias
- Consulta Cómo usar Cloudflare Containers con la API de agentes de OpenAI para obtener información sobre la configuración, el comportamiento durante el ciclo de vida, las instantáneas y la personalización de imágenes.
- Consulta la documentación de Cloudflare Sandbox.
- Consulta la referencia del SDK de TypeScript de Cloudflare Sandbox.