Deep Agentsにおける動的サブエージェントの導入
動的サブエージェントにより、AIエージェントはツール呼び出しではなくコードを使用して作業を大規模にオーケストレーションできます。Deep Agentsのプログラムによるオーケストレーションがどのようにカバレッジを保証し、ファンアウトを処理し、一般的なオーケストレーションパターンとリアルタイムトレースを使用して信頼性の高いマルチステップの複雑なエージェントパイプラインを実現するかを学びます。
AIエージェントがより野心的なタスクを引き受けるにつれて、大規模に信頼性高く作業を完了することや、自身のコンテキストを管理することが困難になります。Deep Agentsでは、動的サブエージェント(Dynamic Subagents)という新しいアプローチを導入し、これらの課題に取り組んでいます。従来のサブエージェントはツール呼び出しを通じて一つずつ起動されていましたが、動的サブエージェントでは、エージェントが短いスクリプトを書き、それを軽量インタプリタで実行することでサブエージェントのオーケストレーションを行います。これにより、モデルはループ、分岐、並行処理といったコードパターンを活用して、タスクに適したオーケストレーションロジックを記述できます。
動的サブエージェントの必要性は、従来の方法が小規模では機能するものの、数百のサブエージェントを起動する必要がある場合や、条件分岐やマルチフェーズのオーケストレーションが必要な場合に限界があることから来ています。動的サブエージェントでは、プログラムによるオーケストレーションにより、確定的なカバレッジと複雑なオーケストレーションを実現します。例えば、300ページのドキュメントを要約する場合、ツールを300回呼び出す代わりに、Promise.allを使ったループを記述します。これにより、カバレッジが構造的に保証され、プロンプトエンジニアリングの問題ではなくなります。また、ファンアウト+合成、マルチフェーズパイプライン、条件分岐などの複雑なパターンもコードとして記述する方が信頼性が高くなります。
動的サブエージェントを使用するには、サブエージェントとコードインタプリタが必要です。Deep AgentsにはQuickJSベースのオプションのインタプリタが含まれています。インストール後、CodeInterpreterMiddlewareをミドルウェアとして渡すことで有効になります。また、汎用サブエージェントが組み込まれており、ワークフローで使用できます。専門的なワークフローの場合は、カスタムサブエージェントを設定することも可能です。動的サブエージェントをトリガーするには、プロンプトに「workflow」という単語を含めます。最も簡単な試用方法は、dcodeターミナルエージェントを使用することです。dcodeはDeep Agent上に構築されており、コードインタプリタがデフォルトで有効になっているため、追加設定なしで動的サブエージェントを利用できます。
動作原理としては、エージェントがevalツールを持ち、安全に実行されるJavaScriptコードを記述します。インタプリタは組み込みのtask()グローバル関数を公開し、コードからサブエージェントをディスパッチします。task()は説明、サブエージェントタイプ、オプションのレスポンススキーマを受け取り、構造化された結果を返します。モデルはタスクに応じてループ、分岐、Promise.allなどのコードを記述し、インタプリタが決定論的に実行します。
さらに、一般的なオーケストレーションパターンとして、分類と実行、ファンアウトと合成、対抗検証、生成とフィルタリング、トーナメント、完了までループの6つが紹介されています。これらはタスクに応じて自然に現れる形状であり、エージェントは状況に応じて異なるパターンを採用します。各パターンには具体的なユースケースとライブトレースへのリンクが提供されています。
動的サブエージェントは、再帰的言語モデル(Recursive Language Model)のアイデアを最も単純な形で実現したものです。エージェントがコードを書き、そのコードがさらにエージェントをディスパッチします。これにより、コンテキストウィンドウや固定ワークフローに制限されることなく、問題を分解し、結果を再構成することができます。モデルがコードを書く能力が向上するにつれて、その可能性はさらに広がるでしょう。Deep Agentsは、この動的サブエージェントを今日から利用できるようにしています。コードインタプリタを追加するか、dcodeを使用してすぐに体験できます。