エージェンティック・ループを超えて:オーケストレーター・パターン
多くの人は、エージェンティック・ループ(agentic loop)を使用してマルチエージェント・システムを構築しています。
LLMが脳および制御フローとして機能します。思考し、ツールを呼び出し、観察し、そして繰り返します。これは探索(exploration)には適していますが、3つの大きな問題を引き起こします。
- 予測不能性:タスクに3回の呼び出しが必要か、9回必要かが分かりません。実行するまでレイテンシやコストが予測できません。
- 非決定性:同じ質問でも毎回異なる経路を辿ります。そのため、注文の実行といった副作用を伴うタスクをエージェントに任せる際、信頼性が低くなります。
- 観測性の低さ:デバッグには、思考プロセスやツール呼び出しの乱雑なトランスクリプトを再生する必要があります。
エージェントとその機能を把握している場合は、代わりにオーケストレーター・パターンを使用してください。
オーケストレーターは「意思決定」と「実行」を分離します。これには3つの明確なフェーズがあります。
- Route(ルーティング):1回のLLM呼び出しでツールを選択します。ユーザーに回答はしません。
- Execute(実行):通常のTypeScriptコードがエージェントを実行します。ここではLLMを使用しません。
- Synthesize(統合):1回のLLM呼び出しで、データを自然な応答に変換します。
このパターンでは、3つの実行モードが作成されます。
• Single(シングル):1つのエージェントがクエリを処理します。
• Parallel(パラレル):Promise.allを使用して、複数の独立したエージェントを同時に実行します。これにより時間を短縮できます。
• Sequential(シーケンシャル):エージェントを順番に実行します。各ステップは前のステップの結果を使用します。
このアプローチを採用することで、以下のメリットが得られます。
- 信頼できるプラン:コードが実行される前に実行計画を確認できます。
- 高速化:並列実行により、複数のルックアップを一度に処理できます。
- テストの容易性:APIキーなしで実行フェーズのユニットテストが可能です。
- 予測可能なコスト:すべてのリクエストで、LLMの呼び出しは正確に2回となります。
探索にはエージェンティック・ループを、スピードと信頼性が求められる本番環境のシステムにはオーケストレーターを使用してください。
オプションの学習コミュニティ: https://t.me/GyaanSetuAi