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 を使用します。プロビジョニングコントローラーは、セッションごとに 1 つ使用してください。

参考資料