OpenAI Cookbook のアプリケーション管理とWebhook 管理の実装例を参照してください。
エグゼキューターのセットアップ手順と接続要件については、セルフホスト型サンドボックスを参照してください。
プロビジョニング方式を選びます。
- アプリケーション管理: このガイドに沿って、アプリケーションからサンドボックスを起動・停止します。
- Webhook 管理: OpenAI からの Webhook を受けてサンドボックスを起動または再接続するハンドラーをデプロイします。
両方式の違いについては、サンドボックスのライフサイクルを参照してください。
Webhook 管理
コントローラーで OpenAI から届いた Webhook を検証し、プロビジョニング処理をキューに追加します。コントローラーは、各セッションのエグゼキューターを実行するワーカー用サンドボックスとは別に配置してください。ハンドラーのデプロイと接続の手順に従って、エンドポイントと署名用シークレットを登録します。
environment_connection リクエストを受けたら、ワーカーを起動または再接続します。セッションが失敗した場合は、ワーカーを解放してください。ワーカーとコントローラーのタイムアウトはそれぞれ明示的に設定します。アイドル時にコンピューティングリソースを停止するには、新しい処理の受付とリソースの停止を調整するポリシーが必要です。詳しくはライフサイクルの動作を参照してください。
アプリケーション管理
事前準備
OpenAI プロジェクトの API キー、Daytona の API キー、Codex CLI パッケージを用意してください。
DAYTONA_API_KEY を設定し、アプリケーションからのリクエストには OPENAI_API_KEY を使用します。OPENAI_EXECUTOR_API_KEY には環境キーを設定し、サンドボックスにはそのキーだけを CODEX_API_KEY として渡してください。
1. Daytona 環境のセットアップ
セルフホスト型セッションを作成し、その環境 ID を保存します。Daytona SDK または API を使い、設定した作業ディレクトリを指定して、隔離されたサンドボックスを作成します。サンドボックスに Codex CLI をインストールしてから、その環境 ID と環境キーを使ってエグゼキューターを起動します。
エグゼキューターは OpenAI へのアウトバウンド接続を長時間維持しますが、Daytona はアイドル状態の判定時にこの接続を検知しません。エージェントの作業中にサンドボックスが停止しないよう、auto_stop_interval=0 を設定してください。また、実行が中断された後もコンピューティングリソースが稼働し続けることを防ぐため、サンドボックスの稼働時間に上限を設けてください。
繰り返し利用する場合は、Daytona のスナップショットに Codex と ripgrep を含めておくと、サンドボックスが接続するまでの時間を短縮できます。
2. セッションの実行
Daytona のエグゼキューターが接続したら、セッションの実行と継続にある HTTP の例に沿って入力を送信し、結果をストリームで受け取ります。作業が終わったら、セッションを削除し、プロバイダー側のサンドボックスも別途停止してください。
入力を送信する前にサンドボックスを起動してください。ターンは環境が接続されるまで待機します。接続が確立すると、セッションはイベントストリーム上で agent.session.environment.connected を通知します。
ターンが成功したかどうかは agent.session.turn.completed で確認してください。ターンが失敗またはキャンセルされた後にも agent.session.idle が通知されることがあるため、セッションがアイドル状態になったことだけでターンが成功したと判断しないでください。イベントの直後にセッション情報を取得すると、一時的に以前のステータスが返ることがあります。