マルチエージェント研究システムの作り方 — Deep Research の裏側と自前実装

マルチエージェント研究システムの作り方 — Deep Research の裏側と自前実装

チャットボットに「AI コーディングツール市場を SWOT 分析つきで調べて」と頼むと、10 分ほど待たされてから 20 ページぶんのレポートが返ってきます。待っている間に裏で動いているのは、1 体のモデルではなく、10 体から 30 体のエージェントが並列で情報源を調べ、結果を順に統合していく仕組みです。

Anthropic が 2025 年 6 月に公開した How we built our multi-agent research system は、この種のシステムの設計を具体的に解説した貴重な資料になっています。本稿では、以下の 5 つを順番に整理していきます。

  1. マルチエージェント構成がなぜ必要になったか
  2. 司令塔と作業員を分けた基本アーキテクチャ
  3. 並列検索・結果マージの実装
  4. コストが 10-15 倍になっても使われる理由
  5. 自前で小さく実装するパターン

単一エージェントの限界

「2026 年の AI コーディングツール市場を調査して、主要プレイヤーの SWOT 分析を 20 ページで書いて」のような大規模な Research タスクには、次の性質があります。

これを単一エージェントでやると、次の 3 つの問題が出ます。

1. コンテキスト窓の爆発

20 サイトを順に読むと、合計 100-500K トークンを食います。文脈窓 200K 限界で、半分も読めないか、Context Rot で忘れっぽくなります。

2. 逐次実行の遅さ

Web ページを 20 枚、順に読むと数十分かかります。並列化しないと使い物になりません。

3. 焦点の散漫

1 体のエージェントが「ニュースを読む・論文を読む・SWOT をまとめる」を全部やろうとすると、各タスクの精度が下がります。

マルチエージェント構成の基本形

Orchestrator + Sub-agents パターン

                    orchestrator
                        │
       ┌────────────────┼────────────────┐
       │                │                │
   sub-agent 1      sub-agent 2      sub-agent 3
   (情報源 A)       (情報源 B)       (情報源 C)
       │                │                │
   10,000 token     12,000 token      8,000 token
    詳細調査         詳細調査          詳細調査
       │                │                │
   ↓ 要約 1,500      ↓ 要約 1,500      ↓ 要約 1,500
       └────────────────┼────────────────┘
                        │
                    orchestrator
                        │
                     最終レポート

役割は 2 つだけです。Orchestrator が計画立案・サブタスク分解・結果統合をやり、Sub-agents は各領域の詳細作業にあたり、結果を凝縮して返します。

Orchestrator が見るのは要約だけ(3 × 1,500 = 4,500 トークン)になります。実際の調査は 30,000 トークンかかっていても、Orchestrator の文脈窓を食いません。

これが解決する課題

この分担によって、文脈窓・時間・焦点の 3 つが同時に解けます。各 sub-agent は独自の文脈窓を持つので、合算で 10 倍の情報を扱えます。10-30 体の sub-agent が同時に動くので、逐次実行の遅さが消えます。各 sub-agent は 1 つの情報源・1 つのタスクに集中するので、焦点が散漫になりません。

Building effective agents で紹介されている Orchestrator-Workers パターンそのものです。

並列検索の設計

検索タスクの分解

ユーザのクエリ「2026 年の AI コーディングツール比較」を、orchestrator が以下のように分解します。

これを 5 体の sub-agent が並列で実行します。各 sub-agent は WebSearch / WebFetch / 構造化データ API を呼び出せます。

Fan-out の制御

無制限に並列化すると、次のような事故が起きます。

実装では同時並列数の上限を 10-20 に設定します。orchestrator は上限内で動的に sub-agent を起動・終了します。

結果マージの難しさ

単純連結の問題

Sub-agent の要約を単純に concat() して orchestrator に渡すと、3 種類の崩れが起きます。重複(3 つの sub-agent が同じ情報を見つけてくる)、矛盾(ニュース記事 A と公式ドキュメント B で数値が違う)、粒度の違い(詳細な sub-agent と要約だけの sub-agent が混ざる)です。

Anthropic の解決

Evaluator agent を挟む構成が有効になります。

sub-agents → raw summaries → evaluator → cleaned summary → orchestrator

Evaluator は、以下を担当します。

階層化

30 体を超えるような規模になると、2 階層の集約を入れます。

30 sub-agents → 6 group evaluators → 1 orchestrator

これなら orchestrator の入力は 6 × 1,500 = 9,000 トークンで済みます。

