コンテンツにスキップ

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

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