コンテンツにスキップ

マルチエージェント

オーケストレーションとは、アプリ内のエージェントのフローのことです。どのエージェントが、どの順序で実行され、次に何が起きるかをどう決めるか。エージェントをオーケストレーションする主な方法は 2 つあります。

  1. LLM に意思決定を任せる方法: これは LLM の知能を活用して計画・推論し、それに基づいて次のステップを決めます
  2. コードでオーケストレーションする方法: コードでエージェントのフローを決定します

これらのパターンは組み合わせることができます。どちらにもトレードオフがあり、以下で説明します。

LLM によるオーケストレーション

Section titled “LLM によるオーケストレーション”

エージェントは、指示、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、LLM はツールを使ってアクションやデータ取得を行い、ハンドオフでサブエージェントに委譲しながら、タスクに取り組む計画を自律的に立てられます。例えば、あるリサーチ用エージェントには次のようなツールを備えることができます。

  • Web 検索でオンラインの情報を見つける
  • ファイル検索と取得で社内データや接続を検索する
  • コンピュータ操作でコンピュータ上のアクションを実行する
  • コード実行でデータ分析を行う
  • 計画立案、レポート作成などに強い専門エージェントへのハンドオフ

このパターンは、タスクがオープンエンドで、LLM の知能に頼りたい場合に有効です。ここで重要な戦術は次のとおりです。

  1. 良いプロンプトに投資する。利用可能なツール、その使い方、動作すべきパラメーターを明確にする
  2. アプリをモニタリングして改善を重ねる。問題が起きる箇所を把握し、プロンプトを反復改善する
  3. エージェントに内省と改善を許可する。例えばループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させる
  4. 何でもできる汎用エージェントではなく、1 つのタスクに特化して卓越するエージェントを用意する
  5. evals に投資する。これによりエージェントを訓練してタスク遂行能力を高められます

コードによるオーケストレーション

Section titled “コードによるオーケストレーション”

LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは速度・コスト・パフォーマンスの面でより決定的かつ予測可能になります。一般的なパターンは次のとおりです。

  • structured outputs を使って、コードで検査できる 適切な形式のデータ を生成する。例えば、エージェントにタスクをいくつかの カテゴリー に分類させ、その カテゴリー に基づいて次のエージェントを選ぶ
  • あるエージェントの出力を次のエージェントの入力に変換して連結する。ブログ記事作成のようなタスクを、調査、アウトライン作成、本文執筆、批評、改善といった一連のステップに分解する
  • あるエージェントがタスクを実行し、別のエージェントが評価とフィードバックを行う while ループで実行し、評価者が一定の基準を満たしたと判断するまで繰り返す
  • 複数のエージェントを並列実行する(例: Promise.all などの JavaScript の基本コンポーネントを使用)。相互依存しない複数タスクがある場合に速度向上に有用

examples/agent-patterns に多数の code examples があります。