コンテンツにスキップ

マルチエージェント

オーケストレーションは、アプリ内のエージェントの流れを指します。どのエージェントがどの順序で動作し、その後の判断をどのように行うか。エージェントをオーケストレーションする方法は主に 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 に多数の例があります。