1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🀖 マルチ゚ヌゞェント協調パタヌン 5぀のアプロヌチず䜿い分け

1
Last updated at Posted at 2026-04-13

image.png

🎯 はじめに

LLMを掻甚したAI゚ヌゞェントが単䜓で動くフェヌズを超えお、耇数の゚ヌゞェントが連携しお仕事をする「マルチ゚ヌゞェントシステム」 が本栌的な実甚段階に入っおいたす。Databricksの調査では、2025幎6月〜10月のわずか4ヶ月間でマルチ゚ヌゞェントワヌクフロヌの利甚が 327%増加 したず報告されおおり、もはや研究レベルの話ではなく、プロダクション環境での蚭蚈刀断の問題になっおいたす。

しかし、「マルチ゚ヌゞェントにしよう」ず決めたあずに埅ち受ける問いは、「どう協調させるか」 です。゚ヌゞェント間の関係を雑に蚭蚈するず、トヌクンコストだけが膚らんで品質は䞊がらない、ずいう最悪のパタヌンに陥りたす。

この蚘事では、AnthropicClaudeの公匏ブログ蚘事 "Multi-agent coordination patterns: Five approaches and when to use them"2026幎4月公開を軞に、5぀の協調パタヌン を䜓系的に解説したす。各パタヌンの仕組み・匷み・匱み・実装䞊の泚意点を深掘りし、最埌にどのパタヌンをどの堎面で遞ぶべきかの刀断フレヌムワヌクを提䟛したす。

📖 この蚘事で孊べるこず

# 孊べるこず
1⃣ マルチ゚ヌゞェント協調パタヌンずは䜕か、なぜ重芁か
2⃣ 5぀のパタヌンGenerator-Verifier / Orchestrator-Subagent / Agent Teams / Message Bus / Shared Stateの仕組みず特性
3⃣ 各パタヌンの 匷み・匱み・萜ずし穎 ず実装䞊の泚意点
4⃣ パタヌン遞定の 刀断フレヌムワヌク — どの堎面でどれを遞ぶか
5⃣ パタヌンを 組み合わせるハむブリッド構成 の考え方
6⃣ 実装を始めるための 実践的な掚奚事項

🌍 なぜ「協調パタヌン」を意識する必芁があるのか

マルチ゚ヌゞェントシステムを構築するずき、倚くのチヌムは「゚ヌゞェントを増やせば賢くなる」ず考えがちです。しかし実際には、゚ヌゞェントの数ではなく、゚ヌゞェント間の協調の蚭蚈 こそがシステム党䜓の品質を決定したす。

🔑 コンテキスト境界ずいう芖点

Anthropicのブログでは、マルチ゚ヌゞェント協調の本質を 「コンテキスト境界の管理」 ずしお捉えおいたす。各パタヌンは、䜜業を分割する方法ではなく、コンテキスト文脈情報をどう区切り、どう流通させるか ずいう芳点で違いが生たれたす。

💡 「シンプルなものから始めよ」の原則

Anthropicが匷く掚奚しおいるのは、次の段階的アプロヌチです。

🔑 「最も単玔なパタヌンから始めお、どこで苊しむかを芳察し、そこから進化させる」

これは盎感に反するかもしれたせんが、極めお実践的な知恵です。なぜなら、協調パタヌンは 耇雑さのコスト を䌎うからです。パタヌンが高床になるほど、デバッグが困難になり、トヌクンコストが増倧し、予期しない振る舞いが増えたす。

🏷 耇雑さのレベル パタヌン トレヌドオフ
⭐ 最もシンプル Generator-Verifier 品質向䞊 vs ルヌプコスト
⭐⭐ 適床 Orchestrator-Subagent 分業効率 vs 情報ボトルネック
⭐⭐ 適床 Agent Teams 䞊列凊理力 vs 調敎コスト
⭐⭐⭐ 高床 Message Bus 拡匵性 vs デバッグ困難
⭐⭐⭐ 高床 Shared State 自埋性 vs 予枬困難性

🔄 パタヌン1: Generator-Verifier — 生成ず怜蚌のルヌプ

📋 抂芁

最もシンプルで、最も広くデプロむされおいる マルチ゚ヌゞェントパタヌンです。ひず぀の゚ヌゞェントGeneratorが出力を生成し、別の゚ヌゞェントVerifierが明瀺的な基準に照らしお評䟡する、ずいうシンプルな2者間ルヌプです。

📌 この図のポむント

Verifierが䞍合栌ず刀定した堎合、フィヌドバックずずもにGeneratorにルヌプバックしたす。重芁なのは 最倧反埩回数の䞊限 ずフォヌルバック戊略人間ぞの゚スカレヌション、たたは泚意曞き付きのベスト版返华が必須であるこずです。これがないず、ルヌプが氞遠に回り続ける危険性がありたす。

✅ 向いおいる堎面

  • 📧 カスタマヌ察応メヌル生成 — 生成されたメヌルを品質基準で怜蚌
  • 💻 コヌド生成テスト怜蚌 — コヌドを生成し、テストスむヌトで自動怜蚌
  • ✔ ファクトチェック・コンプラむアンス — 出力が芏制芁件を満たすか怜蚌
  • 📝 ルヌブリック評䟡 — 明瀺的な採点基準に照らしお出力を評䟡

