当前位置: 首页 > news >正文

Agent 之间怎么对话?A2A 协议全景解析:从概念到 Java 落地

Agent 之间怎么对话?A2A 协议全景解析:从概念到 Java 落地

你公司 HR Agent 用 Google ADK 构建,销售 Agent 用 LangChain,财务 Agent 用 CrewAI——一个入职流程要横跨三个系统,靠人工串联?A2A 协议让它们自己对话、自己协作。

一、为什么需要 A2A?

先看一个真实场景:

新员工入职流程: 1. HR Agent 完成背调 2. 销售 Agent 创建客户关系 3. 财务 Agent 开通报销权限 没有 A2A:邮件 → 钉钉 → 手动填单 → 等审批 有了 A2A:HR Agent 完成 → 自动通知销售 Agent → 自动通知财务 Agent

当前 Agent 生态的痛点:

痛点具体表现
框架孤岛LangChain、CrewAI、AutoGPT 各自闭环,跨框架无法直接通信
手动串联多 Agent 流程靠人手动传递信息,效率低且易出错
能力不可见A Agent 不知道 B Agent 能干什么,无法动态发现和调度
安全失控Agent 之间直接调用 API,没有标准化的身份认证和权限管理

A2A(Agent-to-Agent)协议由 Google 于 2025 年 4 月发布,专门解决这些问题。2025 年 6 月捐赠给 Linux 基金会,已发布 V1.0 GA,150+ 组织生产部署。

二、A2A vs MCP vs 子 Agent:三个层次别搞混

聊 A2A 最大的误区是把它跟 MCP、子 Agent 混在一起——它们解决的根本不是同一层问题:

┌─────────────────────────────────────────────────────────────┐ │ 应用层(业务流程) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ A2A:Agent ↔ Agent 横向协作 │ │ │ │ "你做背调,我做报销审批,我们怎么对接?" │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────────┐ ┌───────────────────────────┐ │ │ │ MCP:Agent ↔ 工具 │ │ 子Agent:Agent 内部派生 │ │ │ │ 纵向集成 │ │ 纵向编排 │ │ │ │ "连数据库、调API" │ │ "主Agent拆子任务" │ │ │ └───────────────────────┘ └───────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘
维度A2AMCP子 Agent
解决什么Agent 间横向协作Agent 与工具/数据纵向集成系统内任务拆分
一句话类比SMTP(邮件协议)USB-C(设备接口)团队内部分工
通信方向对等主从主从
跨框架天然支持不涉及通常同框架内
部署边界跨组织单 Agent单 Agent

MCP 是给 Agent 装手脚,A2A 是给 Agent 装社交网络。

三、A2A 四大核心对象

3.1 Agent Card——Agent 的"名片"

每个支持 A2A 的 Agent 发布一个 JSON 格式的 Agent Card,描述自己的能力、接口和认证方式:

{"name":"HR Background Check Agent","description":"负责新员工背景调查,包括学历验证、工作经历核实","url":"https://hr-agent.example.com/a2a","capabilities":{"streaming":true,"pushNotifications":true},"skills":[{"id":"background-check","name":"背调执行","description":"执行候选人背景调查,返回验证结果","inputModes":["text","file"],"outputModes":["text"]}],"authentication":{"type":"oauth2","authorizationUrl":"https://hr-agent.example.com/auth"}}

关键设计:Agent Card 是声明式的,类似 WSDL/OpenAPI spec。调用方不需要提前硬编码对方接口,运行时读 Card 即可。

3.2 Task——任务生命周期

Task 是 A2A 协作的核心单元,有明确的生命周期:

┌──────────────────────────────────────────────────┐ │ Task 生命周期 │ │ │ │ submitted → working → completed │ │ │ │ │ │ │ │ │ └→ failed │ │ │ │ │ │ │ └→ input-required(需要人工输入) │ │ │ │ │ └→ canceled │ └──────────────────────────────────────────────────┘
状态含义
submitted任务已提交,远端 Agent 已接收
working远端 Agent 正在处理
input-required需要调用方补充信息(人工介入点)
completed任务完成,产出 Artifact
failed任务失败
canceled任务取消

3.3 Message——对话消息

Agent 之间的对话通过 Message 传递:

{"role":"user","parts":[{"type":"text","text":"请对候选人张三进行背调"},{"type":"file","file":{"name":"resume.pdf","url":"https://example.com/resume.pdf"}}]}

Part 的多种类型:text、file、data(结构化 JSON),确保不同类型内容都能在 Agent 间流转。

3.4 Artifact——任务产出

Task 完成后产出 Artifact:

{"artifact":{"parts":[{"type":"text","text":"背调结论:学历验证通过,工作经历核实通过"},{"type":"data","data":{"candidate":"张三","education_verified":true,"experience_verified":true,"risk_level":"low"}}]}}

四、A2A 通信协议:JSON-RPC 2.0

A2A 基于 JSON-RPC 2.0,所有请求/响应都是标准 JSON:

4.1 核心方法

