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