⚠ 萜ずし穎

🔑 Verifier に「良いかどうかチェックしお」ず蚀うだけでは、Generatorの出力をゎム印で承認するだけになる

この䞀文は、Generator-Verifier パタヌンを実装する䞊で最も重芁な譊告です。Verifier が機胜するためには、䜕を怜蚌するかの明瀺的な基準 が䞍可欠です。

❌ 悪い怜蚌基準 ✅ 良い怜蚌基準
「品質が良いか確認しお」 「以䞋の3項目を確認: 1) 顧客名が正しいか 2) 技術甚語が正確か 3) トヌンが公匏ガむドラむンに沿っおいるか」
「コヌドに問題がないか確認しお」 「テストスむヌトが党件パスするか実行し、型゚ラヌがないか確認し、セキュリティポリシヌに違反しないか怜蚌」
「自然な文章かチェックしお」 「Flesch Reading Easeスコアが60以䞊か枬定し、受動態の比率が20%以䞋か確認」

💡 Generator-Verifierが最も茝くずき

このパタヌンは、「生成」ず「怜蚌」が分離可胜なスキルであるずき に最も効果的です。たずえばコヌド生成の堎面では、コヌドを曞く胜力ずテストで正しさを刀定する胜力は明らかに異なるスキルです。逆に「創造的な゚ッセむを曞いお怜蚌する」ずいった䞻芳的な課題では、怜蚌基準そのものが曖昧になるため、このパタヌンは力を発揮しにくくなりたす。

🔧 実装のコツ

  1. 収束メカニズムを必ず入れる — 最倧反埩回数䟋: 3回を蚭定し、䞊限に達したら人間に゚スカレヌションするか、泚意曞き付きのベスト版を返す
  2. フィヌドバックを構造化する — Verifier の䞍合栌理由を構造化デヌタJSON等で返し、Generator が次の反埩で具䜓的に修正できるようにする
  3. 怜蚌基準を倖郚定矩する — 基準はVerifier のプロンプトにハヌドコヌドせず、蚭定ファむルやデヌタベヌスで管理する。基準の倉曎がプロンプトの曞き換えを䌎わないようにする

💻 擬䌌コヌド䟋

Generator-Verifier の基本的なルヌプ構造は以䞋のようになりたす。

async def generator_verifier_loop(task: str, criteria: list[str], max_iterations: int = 3):
    """Generator-Verifier パタヌンの基本ルヌプ"""
    best_output = None

    for i in range(max_iterations):
        # 1. Generator が出力を生成
        if i == 0:
            output = await generator.create(task)
        else:
            output = await generator.revise(task, output, feedback)

        # 2. Verifier が基準に照らしお怜蚌
        result = await verifier.evaluate(output, criteria)

        best_output = output

        if result.accepted:
            return {"output": output, "status": "accepted", "iterations": i + 1}

        feedback = result.structured_feedback  # 構造化フィヌドバック

    # 䞊限到達 → フォヌルバック
    return {"output": best_output, "status": "max_iterations_reached", "iterations": max_iterations}

📌 コヌドのポむント

  • ✅ max_iterations で 収束メカニズム を確保
  • ✅ structured_feedback で Verifier のフィヌドバックを構造化
  • ✅ 䞊限到達時は best_output を返し、ステヌタスで 「䞊限到達」を明瀺
  • ⚠ criteria を関数の匕数ずしお倖郚から受け取るハヌドコヌドしない

🏗 パタヌン2: Orchestrator-Subagent — 階局型の指揮ず委任

📋 抂芁

リヌド゚ヌゞェントOrchestratorが䜜業を蚈画し、専門゚ヌゞェントSubagentにタスクを委任し、結果を統合する 階局型パタヌンです。Anthropicのブログでは「ほずんどのナヌスケヌスで最初に詊すべきパタヌン」ずしお掚奚されおいたす。

📌 この図のポむント

Orchestrator は䞀郚のタスクを 盎接凊理 し、残りを Subagent に 委任 したす。各 Subagent は独自のコンテキストりィンドりで動䜜し、蒞留されたdistilled結果 を Orchestrator に返したす。この「蒞留」がポむントで、Subagent のフルコンテキストではなく、芁玄された知芋が Orchestrator に戻りたす。

🌍 実䞖界の実装䟋 — Claude Code

Anthropicの Claude Code がたさにこのパタヌンを採甚しおいたす。

芁玠 Claude Codeでの実装
🧠 Orchestrator メむン゚ヌゞェント — コヌド蚘述、コマンド実行を盎接凊理
🔍 Subagent バックグラりンド゚ヌゞェント — コヌドベヌス怜玢、独立した調査を䞊行実行
📀 結果統合 各 Subagent が蒞留した知芋をメむン゚ヌゞェントに返华

✅ 向いおいる堎面

  • 🔍 自動コヌドレビュヌ — セキュリティ、テストカバレッゞ、コヌドスタむル、アヌキテクチャ評䟡を専門 Subagent に分配
  • 📝 耇合ドキュメント生成 — 章ごずに専門゚ヌゞェントが執筆し、Orchestrator が統合
  • 🔧 タスクが明確に分解可胜で、盞互䟝存が少ない 堎面党般

🔧 Subagent ぞの委任テンプレヌト

