コンテンツにスキップ

複数エージェントのオーケストレーション

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

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

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

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

エージェントとは、 instructions、 tools、 handoffs を備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、 LLM は自律的にタスクの進め方を計画し、ツールを使ってアクションを実行してデータを取得し、 handoffs を使ってサブエージェントへタスクを委任できます。たとえば、リサーチ用のエージェントには次のようなツールを持たせられます。

  • Web 検索でオンライン情報を収集
  • ファイル検索と取得で社内データや接続先を探索
  • コンピュータ操作でコンピュータ上の操作を実行
  • コード実行でデータ分析を実施
  • ハンドオフで、計画策定やレポート作成に特化したエージェントへ委任

このパターンはタスクがオープンエンドで、 LLM の知性に頼りたい場合に特に有効です。以下の戦略が重要です:

  1. 良いプロンプトに投資する。利用可能なツール、その使い方、および守るべきパラメーターを明確に伝えます。
  2. アプリをモニタリングし、イテレーションを重ねる。問題が起きる箇所を確認し、プロンプトを改良します。
  3. エージェント自身に内省させて改善させる。たとえばループで実行し、自分で批評させる、あるいはエラーメッセージを提供して改善させます。
  4. 何でもこなす汎用エージェントを期待するのではなく、 1 つのタスクに特化したエージェントを用意する。
  5. evals に投資する。これによりエージェントを訓練してタスク遂行能力を向上できます。

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

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

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

examples/agent_patterns には多数のコード例があります。