AI Agent 通信协议深度实战:MCP 与 A2A 协议的架构演进、安全模型与生产部署

一、引言:多 Agent 协作的基础设施困境

2025 年至 2026 年间,AI Agent 从单体推理系统向多 Agent 协作架构快速迁移。OpenAI 的 Agents SDK、Google 的 ADK、Anthropic 的 Claude Agent SDK 各自构建了一套工具调用与 Agent 间通信机制,但一个根本性的问题浮出水面:当不同厂商、不同运行时、不同模型驱动的 Agent 需要协同工作时,它们之间"说什么"和"怎么说"?

过去的方案大致分为三类:其一,通过 RESTful API 或 gRPC 暴露 Agent 能力,但缺乏标准化的意图描述和资源发现机制;其二,通过消息队列(Kafka、NATS)实现异步通信,但消息格式与语义完全私有;其三,直接复用 LLM 的工具调用(tool-use)接口,但这种紧耦合方案无法支持异构 Agent 间的组合。

正是在这一背景下,Anthropic 提出了 Model Context Protocol(MCP),Google 提出了 Agent-to-Agent Protocol(A2A)。两者试图从不同层面解决 Agent 互操作问题——MCP 聚焦 Agent 与工具/资源之间的垂直通信,A2A 聚焦 Agent 与 Agent 之间的水平通信。本文将深入剖析两大协议的架构设计、安全模型与生产级部署方案。

二、MCP 协议深度解析

2.1 架构概览:JSON-RPC 2.0 上的能力协商

MCP 以 JSON-RPC 2.0 为传输层构建,核心设计思想是将 LLM Agent 的能力边界划分为三类原语:

  • Tools:Agent 可调用的函数,接受结构化输入并返回结构化输出
  • Resources:Agent 可读取的上下文数据(文件、数据库记录、API 响应等)
  • Prompts:预定义的交互模板,用于标准化 Agent 行为
┌──────────────┐      JSON-RPC 2.0      ┌──────────────┐
│ MCP Client   │ ◄─────────────────────┤ MCP Server    │
│ (Agent/Host) │   stdio/SSE/HTTP+JSON   │ (Tool/Service)│
└──────────────┘                       └──────────────┘

MCP Client 通过 initialize 握手交换能力集(Capabilities),Server 声明自身支持的功能与版本。这一能力协商机制是 MCP 区别于传统 REST 设计的关键——它允许运行时动态发现工具列表,而非依赖静态代码生成。

2.2 工具调用流程

一个标准的 MCP 工具调用涉及以下步骤:

  1. 发现阶段:Client 调用 tools/list 获取所有可用工具及其 JSON Schema 描述
  2. 编排阶段:LLM 根据 Schema 选择工具并生成参数
  3. 执行阶段:Client 调用 tools/call 触发 Server 端执行
  4. 反馈阶段:Server 返回 CallToolResult,包含文本内容或结构化数据

协议定义文档清单:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "query_database",
    "arguments": {
      "sql": "SELECT * FROM orders WHERE status = ?",
      "params": ["pending"]
    }
  }
}

2.3 流式传输与进度通知

MCP 支持 Server 在长执行期间通过 notifications/progress 推送进度信息,Client 使用 _meta.progressToken 字段关联通知与请求。这在 RAG 检索、代码生成、长时间数据分析等场景中至关重要——Agent 可以将进度反馈给用户界面,避免用户陷入等待焦虑。

2.4 MCP 的三个传输通道

传输方式 适用场景 特点
stdio 本地子进程 低延迟,Agent 以子进程方式启动工具
SSE (Server-Sent Events) Web 与本地混合 Client 长连接接收 Server 推送
Streamable HTTP 生产环境 无状态、水平扩展、支持负载均衡

Streamable HTTP 是 2025 年底引入的关键演进,它解决了 SSE 在负载均衡和断连恢复上的缺陷,使 MCP Server 可以作为独立微服务部署。

三、A2A 协议深度解析

3.1 设计哲学:将 Agent 视为 Web 服务

