ModalとOpenAI Agents SDKを使用した構築
ModalがOpenAI Agents SDKの公式サンドボックスプロバイダーになりました。この記事では、セキュアで並列・スケーラブルな自動化のためにModalサンドボックスを統合したカスタムコーディングエージェントフレームワークをゼロから構築する方法を、Parameter Golfチャレンジを例に説明します。
本日、OpenAIはAgents SDKをリリースしました。これは、コーディング、ディープリサーチなどのためのエージェントシステムを構築する強力なツールです。同時に、ModalはこのSDKの公式サンドボックスプロバイダーとなり、エージェントに安全で分離された計算環境を提供します。
内部エージェントは話題のトピックであり、Rampのような企業はModal上でバックグラウンドコーディングエージェントの艦隊を構築し、現在PR作成の半分以上を担当しています。多くの企業がCodex、Claude Code、OpenCodeなどの既製のエージェントフレームワークに慣れ親しんでいますが、これらのエージェントをカスタマイズし、Rampのように強力な内部ツールに構築する方法はまだ課題です。
OpenAI Agents SDKは、チームが独自の内部エージェントシステムを構築するための適切な構成要素を提供します。このSDKは、サンドボックス拡張機能を介してModalにシームレスに接続し、エージェントにリモートコンピュータ(GPUも含む)を提供し、Modalのスケールメリットを活用します。
この記事では、OpenAI Agents SDK上でカスタムエージェントフレームワークをゼロから構築し、Modalサンドボックスを統合する方法を紹介します。最終的には、タスクを大規模に並列化し、バックグラウンドで効率的に実行できる汎用コーディングフレームワークを手に入れます。
基本コーディングエージェントの構築
まず、最小限のコーディングエージェントを構築します。エージェントは、LLMがツール(関数)を実行してタスクを完了するためのループです。最も単純なコーディングエージェントは、ホスト上で任意のシェルコマンドを実行するexec(command)関数を持ちます。しかし、この方法にはセキュリティリスクがあります。
エージェントをサンドボックスに移動
サンドボックスは、VMまたはセキュリティ強化されたコンテナ上に構築された隔離されたLinux環境です。コマンドをサンドボックス内で実行することで、安全性を高めることができます。OpenAI Agents SDKは、リモートサンドボックスに接続するためのツールがプリロードされたSandboxAgentクラスと、追加のガードレールを提供するShellToolクラスを提供します。
ModalSandboxClientOptionsを使用すると、サンドボックスにGPUを要求できます。これはModal独自の機能です。
MNISTモデルのトレーニング
エージェントフレームワークは、エンドツーエンドでコーディングタスクを実行できるようになりました。例えば、MNIST画像モデルをトレーニングするよう指示すると、そのまま動作するはずです。
究極のフレームワークの構築
フレームワークは、エージェントループを囲むすべてのもので、コンテキストとツールを提供します。新しい機能を徐々に追加し、Parameter Golf実験を確実に実行できるようにします。
セッションによる記憶の追加
デフォルトでは、エージェントはステートレスです。セッションを使用すると、エージェント実行全体でコンテキストウィンドウを蓄積でき、マルチターン記憶の問題を解決します。ただし、記憶が無限に蓄積されるため、コンテキスト管理という新たな課題が生じます。
高レベル計画とコンテキスト委任のためのサブエージェントの追加
長期間のタスクに対応するため、エージェントをオーケストレーターとサブエージェントに分割します。オーケストレーターはタスク全体の記憶を蓄積し、invoke_subagentツールを持ち、完全に新しいコンテキストでサブエージェントを生成します。サブエージェントは短期間のタスクに集中し、完了時にセッション記憶を破棄することで、オーケストレーターのコンテキストをスリムに保ちます。
非同期と並列処理:サブエージェントプール
サブエージェントプールを実装することで、オーケストレーターは複数のサブエージェントを並行して管理し、実験のスループットを向上させます。SubAgentPoolクラスを追加し、フックとステータス更新ツールを使用して、オーケストレーターがサブエージェントの進行状況を把握できるようにします。
GPU支出の制限:クォータシステム
コストを制御するために、サブエージェントプールにクォータシステムを追加し、高価なGPUインスタンスの数を制限します。
ファイルシステムスナップショットによる作業の重複排除
サブエージェントが基本サンドボックスから起動すると、セットアップ作業でGPU時間を無駄にします。ファイルシステムスナップショットを使用すると、アクティブなサンドボックス状態をIDとして凍結し、オーケストレーターはその時点から新しいサブエージェントを起動できるため、重複作業を回避できます。さらに、ファイルシステムは暗黙の記憶としても機能し、ディスク上のアーティファクトはセッションに含まれていなくても将来のエージェントが利用できます。
スキルシステムの追加
最後に、フレームワークにプラグインスキルを追加し、オーケストレーターが特定のタスク(Parameter Golfなど)のプロンプトを選択的にロードできるようにし、フレームワークの汎用性を保ちます。
成果:GPU上での並列自動研究システム
基本的なローカル実行エージェントループから始め、リモートサンドボックスでセキュリティを確保し、非同期ワーカーでスケーリングしました。最終的に、Parameter Golf研究を自律的かつ並列に実行できるシステムを構築しました。
結論
このブログの要点は、基本エージェントループの上にシステムを構成してタスクに適応させることができるという理解です。私たちが構築したフレームワークは、オーケストレーターのコンテキストをスリムに保ち、Modalのサンドボックスプラットフォームの並列性を最大限に活用します。これらはすべて、OpenAI Agent SDKのシンプルさと構成可能性のおかげです。このプロジェクトがあなた自身のものを作るためのインスピレーションになることを願っています!
構築する際は、完全なサンプルリポジトリを参照してください。サンドボックスとGPUが必要になったら、Modalにサインアップして30ドルの無料クレジットを入手してください。