コンテンツにスキップ

マルチエージェント

オーケストレーションとは、アプリ内のエージェントのフローを指します。どのエージェントが、どの順序で実行され、次に何をするかをどのように決めるのか、ということです。エージェントをオーケストレーションする主な方法は 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 があります。