方法用途方向
tasks/send发送任务给远端 Agent调用方 → 远端
tasks/get查询任务状态调用方 → 远端
tasks/cancel取消任务调用方 → 远端
tasks/push-notification/set注册推送通知调用方 → 远端

4.2 请求示例

{"jsonrpc":"2.0","method":"tasks/send","id":"1","params":{"id":"task-2026-001","message":{"role":"user","parts":[{"type":"text","text":"请对候选人张三进行背景调查"}]}}}

4.3 三种长任务状态获取模式

┌───────────────────────────────────────────────────────┐ │ 模式一:Polling(轮询) │ │ 调用方定期调 tasks/get 查状态 │ │ ✓ 简单 ✗ 浪费资源 ✗ 延迟高 │ ├───────────────────────────────────────────────────────┤ │ 模式二:Streaming SSE(服务端推送事件) │ │ 远端 Agent 通过 SSE 流式返回状态更新 │ │ ✓ 实时 ✗ 需保持连接 ✓ 适合大模型流式输出 │ ├───────────────────────────────────────────────────────┤ │ 模式三:Push Notification(Webhook 回调) │ │ 调用方注册回调 URL,远端状态变化时主动推送 │ │ ✓ 解耦 ✓ 适合跨组织 ✗ 需公网可达 │ └───────────────────────────────────────────────────────┘
模式适用场景实时性复杂度
Polling简单场景、内网
Streaming SSE大模型流式输出
Push Notification跨组织协作

五、Java 落地:Spring AI + A2A

5.1 引入依赖

Spring AI 已提供 A2A 支持:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-a2a</artifactId><version>1.0.0-GA</version></dependency>

5.2 发布 Agent Card

@ConfigurationpublicclassA2aConfig{@BeanpublicAgentCardhrAgentCard(){returnAgentCard.builder().name("HR Background Check Agent").description("负责新员工背景调查").url("https://hr-agent.example.com/a2a").capabilities(Capabilities.builder().streaming(true).pushNotifications(true).build()).skills(List.of(Skill.builder().id("background-check").name("背调执行").description("执行候选人背景调查").inputModes(List.of("text","file")).outputModes(List.of("text")).build())).build();}}

5.3 实现 A2A 端点

