For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航

Cloudflare

将 Cloudflare Containers 连接到 Agents API 会话。

本指南通过 Cloudflare 的 Worker 参考实现,采用 由 Webhook 管理的预配方式

请参阅 OpenAI Cookbook 中的由应用管理由 Webhook 管理的示例。

工作原理

  1. 您的应用创建 Agents API 会话并发送输入。
  2. OpenAI 向您 Cloudflare 账户中的 Worker 发送会话 Webhook。
  3. Worker 启动或重新连接专用于该会话且运行 codex exec-server 的 Container。执行器向 OpenAI 发起出站连接,使智能体能够运行命令和处理文件。

您的应用使用 Agents API;Worker 参考实现负责管理沙盒预配。有关连接和恢复行为,请参阅沙盒生命周期

开始之前

您需要一个具有 Containers 访问权限的 Cloudflare 账户。使用 OPENAI_API_KEY 发送应用请求。将 OPENAI_EXECUTOR_API_KEY 设置为环境密钥,并仅将该密钥以 CODEX_API_KEY 的形式传入 Container。

创建智能体,并将其 ID 保存为 OPENAI_AGENT_ID。在您的应用和 Worker 参考实现中使用相同的智能体 ID。

部署 Worker 参考实现

Cloudflare 的 Worker 参考实现包含 Webhook 处理程序、Container 镜像、部署配置和清理端点。

为清理端点生成一个密钥,并将其保存为 EXECUTOR_CLIENT_SECRET

openssl rand -hex 32

在您的 Cloudflare 账户中部署 Worker:

部署到 Cloudflare

根据提示输入以下值:

变量
OPENAI_API_KEYWorker 用于获取会话状态的密钥
OPENAI_EXECUTOR_API_KEYCODEX_API_KEY 的形式传递给执行器的环境密钥
OPENAI_AGENT_ID此 Worker 所服务的智能体的 ID
OPENAI_WEBHOOK_SECRET首次部署时使用 pending-webhook-registration
EXECUTOR_CLIENT_SECRET为清理操作生成的密钥

将已部署的 Worker URL 保存为 WORKER_URL

注册 Webhook

按照 Webhook 设置说明,在您的 OpenAI 项目中注册 $WORKER_URL/webhook。启用 Cloudflare 参考集成中列出的事件:

  • agent.session.created
  • agent.session.action_required
  • agent.session.in_progress
  • agent.session.idle
  • agent.session.failed

OPENAI_WEBHOOK_SECRET 替换为 OpenAI 返回的签名密钥,然后部署新版本的 Worker。检查其配置。以下示例使用标准 HTTP 客户端调用 Worker:

检查 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())

响应应同时包含 "configured": true"webhook_configured": true

environment_connection 必需操作是重新连接离线执行器的信号。仅凭空闲事件不足以判断可以安全关闭;请参阅生命周期行为

运行会话

使用您应用的 OPENAI_API_KEY,以及与 Worker 中配置相同的 OPENAI_AGENT_ID,按照会话步骤操作。创建自托管会话,并让智能体写入和读取 /workspace/hello.txt

Worker 接收会话 Webhook 并连接沙盒执行器。您的应用通过 Agents API 以流式方式传输智能体的输出。

将会话 ID 保存为 SESSION_ID。要继续对话,请先打开会话事件流,再发送后续输入。如果执行器处于离线状态,新输入会请求建立环境连接,并等待 Worker 重新连接执行器。重新连接本身不会恢复之前 Container 中的文件。

在 Worker 中运行您的应用

Cloudflare 的基础 Worker 应用使用 @openai/agents-api TypeScript SDK 创建会话、发送初始和后续输入,以及清理资源。其 POST /demo 端点用于运行该工作流程。

此应用也采用由 Webhook 管理的预配方式。在 Worker 中运行您的应用,并不意味着应用必须直接预配沙盒。

清理

当应用不再需要沙盒时,调用 Worker 参考实现中需要身份验证的清理端点:

清理 Worker 沙盒
# 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())

另行删除 Agents API 会话。删除会话不会触发 Webhook,因此要立即完成清理,请执行这两项操作。在释放 Container 之前,请取回您需要的文件。

高级:由应用管理预配

要直接控制沙盒预配,请使用 Cloudflare Sandbox SDK,并遵循由应用管理的生命周期执行器连接说明。每个会话使用一个预配控制器。

参考资料