コンテンツにスキップ

マルチエージェント

オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントを、どの順序で実行し、その後の流れをどう判断するのか。エージェントをオーケストレーションする主な方法は 2 つあります。

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

これらのパターンは組み合わせ可能です。トレードオフは以下のとおりです。

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

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

エージェントは、instructions、tools、handoffs を備えた LLM です。つまり、オープンエンドなタスクに対して、LLM は自律的に計画し、ツールで行動してデータを取得し、ハンドオフでサブエージェントに委譲できます。たとえば、リサーチ用のエージェントには次のようなツールを備えられます。

  • Web 検索でオンライン情報を見つける
  • ファイル検索と取得で独自データや接続を横断して検索する
  • コンピュータ操作で PC 上のアクションを取る
  • コード実行でデータ分析を行う
  • 計画、レポート執筆などに長けた専門エージェントへのハンドオフ

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

  1. 良いプロンプトに投資する。利用可能なツール、その使い方、遵守すべきパラメーターを明確にする
  2. アプリを監視し反復する。問題点を見つけ、プロンプトを改善する
  3. エージェントに内省と改善を許可する。ループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させる
  4. 何でもできる汎用エージェントではなく、1 つのタスクに特化して卓越するエージェントを用意する
  5. evals に投資する。エージェントの学習とタスク性能の向上に役立つ

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

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

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

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

examples/agent-patterns に多数の code examples があります。