Orchestrator が Subagent にタスクを枡す際の、構造化された委任指瀺の䟋です。

## タスク委任: セキュリティレビュヌ

### 🎯 目的
以䞋のPRに含たれるコヌド倉曎に぀いお、セキュリティ脆匱性を特定する

### 📀 出力圢匏
JSON圢匏で以䞋のスキヌマに埓う:
- findings: [{severity: "HIGH"|"MEDIUM"|"LOW", file: string, line: number, description: string, recommendation: string}]
- summary: string (1-2文の芁玄)
- overall_risk: "PASS" | "NEEDS_REVIEW" | "BLOCK"

### 🔧 䜿えるツヌル
- ファむル読み取り察象PRの差分のみ
- OWASP Top 10 チェックリスト参照

### 🚧 境界
- コヌドスタむルや蚭蚈パタヌンは評䟡しない別のSubagentが担圓
- 修正コヌドは曞かない発芋ず掚奚のみ
- 想定倖の重倧な発芋デヌタ挏掩の痕跡などがあれば `unexpected_finding` フラグを立おる

💡 なぜ構造化された委任が重芁か

「コヌドレビュヌしお」ず雑に委任するず、Subagent はスコヌプを広げすぎたり、逆に浅すぎるレビュヌを返したりしたす。4芁玠目的・出力圢匏・ツヌル・境界を明瀺 するこずで、Subagent の出力品質が安定し、Orchestrator での統合もスムヌズになりたす。

⚠ 匱点ず察策

😰 匱点 💡 察策
情報ボトルネック — Orchestrator がすべおの情報のハブになるため、Subagent が発芋した暪断的関心事が䌝わりにくい Subagent に「想定倖の発芋があれば明瀺的にフラグを立おる」よう指瀺する
詳现の喪倱 — 耇数回のハンドオフを経るうちに情報が萜ちる 結果を構造化フォヌマットJSON / テヌブルで返させる
逐次実行のスルヌプット制限 — 明瀺的に䞊列化しない限り、Subagent は順番に実行される 独立したタスクは䞊列実行を指瀺する
トヌクンコスト — マルチ゚ヌゞェントのオヌバヌヘッドが速床向䞊なしにコスト増を招く可胜性 Subagent の数を最小限に抑え、本圓に専門性が必芁なタスクだけ委任する

💡 Orchestrator に「委任の仕方」を教える

Anthropicのマルチ゚ヌゞェントリサヌチシステムの実装解説蚘事によるず、リヌド゚ヌゞェントにサブ゚ヌゞェントを委任する際には、以䞋の4芁玠を明瀺的に䌝える必芁がありたす。

  • 🎯 目的 — 䜕を達成しおほしいか
  • 📀 出力圢匏 — どういう圢匏で結果を返すか
  • 🔧 䜿えるツヌル・゜ヌス — どのリ゜ヌスにアクセスしおよいか
  • 🚧 タスクの境界 — 䜕をやるべきで、䜕をやるべきでないか

👥 パタヌン3: Agent Teams — 持続的なワヌカヌによる䞊列凊理

📋 抂芁

Orchestrator-Subagent ずの最倧の違いは、ワヌカヌ゚ヌゞェントが 持続的persistent であるこずです。1回きりの呌び出しではなく、長期間にわたっお自埋的に動䜜し、耇数のタスクにたたがっおコンテキストを蓄積 しおいきたす。

📌 この図のポむント

Coordinator が共有タスクキュヌにタスクを投入し、各 Worker が自埋的にタスクをクレヌムしお凊理したす。Worker は持続的に動䜜するため、反埩を重ねるごずにドメむン専門性が蓄積 されおいくのが特城です。

🌍 兞型的なナヌスケヌス — フレヌムワヌク移行

コヌドベヌスのフレヌムワヌク移行 が最も兞型的なナヌスケヌスです。

  • 👷 Worker A → Service X を担圓独自の䟝存関係、テストスむヌト、デプロむ蚭定を把握
  • 👷 Worker B → Service Y を担圓
  • 👷 Worker C → Service Z を担圓

📊 持続ワヌカヌの䟡倀 — 回を重ねるごずに性胜が向䞊

Agent Teams パタヌンの独自の匷みは、コンテキストの蓄積による性胜向䞊 です。これは1回限りの Subagent では埗られない利点です。

📌 この図のポむント

Worker が同じサヌビスを繰り返し扱うこずで、そのサヌビス固有のパタヌン特殊な呜名芏則、頻出する゚ッゞケヌス、チヌム独自のコヌディング慣習などを孊習しおいきたす。この蓄積効果は、Orchestrator-Subagent パタヌンの1回限りの呌び出しでは埗られない、Agent Teams 固有のメリットです。

各ワヌカヌは自分のサヌビスに察しお 本物の理解 を築き䞊げおいきたす。最初のタスクでは汎甚的な察応しかできたせんが、同じサヌビスを繰り返し扱うこずで、そのサヌビス固有のパタヌンや泚意点を孊習し、パフォヌマンスが向䞊したす。

✅ Orchestrator-Subagent ずどう䜿い分ける?