如果说 MCP 是 Agent 的"手和眼"(获取工具和数据),那 A2A 就是 Agent 的"嘴巴和耳朵"(与其他 Agent 对话)。A2A 协议的核心原则是将 Agent 抽象为可发现、可组合的 Web 服务单元,每个 Agent 通过 Agent Card(JSON-LD 描述文件)宣告自身能力。

┌──────────────┐     HTTPS + JSON     ┌──────────────┐
│ Client Agent │ ───────────────────► │  Remote Agent│
│              │   discover → invoke   │              │
│              │ ◄─────────────────── │              │
└──────────────┘   streaming/SSE      └──────────────┘

3.2 Agent Card 与能力发现

Agent Card 通常托管在 /.well-known/agent.json 端点,描述 Agent 的名称、能力、输入输出格式、认证需求等:

{
  "name": "market-research-agent",
  "description": "提供市场研究报告生成能力",
  "url": "https://agents.example.com/market-research",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true
  },
  "skills": [
    {
      "id": "industry-report",
      "description": "生成指定行业的市场分析报告",
      "inputModes": ["application/json"],
      "outputModes": ["text/markdown", "application/pdf"]
    }
  ]
}

Client Agent 通过 URL 发现远程 Agent,解析 Card 后判断是否调用。skills 字段使用自然语言描述能力,允许 LLM 进行模糊匹配——这比硬编码 API 路径灵活得多。

3.3 Task 对象与生命周期管理

A2A 协议引入 Task 作为 Agent 间交互的一等公民。Task 对象具有明确的生命周期状态机:

submitted → working → input-required → 暂停等待外部输入
    ↓                      ↓
  completed              failed

这一设计解决了长时任务的核心挑战:如果一个 Agent 需要 10 分钟完成一项分析,轮询是灾难性的,而 WebSocket 又过于重量级。A2A 通过 Task 的 SSE 流实现"订阅-推送"模型:Client 提交 Task 后,持续接收状态更新和最终产物(Artifact)。

3.4 多模态消息与上下文传递

A2A 的 Message 和 Part 抽象支持混合文本、文件引用、结构化数据和内联二进制内容。在复杂的多 Agent 协作场景(如代码审查 Agent 接收代码文件、测试结果、覆盖率报告等多源输入),这种多模态消息结构避免了繁琐的序列转换:

{
  "role": "user",
  "parts": [
    {"kind": "text", "text": "请审查以下代码改动"},
    {"kind": "data", "data": {"files": [...]}},
    {"kind": "file", "file": {"uri": "s3://bucket/diff.patch"}}
  ]
}

四、安全模型对比

4.1 MCP 的安全边界

MCP 的安全核心是 信任边界收缩。由于 MCP Server 由 Agent 管理员主动配置,安全问题主要集中在:

  • 工具调用注入:恶意 MCP Server 在工具描述中注入诱导指令,欺骗 LLM 执行不当操作。防御方案包括工具签名、权限沙箱、参数脱敏等
  • 权限提升:MCP Server 可能以过高权限运行(如 root),应通过 capability-based 沙箱(如 Linux namespaces + seccomp)限制其系统访问
  • 凭据暴露:MCP 传输中的 token 和密钥需要 TLS 加密,本地 stdio 模式虽天然安全但无法跨网络

4.2 A2A 的安全模型

A2A 在 Web 层面运行,面临更复杂的分布式安全挑战:

  • 身份认证:基于 OIDC/mTLS 实现 Agent 身份相互认证,确保通信双方身份可信
  • 授权模型:Agent Card 可以声明 OAuth 2.0 scopes,限制调用方的能力范围
  • 消息完整性:请求和响应通过 HTTPS + JWS 签名防篡改
  • 流量治理:速率限制、配额管理、熔断机制防止单一 Agent 过载

4.3 两大协议的安全策略对比

维度 MCP A2A
信任模型 主机信任(本地/私有) 零信任(互联网级别)
认证方式 通常无或简单 API Key OAuth 2.0 / mTLS
能力声明 运行时 introspection 静态 Agent Card + 动态 introspection
消息安全 stdio 模式天然隔离 HTTPS + JWS 签名
主要威胁 提示注入、权限提升 身份伪造、重放攻击、DoS

五、生产环境部署实战

