コンテンツにスキップ

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

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

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

これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します。

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

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

  • Web 検索でオンライン情報を収集
  • ファイル検索とリトリーバルで社内データや接続を横断検索
  • コンピュータ操作でコンピュータ上のアクションを実行
  • コード実行でデータ分析を実施
  • 計画、レポート作成などに長けた専門エージェントへのハンドオフ

このパターンは、タスクがオープンエンドで、LLM の知能に頼りたい場合に最適です。重要な戦術は次のとおりです。

  1. 良いプロンプトに投資すること。利用可能なツール、使い方、遵守すべきパラメーターを明確にします。
  2. アプリを監視して反復改善すること。うまくいかない箇所を見つけ、プロンプトを改善します。
  3. エージェントに内省と改善を許可すること。たとえばループで実行し、自己批評させる、あるいはエラーメッセージを与えて改善させます。
  4. 何でもこなす汎用エージェントではなく、1 つのタスクに特化して優れた専門エージェントを用意すること。
  5. evals に投資すること。これによりエージェントを訓練し、タスク遂行能力を向上できます。

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

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

  • structured outputs を使って、コードで検査可能な 適切な形式のデータ を生成する。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、カテゴリーに基づいて次のエージェントを選ぶなど。
  • 複数のエージェントをチェーンし、前段の出力を次段の入力に変換する。ブログ記事の執筆のようなタスクを、調査、アウトライン作成、本文執筆、批評、改善という一連のステップに分解できます。
  • タスクを実行するエージェントと、それを評価してフィードバックを返すエージェントを while ループで回し、評価者が特定の基準を満たしたと判断するまで繰り返す。
  • 複数のエージェントを並行実行する(例: Python の基本コンポーネントである asyncio.gather を使用)。互いに依存しない複数のタスクがある場合、速度向上に有効です。

examples/agent_patterns に複数の例があります。