[go: up one dir, main page]

コンテンツにスキップ

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

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

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

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

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

エージェントとは、instructions、tools、handoffs を備えた LLM です。これにより、オープンエンドなタスクが与えられた場合でも、LLM は自律的に計画を立て、tools を用いてアクションを実行・データを取得し、handoffs でサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のような tools を装備できます。

  • Web 検索でオンライン情報を取得
  • ファイル検索と取得で独自データや接続先を検索
  • コンピュータ操作で PC 上の操作を実行
  • コード実行でデータ分析を行う
  • 計画立案やレポート作成に優れた専門エージェントへの handoffs

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

  1. 良いプロンプトに投資する。利用可能な tools、その使い方、守るべきパラメーターを明確にしましょう。
  2. アプリをモニタリングして改善を重ねる。問題が起きた箇所を確認し、プロンプトを改善します。
  3. エージェントに内省と改善を許可する。たとえばループで実行し自己批判させる、エラーメッセージを渡して改善させるなどです。
  4. 何でもこなす汎用エージェントではなく、特定タスクに特化したエージェントを用意しましょう。
  5. evals に投資する。これによりエージェントを訓練し、タスク性能を向上できます。

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

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

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

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