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