業務活用事例

マルチエージェント設計:コーディネーターとサブエージェントの実践パターン

マルチエージェント設計:コーディネーターとサブエージェントの実践パターン

この記事の要点

複数のAIが協調するマルチエージェントシステムの設計方法を解説。コーディネーターとサブエージェントの役割分担、並列実行、エラー伝播の実践パターンを具体例とともに紹介します。

結論

マルチエージェント設計は、1つのAIで全てを処理するより速く・正確に複雑タスクをこなすための構造です。コーディネーターが指示を出し、専門化されたサブエージェントが実行する「ハブ&スポーク型」が最も実用的なパターンです。

この設計の鍵は3つです。サブエージェントに必要な文脈を明示的に渡すこと、タスクに応じて並列実行と逐次実行を使い分けること、失敗情報を構造化してコーディネーターの回復判断を助けることです。


なぜ1つのAIでは限界があるのか

複雑なリサーチタスクを例に考えます。「AIが創作産業に与える影響」を調査してレポートを作る場合、次の作業が必要です。

  1. ウェブを検索して関連記事を収集する
  2. 論文・報告書を読み込んで要点を抽出する
  3. 収集した情報を整理して矛盾を解消する
  4. 読みやすいレポート形式にまとめる

1つのAIに全て任せると、どんな問題が起きるでしょうか。全ての作業の文脈が1つのコンテキストウィンドウに積み上がり、後半になるほど前半の詳細が薄れます。特定の作業(ウェブ検索や文書読み込み)に特化したツールが使えないこともあります。

マルチエージェントはこの問題を分業で解決します。各エージェントが自分の専門領域に集中し、コーディネーターがその成果を統合します。


ハブ&スポーク型アーキテクチャ

最もよく使われるのが、1つのコーディネーターが複数のサブエージェントを管理するハブ&スポーク型です。

ユーザー

コーディネーター(指揮役)
   ├── 検索サブエージェント(ウェブ情報収集専門)
   ├── 分析サブエージェント(文書読み込み・要約専門)
   ├── 統合サブエージェント(情報統合・矛盾解消専門)
   └── レポートサブエージェント(文書生成専門)

コーディネーターの主な役割は4つです。

役割内容
タスク分解大きな目標を各サブエージェントが担える単位に分ける
委譲と情報受け渡し必要な文脈をセットにしてサブエージェントに指示
結果集約サブエージェントの成果を受け取り統合
回復判断失敗があった場合の対処(リトライ・代替・続行)を決定

この構造では、サブエージェント同士は直接連絡しません。全てのやりとりはコーディネーター経由で行われます。これにより、ログが取りやすく、エラー対処を一箇所に集約できます。


サブエージェントへの文脈の渡し方

設計で見落とされがちな最重要ポイントが、サブエージェントは親の会話履歴を自動的には持たないという点です。

コーディネーターが「検索サブエージェント」に依頼するとき、そのサブエージェントはコーディネーターとユーザーの会話を知りません。必要な情報は全てプロンプトに明示的に含める必要があります。

良い渡し方の例

検索サブエージェントへの指示:
「以下のトピックを調査してください:
  - 調査テーマ: AIが音楽制作に与える影響
  - 対象期間: 2023年以降の情報を優先
  - 除外: 楽器・機材レビューは含めない
  - 出力形式: 記事タイトル・URL・要点を各3行以内で
  - 上限: 最大10件

悪い渡し方の例

検索サブエージェントへの指示:
「AIの影響を調べてください」
(何のAI? どの産業? 何年以降? どんな形式で?)

また、前のサブエージェントの成果を次のエージェントに渡すときは、生の長い出力をそのまま渡すのではなく、構造化された形式に整理してから渡します。「出典URL・要点・信頼度」のような固定フィールドで渡すと、受け取る側のエージェントが処理しやすくなります。


並列実行で処理速度を上げる

サブエージェントは必ずしも順番に実行する必要はありません。依存関係のないタスクは並列実行で大幅に速くなります。

例として、リサーチタスクで「音楽・映像・文章」の3分野を調査する場合を考えます。

逐次実行:
音楽調査(5分) → 映像調査(5分) → 文章調査(5分) = 合計15分

並列実行:
音楽調査(5分) ┐
映像調査(5分) ├→ 統合処理(2分) = 合計7分
文章調査(5分) ┘

並列実行が適しているケース:

  • 各サブエージェントが独立したトピックを担当する
  • 前のエージェントの結果を必要としない

逐次実行が必要なケース:

  • 前のステップの結果を次のステップが使う(例: 顧客ID取得→注文照会)
  • 業務ルールとして順序が決まっている(例: 本人確認→返金処理)

コーディネーターは同じ回答の中で複数のサブエージェント呼び出しを発行することで、これらを並列実行させられます。


タスク分解の失敗パターンと対策

マルチエージェントシステムで最もよく見られる失敗が、コーディネーターのタスク分解が「狭すぎる」問題です。

例えば「AIが創作産業に与える影響」を調査するとき、コーディネーターが「デジタルアート」「グラフィックデザイン」「写真」の3つに分解しただけでは、音楽・映像・文学が全て抜け落ちます。サブエージェントはそれぞれ完璧に仕事をしていても、調査範囲が最初から偏っていれば最終レポートも偏ったものになります。