評価ループの実装

Evaluator-Optimizer パターン

Building effective agents で紹介した Evaluator-Optimizer パターンを、研究タスクに応用します。

orchestrator がドラフト作成
    ↓
evaluator が「足りない情報は何か」を指摘
    ↓
orchestrator が追加の sub-agent を起動して追加情報を集める
    ↓
ドラフトを更新
    ↓
(閾値を満たすまで、または N 回ループ)

Anthropic の Research 機能では、3-5 回のループを標準としています。1 回目で得た情報の穴を 2 回目で埋める、という使い方です。

終了条件

終了条件は 3 つ用意します。

実運用ではコスト上限が最も効きます。無限ループになる失敗モードを確実に止められるからです。

コスト 10-15 倍を正当化できるか

Anthropic は率直に書いています:

マルチエージェント構成は、単一エージェントに比べてトークン消費が 10-15 倍。

これだけ見ると「割に合わない」ように見えますが、以下のケースでは正当化されます。

1. 単一エージェントでは不可能なタスクに届く

20 ソースを横断する調査は、単一エージェントではコンテキスト不足でできません。10-15 倍の増加で可能になるなら、純増の価値があります。

2. 人間が同じ時間を費やすコストと比較する

同じ調査を人間アナリストがやると数時間から数日かかります。時給 5,000 円 × 8 時間 = 40,000 円。マルチエージェントが $20 で済めば、70 分の 1 のコストに収まります。

3. 並列実行で待ち時間を実質ゼロにする

逐次 1 時間かかる調査が、並列化で 10 分で終わるなら、人間の時間を節約した分の価値がトークンコストを上回ります。

4. 品質が単一エージェントを超える

複数ソースの統合と Evaluator ループでの品質向上を重ねることで、単一エージェントでは達成できない水準に到達します。

使い所を選ぶのが大事です。簡単な質問に Deep Research を使うのはオーバーキルになります。

自前で小さく実装する

最小構成(50 行)

TypeScript で、3 体の sub-agent を Promise.all で並列実行する最小構成を示します。

import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();

async function subAgent(topic: string, source: string): Promise<string> {
  const result = await client.messages.create({
    model: "claude-sonnet-5",
    max_tokens: 2000,
    messages: [{
      role: "user",
      content: `${source} について ${topic} の観点で調査し、重要な事実 5 件を要約してください。`
    }],
    tools: [{ type: "web_search_20250828", name: "web_search", max_uses: 5 }]
  });
  return result.content.filter(c => c.type === "text")[0].text;
}

async function researchOrchestrator(query: string): Promise<string> {
  // Step 1: Decompose
  const subtasks = [
    { source: "公式ドキュメント", focus: query },
    { source: "ニュース記事", focus: query },
    { source: "コミュニティ議論", focus: query },
  ];
  
  // Step 2: Parallel sub-agents
  const summaries = await Promise.all(
    subtasks.map(st => subAgent(st.focus, st.source))
  );
  
  // Step 3: Merge
  const merged = await client.messages.create({
    model: "claude-opus-5",
    max_tokens: 4000,
    messages: [{
      role: "user",
      content: `以下の 3 つの要約を統合して、重複を merge し、矛盾を明示した最終レポートを書いてください:\n\n${summaries.map((s, i) => `## ソース ${i+1}\n${s}`).join("\n\n")}`
    }]
  });
  
  return merged.content.filter(c => c.type === "text")[0].text;
}

これで 50 行、基本的なマルチエージェント研究システムが動きます。

本番で足すべきもの

ここから本番運用に持っていくには、次の 6 つを順に足していきます。

これらを積み重ねていくと、徐々に Anthropic Research や OpenAI Deep Research に近づきます。

MulmoTerminal での小規模マルチエージェント

MulmoTerminal の Round table 機能は、小規模な multi-agent 対話を 1 クリックで起動できる仕組みです。

これはフルスケールのマルチエージェント研究システムではありませんが、設計検討の段階で 3 体のエージェントに違う視点から意見を言わせる用途に向きます。Evaluator-Optimizer の人間介入版、とも言えます。

まとめ

単一エージェントの限界を超えられるのが、マルチエージェント構成の価値です。小さく始めて、必要になったら足していくのが現実的な進め方です。

関連リンク


Singularity Society はテクノロジー集団として MulmoClaude / MulmoTerminal / MulmoCast を開発しています。エンジニア・起業家向けの実践プログラム BootCamp も運営しています。

この記事をシェア

関連記事

記事一覧に戻る