sue@blog ~ /posts/agent-to-agent-design-implementation
$ cd ../
$ cat post.metadata

Agent-to-Agent設計 ③実装編 — フレームワーク選定・失敗モード・セキュリティ

date: 2026-06-26 A2A マルチエージェント 実装
第2回のパターンを実装に落とす。フレームワークの設計思想と選定基準、作業+レビューのペア構成、ファイルシステム経由のhandoff、人間承認ゲート。さらにマルチエージェント特有の失敗モード(MAST)セキュリティ(信頼境界・間接プロンプトインジェクション)まで。
「Agent-to-Agent設計」連載(全3回)
① 全体像② 設計パターンカタログ③ 実装編(この記事)

1. フレームワーク早見表 — 設計思想で選ぶ

主要フレームワークは「制御フローの持ち方」で5系統に大別できる。重要なのは機能数ではなくどの設計思想が自分のタスクに合うかだ。

フレームワーク設計思想(型)強み選定基準
LangGraphグラフ型(状態機械)可観測性・タイムトラベルデバッグ・中断再開・人間承認・監査明示的制御フローと状態永続化・監査が要る本番
CrewAI役割/プロセス型+Flow役割×タスクの直感的抽象で立上りが速い業務をロール分担にマッピングしたい
AutoGen / AG2会話型(GroupChat)探索的・ブレスト的タスクに柔軟。Magentic-Oneの再計画フローを固定しづらい研究的・汎用問題解決
OpenAI Agents SDK / Swarmhandoff型(関数移譲)API表面が極小・低レイテンシ・高い透明性少〜中規模(〜8前後)の専門家ルーティング
Google ADKワークフロー型(決定論+LLM)決定論で予測可能・テスト容易・A2A/MCP統合「順次→並列→反復」に分解できる本番
Microsoft Agent Frameworkデータフロー型グラフ並行・型安全・テレメトリ・ミドルウェア(1.0 GA)エンタープライズ要件(型安全・.NET)
Claude Agent SDKorchestrator-worker型コンテキスト隔離で main の肥大・汚染を防ぐ。深掘り調査に強い独立分割できる探索・調査・収集

トポロジ→要件の逆引き: 監査・人間承認・再現性が要る→グラフ型(LangGraph / MS Agent Framework / ADK)。探索的・創発を活かす→会話型(AutoGen)。少数の専門家へ低レイテンシで振り分け→handoff型(OpenAI Agents SDK)。独立サブタスクを並列・コンテキスト隔離で→orchestrator-worker(Claude Agent SDK)。異種ベンダー連携→A2Aプロトコル層を併用

2. 実装の定石 — オーケストレータ+作業/レビューのペア

単一→マルチへ拡張する判断は単純だ。まず単一エージェントで詰める→ボトルネックを計測(コンテキスト肥大?逐次レイテンシ?専門性不足?越境連携?)→読み取り中心で独立分割できるならマルチ化、最小構成(supervisor+数ワーカー)から。そして実運用で最も効くのが、各ステップに作業Agent+Review Agentをペアで置く構成だ。

実装の定石 ― 作業+レビュー × ファイル経由handoff 親 Orchestrator 呼び出し順序のみ管理・ロジックを持たない Step 1 情報収集 作業Agent Review Agent ⟲≤2 Step 2 設計 作業Agent Review Agent ⟲≤2 Step 3 実装 作業Agent Review Agent ⟲≤2 .work/<team>/ (ファイル経由handoff) step-1-output.md step-2-output.md step-3-output.md 各SubAgentは前ステップの 成果物ファイルだけ読む (調査全体をcontextに載せない) 人間承認ゲート 不可逆・高stakesアクション(決済・削除・外部送信・法務)の前に必須。リトライ2回超過もここへエスカレーション
図1: オーケストレータは順序管理だけを持ち、各ステップは作業+レビューのペア(最大2回リトライ)。受け渡しはファイル経由——子は前ステップの成果物ファイルだけ読むので、調査全体をコンテキストに載せずに済む。

ファイル経由handoffには、第2回で触れた圧縮要約の弱点(不可逆な情報損失)を原本ファイル参照で相殺できるという利点もある。.work/<team>/ に成果物を残し、必要なら原本に立ち返れる。古いファイルの破棄/圧縮ポリシーも設計に含めておく。

モデルルーティング(コスト最適化)

全エージェントに最上位モデルを使うのは無駄だ。タスクの重さで振り分ける。

探索 / 検索 / 単一ファイル編集 / ドキュメント   # → 軽量モデル(Haiku級)
マルチファイル実装 / オーケストレーション        # → 中位(Sonnet級)
アーキ決定 / セキュリティレビュー / 複雑デバッグ   # → 最上位(Opus級)
# Planner-Executor なら「重い計画=Opus級、実行=軽量」で分離

3. マルチエージェント特有の失敗モード — MAST

Berkeley らの「Why Do Multi-Agent LLM Systems Fail?」(MAST, arXiv:2503.13657)は、初の経験的失敗分類を提示した。14モード × 3カテゴリに整理される。

重要な含意は、失敗が単一原因に偏らず、上流の「仕様・役割・検証」の弱さに起因すること。だから図1の作業+レビューのペアが効く——カテゴリ③(検証の欠如)への直接の処方箋になっている。対策は戦術的(プロンプト改善・役割明確化・自己検証)と構造的(標準通信プロトコル・記憶管理・検証機構)の二層で打つ。