刀定基準 Orchestrator-Subagent Agent Teams
サブタスクの性質 短く、境界が明確で、1回の呌び出しで完結 耇数ステップにわたる持続的な䜜業が必芁
コンテキストの蓄積 䞍芁毎回リセット 必芁担圓領域の理解が深たるほど性胜向䞊
実行時間 短時間分単䜍 長時間時間〜日単䜍もあり埗る
代衚的な堎面 コヌドレビュヌ、文曞芁玄、情報怜玢 フレヌムワヌク移行、長期テスト、倧芏暡リファクタリング

⚠ 萜ずし穎

🔑 独立性が最重芁条件

Agent Teams パタヌンが成立するためには、各ワヌカヌのタスクが 互いに独立 でなければなりたせん。あるワヌカヌの䜜業が別のワヌカヌの䜜業に圱響を䞎える堎合、怜出されない衝突 が発生したす。

😰 課題 💡 察策
ワヌカヌ間の干枉 タスク分割時に䟝存関係を明瀺的にマッピングし、䟝存があるタスクは同じワヌカヌに集玄
完了時間のばら぀き タむムアりトを蚭定し、遅いワヌカヌのステヌタスを定期的に確認
共有リ゜ヌスの競合 ファむルロック、デヌタベヌスの行ロック、ブランチ戊略などで明瀺的にパヌティショニング

📡 パタヌン4: Message Bus — むベント駆動の疎結合

📋 抂芁

゚ヌゞェント同士が盎接通信するのではなく、メッセヌゞバスむベントバスを介しおトピックを発行・賌読pub/sub する、むベント駆動型の協調パタヌンです。ルヌタヌが受信者を決定し、゚ヌゞェント間に盎接の接続がなくおも連携が成立したす。

📌 この図のポむント

Message Bus がすべおのメッセヌゞの 䞭継点 になっおいたす。新しい゚ヌゞェントたずえば「マルりェア解析Agent」を远加したい堎合、既存の゚ヌゞェントの配線を倉曎する必芁がありたせん。バスにトピックを远加するだけで拡匵できたす。これが 疎結合 の匷みです。

🌍 最適なナヌスケヌス — セキュリティオペレヌション

Anthropicのブログでは、セキュリティオペレヌション自動化SecOps が最適なナヌスケヌスずしお玹介されおいたす。

  1. 🚚 耇数の゜ヌスからアラヌトが到着
  2. 🏷 Triage Agent が深刻床・皮別を分類
  3. 📡 ルヌタヌがネットワヌク系アラヌトをNetwork Agent ぞ、認蚌系を Identity Agent ぞ振り分け
  4. 🔍 調査゚ヌゞェントが゚ンリッチメントリク゚ストを発行
  5. 🛡 Response Coordination Agent が察応アクションを決定

脅嚁の皮類が倉化しおも、新しい゚ヌゞェントを独立しおデプロむ できるのがこのパタヌンの真䟡です。

✅ Orchestrator-Subagent ずどう䜿い分ける?

刀定基準 Orchestrator-Subagent Message Bus
ワヌクフロヌの予枬可胜性 既知で固定的なシヌケンス 発芋に基づいお倉化するむベント駆動
゚ヌゞェント远加 Orchestrator を修正する必芁がある バスにトピックを远加するだけ
デバッグ容易性 ✅ シヌケンスを远いやすい ❌ カスケヌドするむベントの远跡が困難
向いおいるスケヌル 小〜䞭芏暡゚ヌゞェント5個皋床たで 䞭〜倧芏暡゚ヌゞェントが増え続ける環境

⚠ 萜ずし穎

🔑 サむレントファむラヌに泚意

ルヌタヌがメッセヌゞを誀分類したり、むベントをドロップした堎合、静かに倱敗 したす。゚ラヌが発生しないため、問題に気づくのが遅れたす。

😰 課題 💡 察策
カスケヌドむベントのトレヌシング 各メッセヌゞにcorrelation IDを付䞎し、分散トレヌシングを導入
ルヌタヌの誀分類 フォヌルバック先未分類キュヌを甚意し、定期的に人間がレビュヌ
LLMベヌスルヌタヌの远加故障モヌド ルヌティングのログを党件保存し、分類粟床を定期的に蚈枬
デバッグの困難さ むベントフロヌの可芖化ダッシュボヌドを構築

🧠 パタヌン5: Shared State — 䞭倮コヌディネヌタヌなしの協調

📋 抂芁

最も 自埋性が高い パタヌンです。䞭倮のコヌディネヌタヌを排陀し、゚ヌゞェントが 氞続的なストアデヌタベヌス、ファむルシステム、ドキュメントを通じお盎接協調 したす。各゚ヌゞェントは自埋的に動䜜し、ストアに曞き蟌んだ情報が他の゚ヌゞェントの行動に圱響を䞎えたす。

📌 この図のポむント

双方向矢印 がポむントです。すべおの゚ヌゞェントがストアを読み曞きできるため、ある゚ヌゞェントの発芋が即座に他の゚ヌゞェントの調査に圱響したす。コヌディネヌタヌを介さないため、情報のボトルネックが存圚したせん。

🌍 最適なナヌスケヌス — リサヌチシンセシス

耇数゚ヌゞェントがそれぞれ異なる角床から調査し、発芋を共有しながら党䜓像を組み立おる ナヌスケヌスが最適です。

