オーケストレーションパターン · LangGraph vs CrewAI · MCP + A2A · 本番可観測性
Cursor で動く単一Agentデモを出荷した直後、本番からは共有トークン予算の下で並列リサーチ、ツール分離、人間承認ゲートが求められます。モノリシックな1体構成はコンテキスト上限、何でも屋ドリフト、真の並行性ゼロ、単一障害点に直面します。本ガイドは マルチAgentシステム(MAS) へ移行する AI エンジニアとテックリード向けです。6つのオーケストレーションパターン、LangGraph vs CrewAI vs AutoGen 選定マトリクス、MCP + A2A プロトコルスタック、6ステップ本番Runbook(PostgresSaver、HITL interrupt、サーキットブレーカー)、1,642トレースの MAST可観測性データ、落とし穴、2026年トレンドマップを網羅します。
LLM Agent 1体でもデモは映えます。システムプロンプト1つ、ツールリスト1つ、会話スレッド1本——しかし実負荷ではすぐボトルネックになります。Google 社内の Agent Bake-Off ベンチマークでは、マルチAgentチームが複雑ワークフローを 10分で完了し、単一Agentは 60分かかった——6倍の高速化です。別途 AdaptOrch 研究は、基盤モデルの差し替えより オーケストレーション・トポロジがタスク成功率の分散を 12〜23%多く説明したと報告しています。アーキテクチャがモデル選びに勝る、ということです。
フレームワークを選ぶ前に、MAS分割を迫る構造的限界を整理しましょう。
コンテキスト窓の飽和:リサーチ結果、コード、ログ、ツール出力が1スレッドに蓄積します。検索品質が落ち、10ターン前の制約を忘れます。
何でも屋プロンプト:1ペルソナで SQL チューニング、法務レビュー、UIコピーを同時にこなすことはできません。指示の干渉が幻覚率を上げます。
真の並行性がない:ツール呼び出しが直列で互いをブロックします。独立サブタスク(3サイトスクレイプ、3テストスイート実行)が壁時計時間を無駄にします。
単一障害点:1回のツール失敗や暴走ループでセッション全体が死にます。リトライやロールバックの隔離ドメインがありません。
コスト帰属が不透明:どのステップがトークンを消費したか経理が答えられません。Agent別予算がなければ、冗長なリサーチAgentが月次上限を枯らします。
トポロジがモデルに勝つ。 AdaptOrch はオーケストレーション構造が成果分散の 12〜23%をモデル選択より左右すると示しました。GPT ティアを上げる前にグラフを設計してください。
マルチAgentシステム(MAS) は、状態を共有しサブタスクを委譲し、専門能力を公開する LLM 駆動Agentの協調集合です。各Agentはプロンプトの変種ではなく、独自のツール、メモリスコープ、終了ポリシーを持つ境界付きランタイムです。
| 特性 | LLM Agentにおける意味 | 本番シグナル |
|---|---|---|
| 自律性 | ステップごとの人間入力なしに次アクションを選択 | ガードレール必須:最大反復回数、予算上限 |
| 反応性 | ツール結果とピアメッセージに応答 | 自由テキストだけでなく構造化メッセージスキーマが必要 |
| 能動性 | 目標未達時にサブタスクを開始 | スーパーバイザー検査なしでは暴走ループの原因に |
| 社会性 | 他Agentへ委譲・交渉 | A2A ディスカバリと明確なハンドオフ契約に依存 |
| トポロジ | 制御フロー | 向いている用途 | リスク |
|---|---|---|---|
| 集中型 | 1つのオーケストレータが全メッセージをルーティング | 監査証跡の予測可能性、厳格なポリシー適用 | オーケストレータのコンテキスト肥大;ルーターが SPOF |
| 分散型 | ピアが直接通信;単一ボスなし | 耐障害スワーム、創発的協調 | デバッグ困難;終了保証なし |
| 階層型 | スーパーバイザがワーカーへ委譲;ワーカーは報告 | 承認段階のあるエンタープライズワークフロー | スーパーバイザプロンプトの複雑化;レイテンシ積み上げ |
2026年の本番スタックの多くは、認証と予算強制のための薄い集中ルーターを備えた 階層型 がデフォルトです——上表の1行目と3行目のハイブリッドです。
パターンは組み合わせ可能です。カスタマーサポートスタックでは スーパーバイザ が並列リサーチャーへファンアウトし、合成結果をライターへパイプラインする構成が典型です。依存構造に合う最小パターンセットを選びましょう。
ステージが固定順で実行されます:取り込み → 分析 → 下書き → レビュー。状態は共有グラフノードを通過します。各ステップが前段出力に依存する場合(ETL、レポート生成)に最適です。LangGraph では型付き状態リデューサを持つ線形 StateGraph としてモデル化します。
オーケストレータが N 個の独立ブランチを生成し、結果を集約します。LangGraph の Send API がマップステップから動的ワーカーノードをディスパッチし、リデューサノードが出力をマージします。マルチソースリサーチ、アンサンブル投票、シャード単位コードレビューに使います。
from langgraph.types import Send
def fan_out(state):
return [Send("research_worker", {"query": q}) for q in state["queries"]]
def fan_in(state):
return {"report": synthesize(state["worker_results"])}
スーパーバイザが意図を分類し専門家(コーダー、DBA、レビュアー)へルーティングします。キーワード高速パス を追加しましょう:高信頼度意図を正規表現や埋め込みでマッチさせれば LLM ルーティング呼び出しをスキップし、FAQ系クエリのレイテンシとトークンを節約できます。
Agentが handoff ツールで会話制御を引き渡します。Microsoft AutoGen が得意分野で、次の発言者が創発するオープンエンドなブレインストーミングに向きます。固定グラフより監査は難しくなります。
Agentは直接メッセージではなく共有アーティファクトストア(ブラックボード)を読み書きします。プランナーが目標を投稿し、専門家がセクションを追記します。共同ドキュメント編集や、ストア層で競合解決する共有ナレッジベースに適合します。
実システムはパターンを組み合わせます:階層スーパーバイザ → リサーチ用並列ファンアウト → 最終パッケージング用逐次パイプライン。コードを書く前に、どの区間が同期か非同期かを明示的に描きましょう。
| パターン | 並行性 | デバッグ容易性 | 典型フレームワーク |
|---|---|---|---|
| 逐次パイプライン | 低 | 高 | LangGraph、CrewAI sequential |
| ファンアウト / ファンイン | 高 | 中 | LangGraph Send |
| スーパーバイザ・ワーカー | 中 | 高 | LangGraph、CrewAI hierarchical |
| スワーム | 中 | 低 | AutoGen、Swarm SDK |
| ブラックボード | 中 | 中 | カスタム + 共有ストア |
| ハイブリッド | 可変 | 中 | LangGraph(最多) |
3つとも2026年に本番ユーザーがいますが、最適化する制御スタイルが異なります。ブランド嗜好ではなくトポロジに合わせて選びましょう。
| 観点 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| メンタルモデル | ステートフル有向グラフ | ロールベースのクルーとタスク | 会話型Agent + ハンドオフ |
| 状態永続化 | 第一級チェックポイント(PostgresSaver) | メモリバックエンド、グラフネイティブ性は低め | Agentごとのチャット履歴 |
| Human-in-the-loop | ネイティブ interrupt() ノード | タスクレベルの人間入力フック | UserProxyAgent パターン |
| 並列性 | Send API、サブグラフ | 非同期タスク実行 | グループチャット並列 |
| 最適用途 | 複雑分岐、本番チェックポイント | 迅速なクループロトタイプ、ロール明確化 | 探索的マルチAgentチャット |
| 注意点 | グラフ DSL の学習曲線が急 | 大規模時の細粒度制御が弱い | 非決定的ハンドオフチェーン |
永続チェックポイント + HITL承認ゲートが必要? → LangGraph。
午後に読みやすいロール YAML でデモクルーが必要? → CrewAI。
オープンエンドな Agent 間交渉が必要? → AutoGen(または Swarm)。
グラフ制御とチャットハンドオフの両方が必要? → LangGraph オーケストレータが AutoGen ワーカーをラップ。
ツール統合とAgent協調は別問題です。2026年のスタックは 二層プロトコル として扱います。下層が垂直ツールアクセス、上層が水平Agent委譲です。
| 層 | プロトコル | 接続対象 | 比喩 |
|---|---|---|---|
| 垂直 | MCP(Model Context Protocol) | Agent ↔ ツール、データ、プロンプト | ツール発見の USB-C |
| 水平 | A2A(Agent-to-Agent) | Agent ↔ Agent 委譲 | サービスメッシュの HTTP |
各Agentは Agent Card を公開します——能力、入力スキーマ、エンドポイント URL を記述する JSON ドキュメントです。ピアは discover_and_delegate を呼び、ハードコードされたAgentリストなしでサブタスクをルーティングします。
{
"name": "sql-analyst-agent",
"description": "Read-only Postgres analysis and explain plans",
"url": "https://agents.internal/a2a/sql-analyst",
"capabilities": ["query", "explain", "schema-introspect"],
"input_schema": {
"type": "object",
"properties": { "question": { "type": "string" } }
}
}
async def discover_and_delegate(task: str, registry: AgentRegistry):
card = await registry.find_best_match(task)
if not card:
raise NoAgentError(task)
payload = {"task": task, "caller": "supervisor-01"}
return await a2a_client.send(card.url, payload)
MCP は各Agent内の tools/list を担当し、A2A はどのAgentがタスクを所有するかを担当します。垂直層の詳細は MCPプロトコルガイド をご覧ください。
デモはインメモリ状態を使います。本番にはクラッシュ復旧、高リスク操作の人間承認、コスト上限が必要です。カスタムインフラの前に、4つのプリミティブで大半のチームをカバーできます。
MAX_ITERATIONS = 25
class ProductionGuardrails:
def __init__(self, budget: TokenBudgetManager, breaker: CircuitBreaker):
self.budget = budget
self.breaker = breaker
self.iterations = 0
def before_step(self, agent_id: str, est_tokens: int):
self.iterations += 1
if self.iterations > MAX_ITERATIONS:
raise RunawayLoopError()
self.budget.charge(agent_id, est_tokens)
self.breaker.check()
まず紙にグラフを描く:LangGraph ノードを書く前に、同期エッジ、並列ブランチ、HITL interrupt ポイントをマークします。
PostgresSaver を配線:チェックポイントをマネージド Postgres に向け、プロセス kill 後の再開を検証します。
Agentごとに MCP ツールを登録:各Agentを最小権限ツールサブセットにスコープ;巨大ツールリストを共有しないこと。
interrupt ノードを追加:デプロイ、削除、決済、PIIエクスポートツールを人間承認の裏に置きます。
TokenBudgetManager + CircuitBreaker を有効化:Agent別日次上限を設定;消費率80%でアラートします。
機能より先に可観測性を出荷:Agentステップごとに OpenTelemetry スパン;Agent #7 を追加する前に CORE_METRICS ダッシュボードを用意します。
ヒント:カオスドリルを実行しましょう。グラフ途中でワーカーを kill し再起動し、PostgresSaver が最終チェックポイントから重複副作用なしで再開することを確認します。
帰属できなければ修正もできません。MAST 研究は 1,642件のマルチAgent実行トレース を分析し、失敗モードが予測可能にクラスタ化することを示しました——大半はモデル IQ 不足ではなく設計問題です。
チームはモデルに多額投資する一方、テレメトリには投資不足です。MAST 回答者は エンジニアリング時間の57%を本番ハードニング に使い、可観測性はわずか8%——この不均衡が同じ失敗を本番で繰り返させます。
すべてのAgent呼び出しを OpenTelemetry スパンでラップします:agent_id、parent_span、tool_name、token_in/out、latency_ms。既存 APM にエクスポートします。CORE_METRICS を最小ダッシュボードとして定義しましょう:
| メトリクス | 重要な理由 |
|---|---|
| task_success_rate | ステップ精度ではなくエンドツーエンド目標達成 |
| tokens_per_success | コスト効率;スパイクは暴走ループを示す |
| p95_agent_latency | 遅い専門Agentやツールを特定 |
| handoff_error_rate | A2A スキーマ不一致とドロップメッセージ |
| hitl_queue_depth | グラフ進行をブロックする承認ボトルネック |
トレースのサンプルに LLM-as-Judge を追加します。別の評価Agentが目標整合性と事実一貫性をスコアリングします。全リクエストにインラインで使わず、オフライン回帰テストに使います(コスト考慮)。
コンテキスト汚染:ワーカーが生 HTML ダンプ全体を上流に返します。切り詰め、要約、ブラックボードに保存;ペイロードではなくハンドルを渡しましょう。
暴走ループ:Agentが無限に再委譲します。MAX_ITERATIONS、エッジ訪問回数、スーパーバイザ停止トークンを強制します。
過剰設計:3ステップワークフローに15 Agent。ドメインが真に分離されていない限り 3〜8 Agent のスイートスポットに留まりましょう。
デモと本番のギャップ:インメモリ状態と予算なし。顧客公開前に ProductionGuardrails でグラフをラップします。
並列ブランチ同期:全ブランチ完了前にファンインが走ります。LangGraph エッジに defer=True を使い、リデューサが全 Send ワーカーを待つようにします。
graph.add_edge("fan_out", "fan_in", defer=True)
警告:最も高コストなミスは、プロンプト問題を Agent 追加で直そうとすることです。別ノードを増やす前に、専門家プロンプトとハンドオフスキーマを調整しましょう。
サブタスクは独立? はい → 並列ファンアウト。いいえ → 続行。
順序は厳密? はい → 逐次パイプライン。いいえ → 続行。
創発的対話が必要? はい → スワーム / AutoGen。いいえ → スーパーバイザ・ワーカー。
クラッシュセーフ再開が必要? はい → LangGraph + PostgresSaver。いいえ → CrewAI 迅速パス。
チーム横断Agent発見? はい → Agent Card 公開 + A2A。ツールのみ → Agentごとに MCP。
ノートPC上のAgentは蓋を閉じるとスリープし、長時間 LangGraph チェックポイントのプロセス監視が不安定で、macOS ネイティブツールチェーン(Xcode、Keychain、Apple公証 CI)に苦戦します。純粋な Linux VPS はステートレス API ワーカーには向きますが iOS ビルドファームには不向きです。マルチAgentグラフを7×24、iOS CI/CD パイプライン、MCP ツールサーバーと並行稼働させるチームには、VpsMesh Mac Mini M4 クラウドレンタル が稼働時間、リモート KVM、予測可能な月次 OpEx を1台にまとめます。Mac Mini M4 レンタル料金ページでプラン比較、ヘルプセンターで Runbook 参照、またはオンライン注文で1か月パイロットを検証してからオーケストレーションスタックに本コミットしてください。
多くの本番システムは 専門Agent 3〜8体 で構成します。3体未満ではオーケストレーションのオーバーヘッドに見合わず、8体を超える場合はドメイン境界とAgent別可観測性が整っていないと過剰設計の兆候です。スーパーバイザ + ワーカー2体から始め、tokens_per_success を計測し、1 Agentのコンテキストが継続的に溢れるときだけ分割しましょう。
MCP は垂直層です。各Agentが tools/list と JSON Schema 記述子経由でツールとデータに接続します。A2A は水平層で、Agentが Agent Card 経由でピアを発見しサブタスクを委譲します。各Agent内では MCP、Agent間では A2A を使います。ツール層は MCPガイド、委譲パターンは本記事セクション05をご覧ください。
必ずしも必要ではありません。ステートレス LangGraph ワーカーと HTTP+SSE 経由のリモート MCP は Linux クラウド VM で動きます。macOS ツールチェーン、Xcode ビルド、Keychain シークレット、または途切れないチェックポイントセッションが必要な場合は、ノートPCのスリープと戦うより Mac Mini M4 レンタルの方が摩擦が少ないです。1か月試験でチェックポイント遅延とトークン消費を計測しましょう。料金:Mac Mini M4 レンタル料金。セットアップ:ヘルプセンター。注文:クラウド注文ページ。