コンテンツにスキップ

マルチエージェント

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

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

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

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

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

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

  • Web 検索でオンラインの情報を見つける
  • ファイル検索と取得でプロプライエタリなデータや接続を探索する
  • コンピュータ操作でコンピュータ上のアクションを実行する
  • コード実行でデータ分析を行う
  • 計画策定、レポート作成などに長けた特化型エージェントへのハンドオフ

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

  1. 良いプロンプトに投資する。利用可能なツール、使い方、守るべきパラメーターを明確にする
  2. アプリをモニタリングし、改善を重ねる。問題が起きる箇所を確認し、プロンプトを反復改善する
  3. エージェントに内省と改善を許可する。例:ループで実行し自己批評させる、またはエラーメッセージを渡して改善させる
  4. 何でもできる汎用エージェントではなく、1 つのタスクに特化して優れたエージェントを用意する
  5. evals に投資する。エージェントの学習とタスク遂行能力の向上に役立つ

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

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

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

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

examples/agent-patterns にいくつかの例があります。