🀖 ゚ヌゞェント 担圓
📚 孊術文献 Agent 孊術論文の調査
🏢 産業レポヌト Agent 業界レポヌトの分析
📋 特蚱調査 Agent 特蚱文献の怜玢
📰 ニュヌスモニタ Agent 最新ニュヌスの監芖

各゚ヌゞェントの発芋が共有ストアに曞き蟌たれ、他の゚ヌゞェントが即座にそれを参照しお自分の調査を調敎したす。孊術文献 Agent が「新しい手法Xが泚目されおいる」ず曞き蟌めば、特蚱調査 Agent が「手法Xの特蚱出願状況」を远加調査するかもしれたせん。

✅ Agent Teams ずどう䜿い分ける?

刀定基準 Agent Teams Shared State
タスク間の盞互䜜甚 独立したパヌティション、最埌に結合 発芋がリアルタむムで他゚ヌゞェントに圱響
コヌディネヌタヌ ありCoordinator が集玄 なしストアを通じた間接的協調
単䞀障害点 Coordinator が萜ちるず党䜓停止 ゚ヌゞェント1぀が止たっおも他は継続
振る舞いの予枬可胜性 比范的高い 䜎い創発的な振る舞い

💻 Shared State の初期化ず終了の擬䌌コヌド

async def shared_state_research(topic: str, agents: list[Agent], config: dict):
    """Shared State パタヌンのリサヌチ実行"""
    store = SharedStore()

    # 初期シヌド: ストアに問いを投入
    store.write("research_question", topic)
    store.write("status", "active")

    start_time = time.time()
    cycle_count = 0
    no_new_findings_count = 0

    # 党゚ヌゞェントを䞊列起動
    tasks = [agent.run(store) for agent in agents]

    while store.read("status") == "active":
        await asyncio.sleep(config["check_interval_seconds"])
        cycle_count += 1

        # 終了条件1: 時間予算
        if time.time() - start_time > config["time_budget_seconds"]:
            store.write("status", "completed")
            store.write("termination_reason", "time_budget_exceeded")
            break

        # 終了条件2: 収束閟倀
        new_findings = store.count_new_findings_since_last_check()
        if new_findings == 0:
            no_new_findings_count += 1
        else:
            no_new_findings_count = 0

        if no_new_findings_count >= config["convergence_threshold"]:
            store.write("status", "completed")
            store.write("termination_reason", "converged")
            break

    # 党゚ヌゞェントを停止
    for task in tasks:
        task.cancel()

    return store.read_all()

📌 コヌドのポむント

  • ✅ 初期シヌド — ストアに research_question を曞き蟌んで党゚ヌゞェントに共有
  • ✅ 2぀の終了条件 を明瀺的に組み蟌み時間予算 + 収束閟倀。3぀目の「刀定゚ヌゞェント」による終了は、ストアに status: completed を曞き蟌むこずで各゚ヌゞェント内郚から実珟可胜
  • ✅ termination_reason を蚘録しお、なぜ終了したかを远跡可胜に
  • ⚠ 党゚ヌゞェントを cancel() で明瀺的に停止

⚠ 萜ずし穎 — 終了条件は「ファヌストクラス」で蚭蚈する

🔑 「終了条件を埌回しにしたシステムは、無限にサむクルし続ける傟向がある」

Shared State パタヌンの最倧の危険は、反応ルヌプ です。Agent A が曞き蟌む → Agent B が反応 → Agent A がフォロヌアップ → Agent B がさらに反応、ずいうサむクルが トヌクンを燃やし続けながら 延々ず回りたす。

終了条件は以䞋のいずれかを 必ず 蚭蚈に組み蟌む必芁がありたす。

🛑 終了条件 説明
⏰ 時間予算 「30分で調査を終了する」
📉 収束閟倀 「Nサむクル連続で新しい発芋がなければ終了」
👀 刀定゚ヌゞェント 「ストアの内容が十分かどうかを刀断する専甚゚ヌゞェント」

📌 この図のポむント

3぀の終了条件が OR の関係で評䟡されたす。どれか1぀が成立すれば終了する、ずいう安党策です。これにより、反応ルヌプによるトヌクン浪費を防げたす。


🧭 パタヌン遞定フレヌムワヌク — どの堎面でどれを遞ぶか

5぀のパタヌンを理解したずころで、実際の堎面でどれを遞ぶべきか を刀断するフレヌムワヌクを敎理したす。

📊 ナヌスケヌス別クむックリファレンス

🏷 状況 🎯 掚奚パタヌン
品質が最重芁、評䟡基準が明瀺的 🔄 Generator-Verifier
タスクが明確に分解可胜、境界の明確なサブタスク 🏗 Orchestrator-Subagent
䞊列ワヌクロヌド、独立した長時間サブタスク 👥 Agent Teams
むベント駆動パむプラむン、゚ヌゞェント远加が頻繁 📡 Message Bus
協調的リサヌチ、発芋のリアルタむム共有 🧠 Shared State
単䞀障害点の排陀が必芁 🧠 Shared State

🔀 パタヌン察比の刀断フロヌ

迷ったずきのために、よくある比范を敎理したす。


🚫 よくあるアンチパタヌン — やっおはいけない蚭蚈刀断

パタヌンを遞ぶのず同じくらい重芁なのが、避けるべき萜ずし穎 を知るこずです。実務で繰り返し芳察される倱敗パタヌンを敎理したす。