5.1 MCP Server 的水平扩展方案

将 MCP Server 作为微服务部署时,Streamable HTTP 是首选传输:

from mcp.server.streamable_http import StreamableHTTPServerTransport

# FastAPI + MCP Streamable HTTP 集成示例
@app.post("/mcp")
async def mcp_endpoint(request: Request):
    transport = StreamableHTTPServerTransport(
        app=app,
        json_response=True  # 启用 JSON 模式(适合无状态扩展)
    )
    await transport.handle_request(request)
    return Response(
        content=transport.response_body,
        media_type="application/json",
        headers=transport.response_headers
    )

关键生产建议:前后通过负载均衡器分发请求时,建议启用 sticky session(基于 MCP Session ID),避免有状态上下文在请求间丢失。对于严格无状态的纯工具调用,JSON Response 模式完全无状态,可任意水平扩展。

5.2 A2A Agent 的 Kubernetes 部署

部署 A2A Agent 到集群时,需要关注:

  1. Agent Card 端点的可用性和缓存——调用方可能频繁轮询
  2. Task SSE 连接的生命周期管理与资源回收
  3. 多租户隔离——多个 Agent 共用同一网关时的认证隔离
  4. 可观测性——Agent 间调用链的追踪需要使用 OpenTelemetry 上下文传播

以下是一个 A2A Agent 的 Deployment 示例框架:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: code-review-agent
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: agent
        image: registry.example.com/code-review-agent:latest
        ports:
        - containerPort: 8080
        env:
        - name: OAUTH_ISSUER
          valueFrom:
            secretKeyRef:
              name: agent-auth
              key: issuer-url
        - name: AGENT_SKILLS
          value: "code-review,security-audit,test-generation"

5.3 多 Agent 编排模式

在实际生产中,多种编排模式共存:

  • 中心化编排:一个 Orchestrator Agent 通过 A2A 调用多个 Specialist Agent(代码审查、测试、部署),类似 DAG 执行
  • 去中心化协商:Agent 间通过 A2A 相互发现并建立协作,无单一控制节点
  • 层级委托:上层 MCP Client(如 IDE)将任务分发给本地 Tool Server 和远程 Agent 混合执行

MCP 与 A2A 并非互斥——典型的生产架构中,MCP 是 Agent 的微血管(连接工具和数据源),A2A 是 Agent 的大动脉(跨 Agent 任务流转)。两者构成完整的 Agent 通信基础设施。

5.4 监控与故障排查

多 Agent 系统调试极其困难。核心可观测性实践包括:

  • 为每次 Agent 间调用生成 Trace ID,跨 MCP 和 A2A 边界传播
  • 记录 Tool/Task 调用日志(不含敏感参数),用于回放故障
  • 建立 Agent 健康度评分:响应延迟、成功率、幻觉率
  • 对 Agent Card 做版本管理和变更审计

六、趋势展望

AI Agent 通信协议仍在快速演进中。几个关键方向值得关注:

  1. MCP 与 A2A 的融合:两个协议正在收敛——MCP 增加了多 Agent 协作扩展,A2A 增加了工具级能力声明
  2. Agents as a Service:云厂商开始提供托管 Agent 运行时(AWS Bedrock Agents、Google Vertex AI Agents),A2A 是这类服务的互联互通协议
  3. 语义互操作:Agent Card 从自然语言描述向结构化 Ontology(基于 OWL/SHACL)演进,使机器能精确判断能力匹配
  4. 联邦聚合:跨组织的 Agent 目录服务(Agent Registry)正在形成,类似 DNS 对 Web 的意义,Agent Registry 将成为 Agent 世界的"服务发现基础设施"

七、结语

MCP 和 A2A 协议代表了 AI Agent 从单体走向分布式协作的关键一步。MCP 标准化了 Agent 与外部世界的交互界面,A2A 标准化了 Agent 之间的协作语言。两者的结合不仅降低了多 Agent 系统的构建门槛,更在推动形成 Agent 生态的开放互通标准。

对于工程师而言,现在介入协议层面的关注与投入正当其时——这不是又一个将被淘汰的新框架,而是 AI Agent 基础设施的 TCP/IP 时刻。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部