コンテンツにスキップ

マルチエージェント

オーケストレーションとは、アプリ内でのエージェントの流れのことです。どのエージェントがどの順序で実行され、次に何をするかをどのように判断するのか。エージェントをオーケストレーションする主な方法は 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 ループで走らせ、評価とフィードバックを行うエージェントと組み合わせて、評価者が所定の基準を満たしたと判断するまで繰り返す
  • 複数のエージェントを並列で実行する(例:Promise.all のような JavaScript の基本コンポーネントを使用)。互いに依存しない複数のタスクがある場合、速度面で有効

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