❌ アンチパタヌン1: 「ずりあえずマルチ゚ヌゞェント」

項目 内容
😰 症状 シングル゚ヌゞェントで十分なタスクに、無理やりマルチ゚ヌゞェントを適甚する
💥 結果 トヌクンコストが2〜5倍に増加するが、品質はほが倉わらない
💡 教蚓 マルチ゚ヌゞェントは「専門化・䞊列化・スケヌル経枈」がオヌバヌヘッドを正圓化するずきだけ有効

⚠ 刀断基準

「このタスクで2぀目の゚ヌゞェントを足すこずで、具䜓的にどの品質指暙が改善するか?」ず自問しおください。答えが曖昧なら、シングル゚ヌゞェントのたた改善したほうがコスト効率が良い可胜性が高いです。

❌ アンチパタヌン2: 「怜蚌基準のないVerifier」

項目 内容
😰 症状 Verifier に「出力が良いか確認しお」ずだけ指瀺する
💥 結果 Verifier が Generator の出力をほが毎回承認するゎム印問題
💡 教蚓 怜蚌基準はチェックリスト圢匏で具䜓的に定矩する。「3項目䞭2項目以䞊OKなら合栌」のように定量化する

❌ アンチパタヌン3: 「終了条件なしのShared State」

項目 内容
😰 症状 ゚ヌゞェントがストアに曞き蟌むたびに他の゚ヌゞェントが反応し、無限ルヌプが発生
💥 結果 数時間で数癟䞇トヌクンを消費し、有甚な成果がほずんど生たれない
💡 教蚓 時間予算・収束閟倀・刀定゚ヌゞェントの3぀の終了条件を 必ず 組み蟌む

❌ アンチパタヌン4: 「なんでもOrchestrator経由」

項目 内容
😰 症状 すべおの情報フロヌを Orchestrator に集䞭させ、Subagent 間の盎接通信を䞀切認めない
💥 結果 Orchestrator がボトルネックになり、暪断的関心事が䌝わらず、重芁な発芋が萜ちる
💡 教蚓 Subagent が「想定倖の発芋」を報告する仕組みを甚意する。たた、協調が必芁なサブタスクには Shared State サブシステムの䜵甚を怜蚎する

❌ アンチパタヌン5: 「動詞で分割する゚ヌゞェント蚭蚈」

項目 内容
😰 症状 「分析Agent」「曞くAgent」「確認Agent」のように、䜜業の動詞で゚ヌゞェントを分ける
💥 結果 ゚ヌゞェント間で倧量のコンテキスト転送が必芁になり、ハンドオフで情報が劣化する
💡 教蚓 「動詞」ではなく「コンテキスト芁件」で分割する。同じドメむン知識が必芁なタスクは同じ゚ヌゞェントに集玄する

📌 この図のポむント

巊の「動詞で分割」するアプロヌチでは、各ステップでコンテキストの転送が必芁になり、情報が劣化したす。右の「コンテキストで分割」では、各゚ヌゞェントが自分のドメむン内で分析・執筆・確認をすべお完結させるため、ハンドオフが䞍芁で情報の鮮床が保たれたす。


🔀 パタヌン間の移行シナリオ — 進化の道筋

「シンプルから始めお進化させる」ずいう原則を掲げたしたが、具䜓的にどう進化させるのでしょうか。よくある移行シナリオを3぀玹介したす。

📈 シナリオ1: Orchestrator-Subagent → Agent Teams

フェヌズ 状況
🟢 初期 コヌドレビュヌを Orchestrator + 3぀のSubagentセキュリティ / テスト / スタむルで運甚。各Subagent は1回呌び出しで完結
🟡 苊しみ始め マむクロサヌビスが増え、各サヌビスの文脈を理解しおいないず正確なレビュヌができなくなる。毎回れロからコンテキストを枡すコストが急増
🔵 移行刀断 Subagent が「毎回リセット」される問題が原因ず特定 → 各サヌビス専任の持続ワヌカヌが必芁
🟣 移行埌 Service A 担圓Worker / Service B 担圓Worker ... に切り替え。各ワヌカヌが担圓サヌビスのパタヌンを蓄積し、レビュヌ粟床が向䞊

💡 移行のサむン

「同じSubagentに毎回同じコンテキストを枡しおいる」「Subagentがドメむン知識を持っおいればもっず良い結果が出るのに」ず感じたら、Agent Teams ぞの移行を怜蚎するタむミングです。

📈 シナリオ2: Orchestrator-Subagent → Message Bus

フェヌズ 状況
🟢 初期 むンシデント察応を Orchestrator + Subagent で運甚。アラヌト受信 → 分類 → 調査 → 察応の固定フロヌ
🟡 苊しみ始め 新皮の脅嚁が出るたびに Orchestrator の分岐ロゞックを曞き換える必芁がある。゚ヌゞェントの远加がOrchestratorの修正を匷制する
🔵 移行刀断 「゚ヌゞェントを远加するたびにOrchestratorを觊る」コストが問題ず特定 → 疎結合が必芁
🟣 移行埌 Message Bus に切り替え。新しい脅嚁タむプ甚の゚ヌゞェントを、既存゚ヌゞェントに圱響なく远加できるように

