コンテンツにスキップ

マルチエージェント

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

  1. LLM に意思決定させる
    これにより LLM の知能を活用して計画・推論し、その結果に基づいて次のステップを決定できます。
  2. コードによるオーケストレーション
    コードで エージェント の流れを制御します。

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

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

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

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

  • Web 検索によるオンライン情報取得
  • ファイル検索および取得での社内データや接続の検索
  • コンピュータ操作 を用いたアクション実行
  • コード実行 によるデータ分析
  • 計画立案やレポート作成に長けた専門 エージェント へのハンドオフ

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

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

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

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

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

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

examples/agent-patterns に多数のサンプルがあります。