コンテンツにスキップ

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

オーケストレーションとは、アプリ内でのエージェントの流れのことです。どのエージェントを、どの順序で実行し、その後何を行うかをどのように決定するのか。エージェントをオーケストレーションする方法は主に次の 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 を使用)。互いに依存しない複数のタスクがある場合、速度面で有用です。

多数の code examples は examples/agent_patterns にあります。