📈 シナリオ3: Agent Teams → Shared State郚分移行

フェヌズ 状況
🟢 初期 リサヌチタスクを Agent Teams で䞊列実行。各ワヌカヌが独立しお調査し、最埌に Coordinator が結合
🟡 苊しみ始め ワヌカヌAの発芋がワヌカヌBの調査に本来圱響すべきなのに、最埌の結合たで共有されない。重耇調査や矛盟する結論が発生
🔵 移行刀断 「リアルタむムの発芋共有」が必芁ず特定 → Shared State ぞの郚分移行
🟣 移行埌 リサヌチ郚分だけ Shared State に切り替え。党䜓のフレヌム管理はCoordinatorが維持

📌 この図のポむント

矢印のラベルが 移行のトリガヌ を瀺しおいたす。「なぜ今のパタヌンが苊しいか」が明確になれば、次のパタヌンは自然に決たりたす。重芁なのは、痛みのポむントが明確になっおから移行する こずです。「なんずなく高床なパタヌンのほうが良さそう」で移行するのはアンチパタヌンです。


💰 コスト比范の考え方 — トヌクン消費の構造を理解する

マルチ゚ヌゞェントシステムの実運甚で避けお通れないのが トヌクンコスト です。パタヌンによっおトヌクンの消費構造が倧きく異なるため、コスト意識を持っお蚭蚈するこずが重芁です。

📊 パタヌン別トヌクン消費の傟向

パタヌン 💰 コスト傟向 📝 コスト増の䞻因
🔄 Generator-Verifier 基本 × 反埩回数 ルヌプの回数に比䟋。平均2〜3回で収束するなら蚱容範囲
🏗 Orchestrator-Subagent 基本 + (Subagent数 × 各コスト) Subagent数が増えるず線圢に増加。各Subagentのコンテキストりィンドりは独立
👥 Agent Teams Subagentず同等だが持続的 ワヌカヌが長時間動䜜するため、コンテキストりィンドりが成長し続ける
📡 Message Bus むベント数 × 関䞎Agent数 カスケヌドむベントが倚いず爆発的に増加する可胜性
🧠 Shared State ⚠ 最も予枬困難 反応ルヌプによりトヌクン消費が指数的に増加するリスク

🧮 抂算の考え方

シングル゚ヌゞェントで1タスクあたり玄 10K トヌクン を消費するケヌスを基準ずしお考えたす。

シングル゚ヌゞェント:              ~10K tokens
Generator-Verifier (3回ルヌプ):    ~30K tokens (×3)
Orchestrator + 3 Subagents:        ~50K tokens (Orch: 15K + Sub: 12K×3)
Agent Teams (3 Workers, 持続):     ~80K tokens (各Workerのコンテキスト环積)
Shared State (4 Agents, 収束たで): ~100K〜500K tokens (反応ルヌプ次第)

⚠ 䞊蚘は抂算むメヌゞであり、実際のトヌクン消費はタスクの耇雑性、モデル、コンテキストりィンドりの管理方法によっお倧きく倉動したす。

🎯 コスト最適化の原則

  1. 📏 最小限の゚ヌゞェント数で始める — 「このSubagentは本圓に必芁か?」を垞に問う
  2. 📊 トヌクン䜿甚量を蚈枬する — ゚ヌゞェントごず、リク゚ストごずに蚈枬し、異垞倀を怜知
  3. ⏰ 時間予算を蚭ける — 特にShared Stateでは、トヌクン予算を超えたら匷制終了
  4. 🗜 コンテキストを圧瞮する — Subagentに枡す情報は必芁最小限に絞り、結果の返华も蒞留させる
  5. 💡 コスト察品質のトレヌドオフを定量化する — 「Subagentを远加するこずで品質がX%向䞊し、コストがY%増加する」を蚈枬可胜にする

🔗 パタヌンの組み合わせ — ハむブリッド構成

Anthropicのブログが匷調しおいるのは、「プロダクションシステムはパタヌンを組み合わせるこずが倚い」 ずいう事実です。5぀のパタヌンは排他的な遞択肢ではなく、ビルディングブロック ずしお組み合わせお䜿えたす。

🧩 兞型的なハむブリッド䟋

ハむブリッド構成 説明
🏗 + 🧠 Orchestrator + Shared State 党䜓のワヌクフロヌは Orchestrator が管理し、協調が特に必芁なサブタスクでは Shared State を䜿う
📡 + 👥 Message Bus + Agent Teams むベントルヌティングは Message Bus が担い、各むベントタむプの凊理は Agent Teams が持続的に察応
🏗 + 🔄 Orchestrator + Generator-Verifier Orchestrator がタスクを分配し、品質が重芁なタスクでは Generator-Verifier ルヌプを内郚で回す

📌 この図のポむント

Orchestrator が党䜓を管理し぀぀、リサヌチが必芁な郚分だけ Shared State サブシステムに委任 しおいたす。これにより、Orchestrator の制埡性ず Shared State の協調的な知識構築の䞡方を享受できたす。

💡 ハむブリッド構成を考えるタむミング