誤り伝播と偽合意
上流の微小な誤りが下流で「有効な入力」として扱われ、偽の合意(false consensus)に固着する。検知だけの防御は多hopで破綻する——検知率70%/hopでも5hopで 0.70⁵≒17% しか捕まらない。一度合意すると誤りでも覆らない合意慣性もある。対策は出所追跡(系譜グラフ)・疎トポロジでの独立性確保・再検証ゲート。「検知」より「封じ込め」を設計する。

4. セキュリティ — 信頼境界と多層防御

A2Aは仕様だけでは ID 検証・注入耐性が不足する。最大の弱点は、エージェント間通信を「信頼された内部」と誤認することだ。外部データ(Web/メール/RAG/ツール出力)に紛れた指示が、A2A経由で無検査に多hop伝播する——これが間接プロンプトインジェクション=信頼境界の問題。根本原因は instruction と untrusted data を同じコンテキスト窓で等価に扱うことにある。

信頼境界を守る多層防御 外部データ Web / メール RAG / ツール出力 untrusted (指示が紛れる) 正規化+来歴ラベル HTML/PDF→最小テキスト スクリプト/マクロ除去 spotlighting(出所明示) CaMeL / Dual-LLM Privileged LLM(計画・ untrustedに触れない) +Quarantined LLM (非信頼入力を隔離処理) 最小権限+承認 per-toolスコープ (許可先・範囲・レート) 人間承認ゲートで ブラスト半径を限定 原則: instruction と untrusted data を同じ窓で等価に扱わない。各hopで scope narrowing(最小権限)し、元トークンの素通しは禁止。 CaMeL は AgentDojo で攻撃の約67%を無効化(残り3割は他層が必要)。ガードは「壁」でなく多層の一枚。
図2: 信頼境界を守る多層防御。注入や confused deputy が一部成功しても、最小権限スコープと承認ゲートで「ブラスト半径」を限定する。認証は「誰か」を保証するが「注入されていないか」は保証しない、という前提で重ねる。

補強の柱は4つ。(1) ID確立(A2Aはアイデンティティをトランスポート層で扱い mTLS+OAuth2 を併用。SPIFFE/SPIRE で短命SVID)、(2) 権限委譲(RFC 8693 Token Exchange で act クレームに委譲チェーンを表現し各hopで最小権限化)、(3) 信頼境界(コンテンツ正規化・spotlighting・隔離LLM)、(4) 攻撃連鎖の封じ込め(最小権限ツールスコープ+承認ゲートでブラスト半径限定)。脅威モデリングの共通言語として MAESTRO や OWASP Agentic Security Initiative(ASI Top10)も押さえておく。

5. 観測性と回復

分散したエージェントは「どこで誤りが生まれたか」が見えないと運用できない。OpenTelemetry GenAI Semantic Conventions でスパンツリーに計装する——トップに invoke_agent、子に各LLM呼び出しの chat、各ツールの execute_tooltrace_id で「誰が誰を呼び、どこで壊れたか」を再構成できる。受け皿は LangSmith(軌跡採点)/ Langfuse(OSS・OTel)/ Arize Phoenix(OSS・ドリフト検知)。

回復の基盤はリトライ+指数バックオフ+ジッタ/サーキットブレーカ/安価モデルへのフォールバック。MAS特有の注意は「リトライ嵐」——10並列×10リトライ=死んだサービスへ100リクエストの協調DoS。ブレーカは個別呼び出しでなくサービス単位で共有する。そして停止規則(stop rule)を必ず置く: ループ検知・トークン/リトライ予算を安全機構にし、「これ以上安全に前進できないと証明できたら止める/人間判断が要るなら昇格する」。従来型ブレーカはタイムアウトは拾えてもハルシネーションや推論ループは拾えないので、意味的ガードレール(検証ゲート・ループ検知)を別途置く。

6. 落とし穴カタログ

  1. コンテキスト汚染: Poisoning(幻覚の固定化)/Distraction(履歴肥大で過去にパターンマッチ)/Confusion(ツール乱立——30個超で非線形に劣化)/Clash(途中の誤推論が全ステップに波及)。マルチでは A の劣化出力が B の ground truth になり乗算的に増幅する。→ isolation/compaction/JIT retrieval/ツール削減/誤り検出時の文脈リセット。
  2. コスト爆発: 通常チャットの約15倍トークン。完全メッシュは n²·T。→ 子の返却上限・スター/疎トポロジ・予算ガードレール。
  3. 無限ループ/リトライ嵐: → ループ検知・トークン/リトライ予算・サービス単位ブレーカ・停止規則。
  4. 責任拡散(context fragility): 並列サブエージェントが暗黙の設計判断を共有せず成果物が噛み合わない。→ 単一スレッド寄せ or 隔離+明示統合。
  5. 過剰なマルチエージェント化: 不要な完全結合・冗長通信が予算を焼く。→ まず単純構成、計測駆動で段階導入。書き込み/相互依存タスクは単一を選ぶ。
  6. セキュリティの素通り: inter-agent 通信を「信頼された内部」と誤認すると1注入が多hop伝播。→ 信頼境界の明示化・最小権限委譲・封じ込め設計。
連載のまとめ
A2A/マルチエージェント設計に銀の弾丸はない。なぜ・どこなら単一で十分かを見極め(第1回)、トポロジと通信様式を選び(第2回)、作業+レビュー・ファイル経由handoff・承認ゲートで実装し、MAST失敗モード・信頼境界・観測性・停止規則で守る(第3回)。共通する原則は「まず単純に始め、計測でボトルネックが出たら段階的に分散へ」、そして「暗黙の共有に頼らず、明示的に渡したものだけを伝える」。

主な参考文献

連載
① 全体像② 設計パターンカタログ③ 実装編(この記事)
sue@blog ~ $ _