コンテンツにスキップ

マルチエージェント

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

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

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

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

Section titled “LLM によるオーケストレーション”

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

  • Web 検索でオンライン情報を探す
  • ファイル検索と取得でプロプライエタリデータや接続先を検索する
  • コンピュータ操作でコンピュータ上のアクションを実行する
  • コード実行でデータ分析を行う
  • ハンドオフで、計画やレポート作成などを得意とする専門エージェントに委任する

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

  1. 良いプロンプトに投資する
    ツールの一覧、使い方、守るべきパラメーターを明確にします
  2. アプリをモニタリングしてイテレーションを重ねる
    問題が起きた箇所を確認し、プロンプトを改善します
  3. エージェントに内省させて改善させる
    例としてループで実行し、自己批評させる/エラーメッセージを渡して自己改善させる
  4. 何でもできる汎用エージェントより、特定タスクに特化したエージェントを用意する
  5. evals に投資する
    これによりエージェントを訓練し、タスク遂行能力を向上させられます

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

Section titled “コードによるオーケストレーション”

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

  • structured outputs を使用して、コードで検査できる適切な形式のデータを生成する
    例として、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに応じて次のエージェントを選ぶ
  • 複数のエージェントを連結し、あるエージェントの出力を次のエージェントの入力に変換する
    例: ブログ記事執筆を「リサーチ → アウトライン作成 → 記事執筆 → 批評 → 改善」という一連のステップに分割
  • タスクを実行するエージェントと、その出力を評価・フィードバックするエージェントを while ループで回し、評価者が基準を満たしたと判断するまで繰り返す
  • JavaScript プリミティブである Promise.all などを使い、複数エージェントを並列実行する
    相互依存しない複数タスクを高速に処理したい場合に有効

examples/agent-patterns に多数のコード例があります。