コンテンツにスキップ

マルチエージェント

オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントを、どの順番で実行し、次に何をすべきかをどのように判断するかということです。エージェントをオーケストレーションする方法は大きく 2 つあります。

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

これらのパターンは組み合わせて使うこともできます。それぞれ長所と短所があり、以下で説明します。

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

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

エージェントとは、 instructions 、 tools 、 handoffs を備えた LLM です。つまり、自由度の高いタスクが与えられた場合でも、 LLM が自律的に計画を立て、 tools を用いてアクションを実行してデータを取得し、 handoffs を使ってサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のようなツールを持たせることができます。

  • Web 検索を用いてオンライン情報を取得
  • ファイル検索とリトリーバルで社内データや接続先を検索
  • コンピュータ操作で PC 上のアクションを実行
  • コード実行でデータ分析を行う
  • 計画立案やレポート作成などに長けた専門エージェントへの handoffs

このパターンは、タスクが自由形式であり LLM の知性に依存したい場合に最適です。ここで重要となる戦略は次のとおりです。

  1. 優れたプロンプトに投資する
    利用可能な tools 、その使い方、動作すべきパラメーターの範囲を明確にします。
  2. アプリを監視し、改善を繰り返す
    問題が発生した箇所を把握し、プロンプトを改善します。
  3. エージェントに内省させ、自己改善させる
    例として、ループで実行して自己批評させたり、エラーメッセージを与えて改善させたりします。
  4. 何でもこなす汎用エージェントより、特定タスクに特化したエージェントを用意する
  5. evals に投資する
    これにより、エージェントをトレーニングしてタスク遂行能力を向上させられます。

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

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

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

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

これらのパターンを示すコード例は examples/agent-patterns にあります。