A2A (Agent-to-Agent Communication Protocol) 是 EventMesh 的一个高性能协议插件,专门设计用于支持智能体(Agents)之间的异步通信、协作和任务协调。该协议采用 MCP (Model Context Protocol) 架构理念,结合 EventMesh 的事件驱动特性,打造了一个异步、解耦、高性能的智能体协作总线。
A2A 协议不仅支持传统的 FIPA-ACL 风格语义,更全面拥抱现代大模型(LLM)生态,通过支持 JSON-RPC 2.0 标准,实现了对工具调用(Tool Use)、上下文共享(Context Sharing)等 LLM 核心场景的原生支持。
tools/call, resources/read 等标准方法。messageType 和 FIPA 动词),保障存量业务平滑迁移。jsonrpc 字段)自动智能选择处理模式。_agentId)中提取路由线索,自动注入 CloudEvents 扩展属性 (targetagent),实现零解包路由。tools/call -> org.apache.eventmesh.a2a.tools.call.req)。traceparent,实现跨 Agent 的全链路追踪。┌─────────────────────────────────────────────────────────────┐ │ EventMesh A2A Protocol v2.0 │ │ (MCP over CloudEvents Architecture) │ ├─────────────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ MCP/JSON-RPC│ │ Legacy A2A │ │ Protocol │ │ │ │ Handler │ │ Handler │ │ Delegator │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ ┌───────────────────────────────────────────────────────┐ │ │ │ Enhanced A2A Protocol Adaptor │ │ │ │ (Intelligent Parsing & CloudEvent Mapping) │ │ │ └───────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ EventMesh Protocol Infrastructure │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ CloudEvents │ │ HTTP │ │ gRPC │ │ │ │ Protocol │ │ Protocol │ │ Protocol │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
为了在事件驱动架构中支持 MCP 的 Request/Response 模型,A2A 协议定义了以下映射规则:
| MCP 概念 | CloudEvent 映射 | 说明 |
|---|---|---|
Request (tools/call) | type: org.apache.eventmesh.a2a.tools.call.req mcptype: request | 这是一个请求事件 |
Response (result) | type: org.apache.eventmesh.a2a.common.response mcptype: response | 这是一个响应事件 |
Correlation (id) | extension: collaborationid / id | 用于将 Response 关联回 Request |
| Target | extension: targetagent | 路由目标 Agent ID |
{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "get_weather", "arguments": { "city": "Shanghai" }, "_agentId": "weather-service" // 路由提示 }, "id": "req-123456" }
转换后的 CloudEvent:
id: req-123456type: org.apache.eventmesh.a2a.tools.call.reqsource: eventmesh-a2aextension: a2amethod: tools/callextension: mcptype: requestextension: targetagent: weather-service{ "jsonrpc": "2.0", "result": { "content": [ { "type": "text", "text": "Shanghai: 25°C, Sunny" } ] }, "id": "req-123456" }
转换后的 CloudEvent:
id: uuid-new-event-idtype: org.apache.eventmesh.a2a.common.responseextension: collaborationid: req-123456 (关联 ID)extension: mcptype: response{ "protocol": "A2A", "messageType": "PROPOSE", "sourceAgent": { "agentId": "agent-001" }, "payload": { "task": "data-process" } }
您只需要发送标准的 JSON-RPC 格式消息到 EventMesh:
// 1. 构造 MCP Request JSON String mcpRequest = "{" "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "weather", "_agentId": "weather-agent" }, "id": "req-001" "}"; // 2. 通过 EventMesh SDK 发送 eventMeshProducer.publish(new A2AProtocolTransportObject(mcpRequest));
订阅相应的主题,处理业务逻辑,并发送回响应:
// 1. 订阅 MCP Request 主题 eventMeshConsumer.subscribe("org.apache.eventmesh.a2a.tools.call.req"); // 2. 收到消息后处理... public void handle(CloudEvent event) { // 解包 Request String reqJson = new String(event.getData().toBytes()); // ... 执行业务逻辑 ... // 3. 构造 Response String mcpResponse = "{" "jsonrpc": "2.0", "result": { "text": "Sunny" }, "id": """ + event.getId() + """ "}"; // 4. 发送回 EventMesh eventMeshProducer.publish(new A2AProtocolTransportObject(mcpResponse)); }
A2A 协议不限制 method 的名称。您可以定义自己的业务方法,例如 agents/negotiate 或 tasks/submit。EventMesh 会自动将其映射为 CloudEvent 类型 org.apache.eventmesh.a2a.agents.negotiate.req。
由于 A2A 兼容标准的 JSON-RPC 2.0,您可以轻松编写适配器,将 LangChain 的 Tool 调用转换为 EventMesh 消息,从而让您的 LLM 应用具备分布式、异步的通信能力。
EnhancedA2AProtocolAdaptor,支持 JSON-RPC 2.0。欢迎贡献代码和文档!请参考以下步骤:
Apache License 2.0