この問題への対策は、コーディネーターのプロンプトにカバー範囲の明示的な定義を含めることです。

改善後のコーディネーター指示例

「以下の全ての創作分野を必ず含めること:
  視覚芸術(デジタルアート・グラフィック・写真)
  音楽・音声制作
  映像・映画制作
  文章・小説・ジャーナリズム
  その他の分野(発見した場合は追加可)
  
  重複を避けるため、各サブエージェントに担当分野を明示的に割り当てる」

エラー伝播の設計

サブエージェントが失敗したとき、どう対処するかはシステムの信頼性を大きく左右します。避けるべき2つの極端と、推奨する設計を整理します。

避けるべき設計1: エラーを隠して成功扱いにする

タイムアウトやアクセス失敗を「結果0件」として返すと、コーディネーターは問題が起きたことに気づけません。実際は検索できなかったのに「該当なし」と判断してしまいます。

避けるべき設計2: エラーで全体を停止する

1つのサブエージェントが失敗しただけでシステム全体を止めると、5つ中4つが成功した部分的な成果も無駄になります。

推奨設計: 構造化エラーをコーディネーターに返す

{
  "status": "failed",
  "error_type": "timeout",           // transient: リトライ可能
  "attempted_query": "AI in music production 2024",
  "partial_results": ["記事A", "記事B"],  // 取得できた分は渡す
  "alternative_suggestion": "キーワードを変えて再試行するか、学術DB検索エージェントへ切り替えを推奨"
}

この構造化エラーを受け取ったコーディネーターは、「タイムアウトは一時的なのでリトライする」「権限エラーは人間にエスカレートする」「部分結果があるので他のエージェントの成果と組み合わせて続行する」といった判断を自分で下せます。

エラーの種類と対処法の詳細はClaudeエージェントループ入門でも触れています。サブエージェントの出力を構造化して次のエージェントに渡す設計についてはClaudeのJSONスキーマ構造化出力が参考になります。


ツールの配分:各エージェントに必要なものだけ渡す

サブエージェントには、その役割に必要なツールだけを与えます。全ツールを全エージェントに渡すと、エージェントが専門外のツールを誤って使い始める問題が起きます。

実際に観測されているパターンとして、「統合サブエージェント」にウェブ検索ツールを持たせると、他のエージェントの結果をまとめるべき場面で自分でウェブ検索を始めることがあります。役割外のツールがあると判断が乱れます。

サブエージェント与えるツール与えないツール
検索エージェントウェブ検索・ニュース取得文書分析・レポート生成
分析エージェントPDF読み込み・文書解析ウェブ検索・データ保存
統合エージェントファクトチェック(限定版)フルウェブ検索・外部保存
レポートエージェント文書生成・フォーマット検索・分析系の全ツール

ただし、統合エージェントが高頻度で簡単なファクトチェックを必要とする場合は、コーディネーター経由で検索エージェントを呼ぶ往復コストを考慮し、スコープを絞った「シンプルなファクト検証ツール」だけを統合エージェントに持たせるという妥協点もあります。


セッションと状態の管理

長時間動作するマルチエージェントシステムでは、途中停止からの再開設計も重要です。

各サブエージェントが自分の進捗状態を定期的に保存し、コーディネーターがその状態ファイルを読み込んでから再開する設計にすると、途中停止が起きても最初からやり直す必要がなくなります。

また、過去のセッションを再開する場合は、以前の結果がまだ有効かどうかを確認することが大切です。2時間前にウェブ検索した結果は再利用できますが、外部サービスのリアルタイムデータは更新されている可能性があります。


まとめ

マルチエージェント設計で押さえるべき実践的なポイントをまとめます。

  • コーディネーターは全てのやりとりの中継点として機能し、サブエージェント同士の直接通信は避ける
  • サブエージェントへの文脈は必ず明示的に渡す(自動引き継ぎはない)
  • 独立したタスクは並列実行で時間を短縮する
  • タスク分解の網羅性をコーディネーターのプロンプトで明示的に定義する
  • エラーは構造化して伝え、コーディネーターが回復判断できるようにする
  • 各サブエージェントには役割に必要なツールだけを与える

この設計パターンを身につけることで、研究・分析・顧客対応など多段階の複雑タスクをAIで自動化できます。

よくある質問

マルチエージェントシステムとは何ですか?

1つのAIが全てを処理するのでなく、コーディネーター(指揮役)が複数のサブエージェント(専門家)を使い分けるAI設計です。調査・分析・レポート作成のような多段階タスクを効率化できます。

サブエージェントはコーディネーターの情報を自動的に引き継ぎますか?

引き継ぎません。サブエージェントは独立した文脈を持つため、コーディネーターが必要な情報を明示的にプロンプトに含めて渡す必要があります。

サブエージェントが失敗したとき、どう対処すればよいですか?

失敗の種類(タイムアウト・アクセス権限エラー・空の結果)を構造化して返し、コーディネーターが適切な回復策(リトライ・代替手段・部分結果での続行)を判断できるようにします。