コンテンツにスキップ

A2A - MCPのその先へ

Author: Kazukichi
  • 前回までMCPの概念的な説明やその活用や実践について紹介してきた
  • 今回はMCPと同様、AIエージェントに関連するもう一つのプロトコルであるA2Aについて、概念的な説明を試みる
  • Googleが2025年4月に発表したプロトコル
  • A2AとはAgent to Agentのこと
  • つまり、AIエージェントとAIエージェントを結ぶようなプロトコルとなる
  • 一次情報はこのへんにある
  • コミュニティベースで仕様が策定されており、仕様策定にはAtlassian、Box、Cohere、Intuit、LangChain、MongoDB、PayPal、Salesforce、SAP、ServiceNow等を初めとする、50以上の企業が参加している
  • 企業群を見て分かる通り、AIとは直接的に関係しないようなSaaS企業も積極的に参加しており、いかにSaaSにおいてAI機能の提供が重要か、というのが垣間見える
  • AIエージェント間の通信を標準化するためのプロトコルで、これにより、異なるベンダやフレームワークで構築されたAIエージェント同士がそれぞれの強みを活かしながら協調してタスクに取り組み、解決することができる
  • ある課題を解決する上で、それらをタスクとして要素分解し、タスクの特性に合致したAIエージェントにそれぞれ解決してもらい、最終的にそれらを統合することにより、より質が高く、シームレスに統合された課題解決が可能となる
  • ちなみに、ここでのAIエージェントとは、我々開発者や一般ユーザがよく想起するようなCursorやCline、Claude Desktopだけでなく、例えばSalesforceのEinstein CopilotやAtlassianのAtlassian Intelligence、SAPのJoule、ServiceNowのNow Assist等のSaaSに付属する形態で提供されるものも含んでいると思われる
  • クライアントサーバモデルを採用している
  • 役割としてはクライアントエージェントとリモートエージェントが存在する
  • 大まかには、クライアントエージェントがタスクを作成し、リモートエージェントがタスクを処理するという流れ
  • Agent Card
    • AIエージェントのスキル、エンドポイント、認証要件等を記述したメタデータファイル
    • .well-known/agent.json として公開される
    • クライアントエージェントはこれを取得し、AIエージェントの機能を発見する
  • Task
    • 作業の単位であり、以下のようなステータスを持つ
    • submitted: タスク送信直後の初期状態
    • working: タスクの処理中
    • input-required: タスクの続行に追加の入力が必要
    • completed: タスクが正常に完了した
    • failed: タスクの処理に失敗した
    • canceled: タスクがキャンセルされた
  • Message
    • クライアントエージェントとリモートエージェントでやり取りされるデータ
    • いくつかのPartから構成される
  • Artifact
    • リモートエージェントによって生成された最終的な成果物
    • いくつかのPartから構成される
  • Part
    • メッセージやアーティファクト内の基本的なコンテンツ単位であり、以下のような種類がある
    • TextPart: テキスト
    • FilePart: ファイルへの参照。バイナリそのものではないことに注意
    • DataPart: JSON等の構造化データ
  • 発見
    • クライアントエージェントがAgent Cardを取得してそのリモートエージェントが提供する機能を確認する
  • 開始
    • 具体的なタスクをリモートエージェントに依頼する
    • ストリーミング/非ストリーミングの二種類の依頼方法がある
  • 処理
  • インタラクション
    • クライアントエージェントで追加の入力等が必要な場合等に発生
  • 完了
  • HTTPベースでSSE(Server-Sent Events)やJSON-RPCを使用するような設計
    • ただし、MCPほど型付け/構造化されておらず、プレーンテキストな部分が多く、抽象度が高い
  • OAuth等による認証機能も用意されている
  • 基本的にはMCPの設計を踏襲したような作り
  • MCPの通信方法については Middle Dive MCP > MCPの通信方法 を参照
  • Cursor / Cline / Claude Desktopは現状、対応していない
  • LangChain / CrewAI / LangGraph等のAIエージェントを構築するためのライブラリ/フレームワークでは対応済み
  • その他、大手のSaaS系のAIエージェントでも対応されていることが多い傾向にある
  • GitHub | google/A2A にサンプルコードが用意されている
  • GitHub | google/adk-python にADK(Agent Development Kit)としてA2Aの開発をPythonで行えるようなライブラリが用意されている
  • 他にはLangChain / CrewAI / LangGraph等のA2A対応ライブラリ/フレームワークを利用するという選択肢もある
  • Cursor / Cline / Claude Desktop等でのA2A対応
  • A2A対応AIエージェントの動的な発見と連携
  • AIエージェント間の知識共有
  • AIエージェント間の共同学習
  • A2A対応AIエージェントマーケットプレイスの勃興
  • 最近、Roo CodeにOrchestratorモードが実装されていた
    • これはどうやら、複雑なタスクを要素に分解し、それぞれに適切なモードを割り当て委任するモードらしい
    • てっきりA2Aプロトコルを利用するものかと思ったが違った
    • しかし将来的に他のAIエージェントと連携するようなモードが組み込まれてもおかしくないなと思った
  • 個人的にはMCPのように、エンドユーザを直接的にエンパワーメントするような技術ではないように感じる
  • あくまでAIエージェントの分散システムの実現のインタフェースとして裏側でひっそりと使われるような着地点になりそう