@RestController@RequestMapping("/a2a")publicclassA2aController{privatefinalHrBackgroundCheckServicecheckService;@PostMappingpublicResponseEntity<JsonRpcResponse>handleRequest(@RequestBodyJsonRpcRequestrequest){switch(request.getMethod()){case"tasks/send":Tasktask=checkService.startCheck(request.getParams());returnResponseEntity.ok(JsonRpcResponse.success(task));case"tasks/get":Taskcurrent=checkService.getStatus(request.getParams().getId());returnResponseEntity.ok(JsonRpcResponse.success(current));case"tasks/cancel":checkService.cancel(request.getParams().getId());returnResponseEntity.ok(JsonRpcResponse.success(null));default:returnResponseEntity.ok(JsonRpcResponse.error("Method not found",-32601));}}// Agent Card 端点@GetMapping("/.well-known/agent-card")publicAgentCardgetAgentCard(){returnhrAgentCard();}}

5.4 调用远端 Agent

@ServicepublicclassOnboardingService{privatefinalA2aClienta2aClient;publicStringstartBackgroundCheck(StringcandidateName){// 1. 发现 Agent(读 Agent Card)AgentCardhrCard=a2aClient.discover("https://hr-agent.example.com/a2a/.well-known/agent-card");// 2. 发送任务TaskRequesttaskRequest=TaskRequest.builder().message(Message.builder().role("user").parts(List.of(TextPart.of("请对候选人 "+candidateName+" 进行背调"))).build()).build();Tasktask=a2aClient.sendTask(hrCard.getUrl(),taskRequest);// 3. 轮询等待完成(生产环境用 Push Notification)while(task.getStatus().getState()==TaskState.WORKING){Thread.sleep(5000);task=a2aClient.getTask(hrCard.getUrl(),task.getId());}// 4. 获取产出if(task.getStatus().getState()==TaskState.COMPLETED){returntask.getArtifacts().get(0).getParts().get(0).getText();}thrownewRuntimeException("背调任务失败: "+task.getStatus());}}

5.5 注册 Push Notification

// 调用方注册回调a2aClient.setPushNotification(hrCard.getUrl(),PushNotificationConfig.builder().url("https://my-agent.example.com/a2a/callback").authentication(AuthConfig.builder().type("oauth2").tokenUrl("https://auth.example.com/token").build()).build());

六、A2A 与中国国标 GB/Z 185-2026

中国于 2026 年发布了 GB/Z 185-2026《智能体间协作通信协议》,与 A2A 高度对齐:

维度A2A (Google/Linux Foundation)GB/Z 185-2026 (中国国标)
核心模型Agent Card + Task + Message基本一致
传输协议JSON-RPC 2.0 over HTTPJSON-RPC 2.0 over HTTP
认证方式OAuth2 / API Key国密算法 + OAuth2
扩展点Skill、Part 类型增加合规审计字段
互操作性可互操作可互操作

实践建议:国内项目优先适配国标,出海项目用 A2A 标准。两者核心模型一致,切换成本很低。

七、A2A 生产落地 Checklist

实践原因
Agent Card 必须 HTTPS + 认证防止伪造 Agent 能力描述
长任务用 Push NotificationPolling 浪费资源,SSE 不适合跨组织
Task 设置超时Agent 可能宕机,调用方不能无限等
Artifact 做版本控制Agent 可能多次迭代产出
敏感数据用加密 PartAgent 间传输的数据可能包含个人信息
加可观测性(Trace ID)多 Agent 链路追踪,出了问题能定位
Agent Card 版本管理能力变更需要版本控制,避免调用方缓存过期

八、A2A 生态现状

指标数据
协议版本V1.0 GA
管理方Linux Foundation
生产部署组织150+
主流框架支持Spring AI、LangChain4j、Google ADK、CrewAI
中国国标GB/Z 185-2026
与 MCP 关系互补(A2A 管横向,MCP 管纵向)

九、总结

A2A 解决的是 Agent 世界的"社交问题"——不同框架、不同厂商的 Agent 怎么对话、怎么协作、怎么安全地交换任务:

  1. Agent Card 是入口:声明式能力描述,运行时发现
  2. Task 是核心:明确的生命周期,从提交到完成
  3. JSON-RPC 2.0 是骨架:简单、标准、语言无关
  4. 三种通知模式:Polling / SSE / Push Notification,按场景选
  5. MCP 互补不竞争:一个管工具集成,一个管 Agent 协作

一句话:MCP 给 Agent 装了手和脚,A2A 给 Agent 装了社交网络。两手都要硬,Agent 才能真正干活。


相关阅读:

  • A2A Protocol 官方规范
  • Spring AI A2A 集成文档
  • GB/Z 185-2026 智能体间协作通信协议
http://www.jsqmd.com/news/1389543/

相关文章:

  • Linux进程资源监控:从top/ps命令到pidstat与/proc的深度诊断指南
  • 沃创云优选商机|GEO 获客利器
  • 富锌底漆:电化学牺牲的防护诗学与高锌粉的工程叙事
  • 告别网盘压缩包:Spring Boot项目标准化归档与可复现实践
  • 元器件行业心得:用大盛供应链仓储,是供应链最稳的底气
  • 山东网站建设团队:深耕本土数字生态,为您打造有温度、有转化的专业官网解决方案
  • 2026年8月哈尔滨香坊皮肤补水护理洗脸吧/哈尔滨香坊脸部控油清洁洗脸吧公司推荐精选_哈尔滨沐子洗脸吧 - 品牌宣传支持者
  • 数学建模国赛B题解题全攻略:从问题解构到模型求解与论文写作
  • WarcraftHelper终极指南:魔兽争霸III完全优化方案
  • CMP抛光液流量监测方案:夹持式超声波流量传感器的应用优势
  • Windows与Linux文件系统对比:NTFS、Ext4、XFS、ExFAT选型与跨平台数据共享实战
  • 揭秘奥联网站建设背后的真实故事:如何打造高转化率与极致用户体验的现代化网络门户
  • 深入解析JVM方法区:从永久代到元空间的内存管理与调优
  • 从单Agent到多Agent:构建高效协作的Hermes Agent专家团队
  • 揭秘电子商务网站建设与管理 pdf 资源背后的实战心法与避坑指南
  • 微信聊天记录如何永久保存:3步把十年的对话搬回自己电脑
  • 凡科多年技术积累+餐宝盈0投诉0差评:99元小程序合作打造长期信任与增长,含零代码SAAS、AI编程、源码定制交付
  • MaxFrame Coding Skill:AI编程助手如何重塑大数据开发范式
  • Warp终端:基于Rust与AI的现代化命令行革命
  • 2026年8月电梯智能管控系统/南充小区电梯维保安装公司推荐几家_四川真聚力电梯有限责任公司 - 行业平台推荐
  • 杭州广拓时代领跑 GEO 优化赛道,以空间智能抢占 AI 搜索流量核心高地 避坑篇
  • MCP协议:AI与外部工具的标准接口设计与实践
  • 16周AI Agent自学路线曝光,靠它拿下字节offer【成功上岸版】
  • 本地部署AI绘画去AI感:Stable Diffusion手绘风格工作流实战
  • AI赋能数据可视化:从智能图表推荐到自然语言查询的工程实践
  • 驾驭工程:AI编程从玩具到工程的约束、上下文与验证实践
  • AI应用开发三要素:Prompt、Rule、Skill的核心区别与架构实践
  • 动态规划与资源优化:从“穿越沙漠”赛题看多阶段决策建模
  • 基于FastAPI构建一站式图像上传与预处理服务:从原理到实践
  • 从抱怨到行动:用Flag按钮高效治理AI低质内容的技术实践