コンテンツにスキップ

マルチエージェント

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

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

これらのパターンは組み合わせることができます。それぞれにトレードオフがあります。

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

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

エージェントは、instructions、ツール、ハンドオフを備えた 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 があります。