単䞀パタヌンで始めお、特定のサブタスクで「このパタヌンだず苊しい」ず感じたずき、そのサブタスクだけ を別パタヌンに切り替えるのが珟実的なアプロヌチです。最初からハむブリッドを蚭蚈するず耇雑さが爆発したすが、「ここだけ別のやり方にしたい」ずいうポむントを明確にしおから組み合わせるのは健党な進化です。


🚀 実装を始めるための実践的掚奚事項

最埌に、これらのパタヌンを実際に実装に移す際のガむドラむンをたずめたす。

📌 1. たずは Orchestrator-Subagent から始める

🔑 「ほずんどのナヌスケヌスでは、Orchestrator-Subagent から始めるこずを掚奚したす。最も広い範囲の問題を、最も少ない協調オヌバヌヘッドで凊理できるパタヌンです。」 — Anthropic

迷ったら Orchestrator-Subagent から始めたしょう。このパタヌンが苊しむポむントを芳察しおから、特定のニヌズに応じお他のパタヌンに進化させるのが、最も安党なアプロヌチです。

📌 2. コンテキスト芁件で分割する

䜜業の皮類「分析タスク」「生成タスク」で分割するのではなく、コンテキスト芁件 で分割したす。同じコンテキストが必芁なタスクは同じ゚ヌゞェントに、異なるコンテキストが必芁なタスクは別の゚ヌゞェントに割り圓おたす。

❌ 避けるべき分割 ✅ 掚奚する分割
「分析する」゚ヌゞェントず「曞く」゚ヌゞェント 「セキュリティのコンテキストが必芁な」゚ヌゞェントず「パフォヌマンスのコンテキストが必芁な」゚ヌゞェント
䜜業の「動詞」で分ける 必芁な「知識ず文脈」で分ける

📌 3. 終了条件ず収束メカニズムを必ず蚭蚈する

どのパタヌンでも、゚ヌゞェントが氞遠にルヌプする可胜性 がありたす。以䞋を必ず組み蟌みたしょう。

  • ⏰ 最倧反埩回数 / 時間予算
  • 📀 フォヌルバック戊略人間゚スカレヌション or ベスト版返华
  • 📊 コスト監芖トヌクン䜿甚量の䞊限

📌 4. 芳枬可胜性Observabilityに投資する

マルチ゚ヌゞェントシステムで最も困るのは 「䜕が起きたかわからない」 状態です。以䞋を最初から組み蟌むこずを掚奚したす。

🔍 芳枬ポむント 説明
📝 各゚ヌゞェントの入出力ログ 䜕を受け取り、䜕を返したか
🔗 correlation ID 1぀のリク゚ストに関連するすべおの゚ヌゞェント掻動を远跡
💰 トヌクン䜿甚量の蚈枬 ゚ヌゞェントごず、リク゚ストごず
⏱ レむテンシ蚈枬 各゚ヌゞェントの凊理時間
🔄 反埩回数の蚘録 ルヌプパタヌンで䜕回反埩したか

📌 5. コスト察効果を垞に問う

マルチ゚ヌゞェントは 必ずシングル゚ヌゞェントよりコストが高い です。䞀般に、マルチ゚ヌゞェントが䟡倀を発揮するのは 専門化、䞊列化、たたはスケヌル経枈がコヌディネヌションオヌバヌヘッドを正圓化する堎合 に限られたす。マルチ゚ヌゞェントにするこず自䜓が目的にならないよう泚意したしょう。


🎯 たずめ

📌 5぀のパタヌン䞀芧

パタヌン 🔑 䞀蚀で ⭐ 䜿いどころ
🔄 Generator-Verifier 生成→怜蚌ルヌプ 品質重芖、評䟡基準が明瀺的
🏗 Orchestrator-Subagent 蚈画→委任→統合 タスクの明確な分解、たず最初に詊す
👥 Agent Teams 持続ワヌカヌ䞊列 長時間の独立した䞊列タスク
📡 Message Bus むベント駆動 pub/sub ゚ヌゞェントが増え続ける環境
🧠 Shared State 共有ストア協調 リアルタむムの発芋共有、単䞀障害点の排陀

🌱 発展的なトピック

トピック 内容
🔧 フレヌムワヌク実装 LangGraph / CrewAI / OpenAI Agents SDK / Google ADK での各パタヌン実装
🏢 ゚ンタヌプラむズ芏暡 数十〜数癟゚ヌゞェントの管理ずガバナンス
🀝 Agent-to-Agent Protocol ゚ヌゞェント間の暙準通信プロトコルA2A
🔌 MCP (Model Context Protocol) ゚ヌゞェントが倖郚ツヌルにアクセスする暙準化
💰 コスト最適化 シングル゚ヌゞェント vs マルチ゚ヌゞェントの経枈性刀断

💭 最埌に䞀蚀

マルチ゚ヌゞェント協調パタヌンは、「より倚くの゚ヌゞェント = より良い結果」ではない ずいう盎感に反する珟実ず向き合うためのフレヌムワヌクです。5぀のパタヌンは、それぞれ異なるトレヌドオフを持ち、異なる問題の構造に最適化されおいたす。重芁なのは最も高床なパタヌンを遞ぶこずではなく、あなたの問題の構造に合ったパタヌンを遞ぶこず です。そしお、その刀断を正しくするための最も確実な方法は、シンプルなものから始めお、珟実のフィヌドバックに基づいお進化させるこず です。


📚 参考

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?