Skip to main content
OpenAI のマネージドエージェントの実行環境として、CoreWeave Sandboxes を使用できます。 アプリケーションは Agents API のセッションと CoreWeave のサンドボックスを作成します。サンドボックス内の Codex エグゼキューターが OpenAI に接続し、エージェントのコマンドを実行します。 このページでは、実行モデル、各コンポーネントに必要な認証情報、 およびユーザーが管理するリソースの有効期間について説明します。これらを理解しておけば、 付属のレシピを実行し、同じパターンを独自のアプリケーションに応用できます。 付属のレシピでは、推論サービスで発生した架空のインシデントを 調査します。3 つの専門サブエージェントがそれぞれレイテンシー、エラー、キャパシティを分析し、 コーディネーターがその結果をまとめてインシデントレポートを作成したうえで、追加の質問に回答します。 アプリケーションが結果をダウンロードした後、別途ローカルで動作する検証ツールが 計算結果と記録されたエージェントのアクティビティを検証します。

実行モデル

OpenAI はエージェントループを実行し、会話コンテキストを管理し、委譲ツールを提供します。 CoreWeave はエグゼキューターと、エージェントが作成するプログラムを実行します。 サンドボックスのプロビジョニング、ファイル転送、クリーンアップは、お使いのアプリケーション側で管理します。 コーディネーターとそのサブエージェントは、1 つのサンドボックスと 1 つのファイルシステムを共有します。 サブエージェントを作成しても、CoreWeave サンドボックスが別途作成されることはありません。 各スペシャリストにはそれぞれ専用の出力ファイルを割り当て、最終レポートはコーディネーターが担当するようにしてください。 こうしたファイルの割り当ては、書き込みの競合を避けるための慣例であり、アクセス制御ではありません。 詳しくは、OpenAI の マルチエージェントガイド を参照してください。

要件

この例を実行する前に、次の要件を満たしてください。
  • Forge APIキー、または SANDBOX_USER action を持つ CoreWeave API アクセストークン、 および CPU サンドボックス 1 つ分のキャパシティ。 認証情報を選択するの手順に従ってください。
  • Agents API へのアクセス権と、選択したモデルへのアクセス権を持つ OpenAI の project。
  • Python と uv。バージョンとロックファイルは、付属のレシピで指定されているものを使用してください。
  • api.openai.com へのアウトバウンド HTTPS 通信と、 codex-cloud-environments.chatgpt.com へのセキュアな WebSocket アクセス。イメージのセットアップでは、エグゼキューターとランタイムの依存関係をインストールするためのパッケージ レジストリへのアクセスも必要です。
この例では、CPU コンピュートを使用して、提供されたテレメトリを分析します。推論サーバーの起動や GPU のリクエストは行いません。OpenAI モデルの使用料と CoreWeave サンドボックスの コンピュート料金には、それぞれ別の請求条件が適用されます。

アプリケーションとエグゼキューターの認証情報を分離する

この例では、サンドボックス用の認証情報 1 つと OpenAI キー 2 つの、合計 3 つの認証情報を使用します。 各認証情報は 1 つのコンポーネントだけが使用するため、アプリケーションのアクセス権が サンドボックスに渡ることはありません。 このレシピのデフォルトは CoreWeave 認証です。Forge の APIキーを使用するには、 --sandbox-auth wandb を渡します。このレシピでは、Forge 認証に WANDB_API_KEY という環境変数名を厳密に使用する必要があり、FORGE_API_KEY は読み取りません。必須となるのは選択したサンドボックス用の認証情報のみですが、 どちらのモードでも OpenAI キーは 2 つとも必要です。アプリケーションは選択された モードを記録するため、クリーンアップ時にも同じプロバイダーの認証情報が使用されます。 OpenAI のアプリケーションキーには、api.agents.read、api.agents.write、 api.responses.write が必要です。これとは別に、環境キーを Agents > Environments > Keys で作成してください。 このキーの組織、project、およびユーザーまたはサービスアカウントの所有者は、セッションと同じである必要があります。 無関係な権限は None に設定してください。 このレシピでは、制限付きのエグゼキューターキーを SDK の environment_variables 引数で渡します。シークレットストアは設定しません。 アップロードするのはタスクの入力だけにしてください。アプリケーションの認証情報、ローカルの設定、 および検証ツールはサンドボックスの外に置きます。詳しくは OpenAI の認証手順を参照してください。
エージェントが生成したコードはエグゼキューターキーを読み取れます。そのコードが OpenAI を通じて アクセスできる範囲を限定するため、キーの権限は必要最小限に絞ってください。

エージェントセッションを接続する

実行可能なレシピでは、OpenAI と CoreWeave の SDK を使用して次のステップを実装しています。
  1. セルフホストの Agents API セッションを作成し、そのセッション ID と環境 ID を保存します。エグゼキューターを起動する際は、返された remote_url をそのまま使用します。
  2. 最大ライフタイムを明示的に指定し、Python と Node の両方を含む CoreWeave サンドボックスを作成します。
  3. 返された環境 ID と、変更を加えていないリモート URL を指定して codex exec-server を起動します。制限付きのエグゼキューターキーのみを CODEX_API_KEY として注入します。
  4. 合成された入力とタスクの指示をアップロードし、環境との 接続を確認します。タスクを送信し、その結果を確認します。
  5. クリーンアップの前に、生成されたアーティファクトと API アクティビティレコードを取得します。
