Agent 之间怎么对话A2A 协议全景解析从概念到 Java 落地你公司 HR Agent 用 Google ADK 构建销售 Agent 用 LangChain财务 Agent 用 CrewAI——一个入职流程要横跨三个系统靠人工串联A2A 协议让它们自己对话、自己协作。一、为什么需要 A2A先看一个真实场景新员工入职流程 1. HR Agent 完成背调 2. 销售 Agent 创建客户关系 3. 财务 Agent 开通报销权限 没有 A2A邮件 → 钉钉 → 手动填单 → 等审批 有了 A2AHR Agent 完成 → 自动通知销售 Agent → 自动通知财务 Agent当前 Agent 生态的痛点痛点具体表现框架孤岛LangChain、CrewAI、AutoGPT 各自闭环跨框架无法直接通信手动串联多 Agent 流程靠人手动传递信息效率低且易出错能力不可见A Agent 不知道 B Agent 能干什么无法动态发现和调度安全失控Agent 之间直接调用 API没有标准化的身份认证和权限管理A2AAgent-to-Agent协议由 Google 于 2025 年 4 月发布专门解决这些问题。2025 年 6 月捐赠给 Linux 基金会已发布 V1.0 GA150 组织生产部署。二、A2A vs MCP vs 子 Agent三个层次别搞混聊 A2A 最大的误区是把它跟 MCP、子 Agent 混在一起——它们解决的根本不是同一层问题┌─────────────────────────────────────────────────────────────┐ │ 应用层业务流程 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ A2AAgent ↔ Agent 横向协作 │ │ │ │ 你做背调我做报销审批我们怎么对接 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────────┐ ┌───────────────────────────┐ │ │ │ MCPAgent ↔ 工具 │ │ 子AgentAgent 内部派生 │ │ │ │ 纵向集成 │ │ 纵向编排 │ │ │ │ 连数据库、调API │ │ 主Agent拆子任务 │ │ │ └───────────────────────┘ └───────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘维度A2AMCP子 Agent解决什么Agent 间横向协作Agent 与工具/数据纵向集成系统内任务拆分一句话类比SMTP邮件协议USB-C设备接口团队内部分工通信方向对等主从主从跨框架天然支持不涉及通常同框架内部署边界跨组织单 Agent单 AgentMCP 是给 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任务完成产出 Artifactfailed任务失败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.0A2A 基于 JSON-RPC 2.0所有请求/响应都是标准 JSON4.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 NotificationWebhook 回调 │ │ 调用方注册回调 URL远端状态变化时主动推送 │ │ ✓ 解耦 ✓ 适合跨组织 ✗ 需公网可达 │ └───────────────────────────────────────────────────────┘模式适用场景实时性复杂度Polling简单场景、内网低低Streaming SSE大模型流式输出高中Push Notification跨组织协作中高五、Java 落地Spring AI A2A5.1 引入依赖Spring AI 已提供 A2A 支持dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-a2a/artifactIdversion1.0.0-GA/version/dependency5.2 发布 Agent CardConfigurationpublicclassA2aConfig{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 端点RestControllerRequestMapping(/a2a)publicclassA2aController{privatefinalHrBackgroundCheckServicecheckService;PostMappingpublicResponseEntityJsonRpcResponsehandleRequest(RequestBodyJsonRpcRequestrequest){switch(request.getMethod()){casetasks/send:TasktaskcheckService.startCheck(request.getParams());returnResponseEntity.ok(JsonRpcResponse.success(task));casetasks/get:TaskcurrentcheckService.getStatus(request.getParams().getId());returnResponseEntity.ok(JsonRpcResponse.success(current));casetasks/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 调用远端 AgentServicepublicclassOnboardingService{privatefinalA2aClienta2aClient;publicStringstartBackgroundCheck(StringcandidateName){// 1. 发现 Agent读 Agent CardAgentCardhrCarda2aClient.discover(https://hr-agent.example.com/a2a/.well-known/agent-card);// 2. 发送任务TaskRequesttaskRequestTaskRequest.builder().message(Message.builder().role(user).parts(List.of(TextPart.of(请对候选人 candidateName 进行背调))).build()).build();Tasktaska2aClient.sendTask(hrCard.getUrl(),taskRequest);// 3. 轮询等待完成生产环境用 Push Notificationwhile(task.getStatus().getState()TaskState.WORKING){Thread.sleep(5000);taska2aClient.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 怎么对话、怎么协作、怎么安全地交换任务Agent Card 是入口声明式能力描述运行时发现Task 是核心明确的生命周期从提交到完成JSON-RPC 2.0 是骨架简单、标准、语言无关三种通知模式Polling / SSE / Push Notification按场景选MCP 互补不竞争一个管工具集成一个管 Agent 协作一句话MCP 给 Agent 装了手和脚A2A 给 Agent 装了社交网络。两手都要硬Agent 才能真正干活。相关阅读A2A Protocol 官方规范Spring AI A2A 集成文档GB/Z 185-2026 智能体间协作通信协议