複数の エージェント のオーケストレーション
オーケストレーションとは、アプリ内での エージェント の流れのことです。どの エージェント を、どの順番で実行し、その後の判断をどのように行うか。エージェント のオーケストレーションには主に 2 つの方法があります。
- LLM に意思決定を任せる: LLM の知性を用いて計画・推論し、それに基づいて次に取るべきステップを決めます。
- コード によるオーケストレーション: コードで エージェント の流れを規定します。
これらのパターンは組み合わせて使えます。各手法には、以下のとおり長所と短所があります。
LLM によるオーケストレーション
エージェント は、instructions、ツール、ハンドオフ を備えた LLM です。つまり、オープンエンドなタスクが与えられたとき、LLM はツールを使ってアクションやデータ取得を行い、ハンドオフ でサブエージェントに委任しながら、タスクに取り組む計画を自律的に立てられます。たとえば、リサーチ用の エージェント には以下のようなツールを備えられます。
- Web 検索 によるオンライン情報の収集
- ファイル検索 と取得によるプロプライエタリデータや接続先の検索
- コンピュータ操作 によるコンピュータ上でのアクション実行
- コード実行 によるデータ分析
- 計画立案、レポート執筆などに長けた特化型 エージェント への ハンドオフ
このパターンは、タスクがオープンエンドで、LLM の知性に依拠したい場合に適しています。重要な戦術は次のとおりです。
- 良いプロンプトに投資する。利用可能なツール、その使い方、遵守すべき パラメーター を明確にします。
- アプリを監視して改善を繰り返す。うまくいかない箇所を見極め、プロンプトを反復改善します。
- エージェント に内省と改善を許可する。たとえばループで実行して自己批判させる、あるいはエラーメッセージを与えて改善させます。
- 何でもできる汎用 エージェント を期待するのではなく、特定のタスクに特化して卓越する エージェント を用意する。
- 評価 (evals) に投資する。これにより エージェント を訓練して性能を高められます。
コード によるオーケストレーション
LLM によるオーケストレーションは強力ですが、コード によるオーケストレーションは、速度・コスト・性能の面でより決定的かつ予測可能になります。一般的なパターンは次のとおりです。
- structured outputs を用いて、コードで検査できる 適切な形式のデータ を生成する。たとえば、タスクをいくつかの カテゴリー に分類させ、その カテゴリー に基づいて次の エージェント を選ぶ、といった使い方です。
- ある エージェント の出力を次の エージェント の入力に変換して連鎖させる。ブログ記事の執筆のようなタスクを、調査→アウトライン作成→本文執筆→批評→改善といった一連のステップに分解できます。
- タスクを実行する エージェント と、それを評価してフィードバックする エージェント を
whileループで回し、評価者が所定の基準を満たしたと判断するまで繰り返す。 - 複数の エージェント を並列実行する(例: Python の基本コンポーネントとしての
asyncio.gatherを使用)。互いに依存しない複数タスクがある場合、速度向上に有用です。
examples/agent_patterns に多数の code examples があります。