この一連の手順が完了すると、エージェントの出力ファイルとセッションのアクティビティ レコードをローカルで確認できます。 次の設定の抜粋では、セッション作成時に組み込みの委譲を有効にしています。 レシピでは、これらの辞書を client.beta.agents.sessions.create() に渡します。
この設定では、コーディネーターを除き、最大 3 つのサブエージェントを同時に実行できます。指示では委譲を求めていますが、設定だけでは、モデルが実際に委譲を使用したことの証明にはなりません。 このレシピでは、API 経由で完了したスクリプトのコマンドを、ターン ID とサブエージェント ID に基づいて紐付けます。 明示的に 0 以外の終了コードを返したコマンドは、実行成功の証拠としてカウントされません。終了コードが省略されている場合、検証ツールはそれを unknown として報告します。 省略可能な --require-exit-codes チェックを使用すると、すべてのスペシャリストについて、数値の終了コード 0 による証拠が必須になります。started_at と completed_at の区間が重なっている場合は、サブエージェントのターンが同時に実行されたことを示します。ただし、これらのタイムスタンプの精度は秒単位であるため、 シェルプロセスが同時に実行されたことや、逐次実行より高速化されたことの証明にはなりません。

例を実行する

レシピのセットアップと実行の手順に従ってください。 このレシピには、独自の合成データ、タスク仕様、 アプリケーション、および独立した検証ツールが含まれています。 ダウンロードしたレポートは、検証ツールの検出結果と照らし合わせて確認してください。 セッションが存在している間は、 OpenAI Logs > Agents でもセッションのターンとツール呼び出しを確認できます。 該当する組織と project を選択してください。この例では チャット UI は提供しておらず、ChatGPT アプリや Codex アプリとのセッションの継続にも対応していません。 既存のコマンドラインインターフェース (CLI) ワークフローについては、 OpenAI Agents API in cws-agent を参照してください。 このレシピは SDK を直接使用するため、この CLI は不要です。

Session、サンドボックス、ファイルの有効期間

何を保持するかを決める際は、会話、コンピュート、ワークスペースファイルをそれぞれ個別に管理してください。 コンピュートの有効期間は明示的に選択してください。このレシピでは最大ライフタイムを 20 分に設定しています。最大ライフタイムは上限であり、プロンプトのたびにリセットされる非アクティブタイマーではありません。 エグゼキューターを実行中の同じサンドボックスに再接続した場合、そのワークスペースは保持されます。一方、同じ環境 ID で代わりのコンピュートを起動しても、ファイルはリストアされません。 コンピュートを停止する前に、アーティファクトをダウンロードするか、CoreWeave の永続化機能を使用してください。 このレシピはアーティファクトをダウンロードしてからリソースを削除します。自動復旧やスナップショットからのリストアは実装していません。 サンドボックスを停止しても、API の会話は削除されません。また、会話を削除してもサンドボックスは停止しません。両方のクリーンアップ操作を実行し、失敗した場合はそれぞれ報告してください。

障害に対処する

障害を調査する際は、次のガイダンスを参考にしてください。
  • エグゼキューター が接続しない: 環境キーの所有者、アウトバウンドのネットワーク アクセス、エグゼキューター の互換性、および OpenAI から返されたリモート URL が正確かどうかを確認します。
  • OpenAI が使用量または請求の上限を報告する: 再試行する前に、OpenAI の組織と project の請求制限を確認します。エグゼキューター が接続できても、それだけでモデルのターンを 実行できるとは限りません。
  • ストリームが切断される、またはクライアントがタイムアウトする: 入力を再試行する前に、セッションの状態と保存済みの イベントを確認します。タイムアウトが発生しても、クラウド上の処理自体はキャンセルされません。
  • 委譲や処理の並行実行が確認できない: 保存済みのアクティビティの記録を確認します。 report の内容が正しいというだけでは、マルチエージェントの run が並列実行された証拠としては不十分です。
  • OpenAI の環境が期限切れになる: 再試行する前に環境の状態を確認します。レシピは 即座に失敗せず、処理の期限まで待機する場合があります。
  • サンドボックスが期限切れになる: 可能であれば、保存済みのアーティファクトを復元します。代替の サンドボックスを使用するには、ファイル復元ポリシーを明示的に指定する必要があります。
  • アプリケーションが中断される: レシピで保存されたリソースジャーナルと クリーンアップコマンドを使用します。サンドボックスの最大有効期間はあくまでフォールバックであり、 API セッションを削除する代わりにはなりません。
セッションを保持するアプリケーションでは、受信する処理と調整しながらシャットダウンしてください。 アイドルイベントが発生したというだけでは、安全にシャットダウンできるとは判断できません。webhook 駆動のプロビジョニングは 別のデプロイメントパターンです。詳しくは、OpenAI の サンドボックスのライフサイクルガイドを参照してください。
最終更新日 2026年10月15日