多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

小白/程序员必看:收藏这份A2A通信指南,轻松实现独立Agent协作与交付

小白/程序员必看:收藏这份A2A通信指南,轻松实现独立Agent协作与交付 本文深入解析A2A通信机制阐述独立Agent之间如何发现、协作与交付。通过对比Workflow、MCP与A2A的适用场景详解Agent Card、Message、Task和Artifact的核心概念与实现方式并针对Polling、Streaming SSE和Webhook等长任务状态获取机制进行对比分析。最后提供生产落地注意事项帮助开发者快速掌握A2A技术构建高效Agent协作系统。假设公司里已经有两个 Agent一个负责检索资料一个负责生成行业报告。如果它们都运行在同一个应用里能读同一份 State也由同一个 Workflow 调度直接把检索结果传给报告节点就够了。没必要为了“看起来更像多 Agent”再加一层网络协议。但如果检索 Agent 属于数据团队跑在 Python 服务里报告 Agent 由业务团队维护部署在另一套容器双方既不共享内存也看不到对方的上下文和执行状态问题就变了它们怎样发现彼此的能力怎样发起任务报告要跑十分钟调用方怎样知道进度最终文件又以什么格式交付这才是 A2AAgent2Agent Protocol要解决的事情。2026 年发布的 A2A 1.0 将其定位为可用于生产的 Agent 间开放标准。它处理的是跨团队、跨产品、跨技术栈的互操作而不是应用内部的节点编排。A2A 1.0 发布说明也明确说明MCP 与 A2A 位于不同层前者常用于单个 Agent 的工具和上下文集成后者负责 Agent 之间的通信与协作。一、先分清 Workflow、MCP 与 A2A这三个概念经常出现在同一张架构图里所以很容易被混为一谈。判断它们的办法很简单看通信两端是谁以及传递的对象是什么。机制连接的两端主要传递内容适用场景Workflow / Graph同一应用内的节点或 Agent共享 State、步骤结果、控制信号流程确定、状态可共享、由同一运行时管理MCPAI 应用与 MCP ServerTool、Resource、Prompt 等能力让 Agent 查数据、调用 API、访问文件或业务系统A2AA2A Client 与独立 Remote AgentMessage、Task、状态更新、Artifact跨服务、跨框架、跨组织的 Agent 委托与协作MCP Server 即使部署在远程也不因此自动变成“远程 Agent”。按照 MCP 官方架构MCP Server 向 AI 应用提供工具、资源和提示模板。它可以完成耗时操作也可以有自己的程序逻辑但协议关注的是“应用怎样获得上下文和能力”不是“两个自治 Agent 怎样协商并管理一项任务”。A2A Server 则被调用方视为一个黑盒 Agent。调用方知道它能做什么、怎样联系、支持哪些输入输出却不需要知道它用了哪个模型、有哪些内部工具、怎样组织 Prompt。A2A 官方把这种角色称为 Remote Agent。核心概念文档对它的定义就是暴露 A2A Endpoint接收请求处理任务再返回结果或状态。1.1 哪些情况不需要 A2A下面这些场景用应用内编排通常更直接一个主 Agent 把任务串行分给内部节点并统一维护 StateLangGraph 中多个 Node 读取、更新同一个状态对象同一进程里的 SubAgent 由主 Agent 创建结果仍回到主上下文一个 Agent 只是要查询数据库、搜索网页或调用工单 API。最后一种更适合 MCP 或普通 Tool Calling。把每个工具都包装成 Agent再用 A2A 调用会平白增加发现、认证、任务状态和网络容错成本。1.2 哪些情况值得使用 A2A当边界变成独立系统时A2A 的价值才明显两个 Agent 分属不同团队或供应商部署与发布周期互不相同Agent 使用不同框架和语言无法共享内存中的 Context/State调用方只应知道服务契约不应看到对方的 Prompt、模型和内部工具任务可能持续数分钟或数小时需要查询、订阅或回调状态结果不止一段文字还可能是文件、图片或结构化数据。换句话说A2A 处理的是分布式系统问题只是服务端恰好是 Agent。二、A2A 的四步调用链A2A 的核心流程可以压缩成四步读取 Agent Card发现对方的能力和服务地址发送标准 Message复杂任务创建 Task通过轮询、流式连接或 Webhook 获取状态最终用 Artifact 交付文字、文件或结构化数据。这四步对应四个不同问题找谁做、怎样表达、怎样跟踪、拿到什么。三、Agent Card调用前先读“能力说明书”A2A Server 必须提供 Agent Card。客户端通常从下面的标准地址读取https://agent.example.com/.well-known/agent-card.json也可以通过企业内部 Registry或由系统直接配置 Agent Card 地址。无论从哪里拿到客户端都不该跳过这一步因为 Card 决定了后续能不能正确调用。一个简化的 A2A 1.0 Agent Card 如下{ name: Industry Report Agent, description: 根据研究资料生成行业报告, version: 2.3.0, supportedInterfaces: [ { url: https://report.example.com/a2a, protocolBinding: HTTPJSON, protocolVersion: 1.0 } ], capabilities: { streaming: true, pushNotifications: true }, securitySchemes: { bearer: { httpAuthSecurityScheme: { scheme: Bearer, bearerFormat: JWT } } }, securityRequirements: [ { schemes: { bearer: {list: []} } } ], defaultInputModes: [text/plain, application/json], defaultOutputModes: [text/markdown, application/pdf], skills: [ { id: generate-industry-report, name: 生成行业报告, description: 基于已提供资料生成带引用的行业报告, tags: [research, report], inputModes: [application/json], outputModes: [text/markdown, application/pdf] } ] }这里有两个容易混淆的versionAgent Card 顶层version是这个 Agent 服务自身的版本supportedInterfaces[].protocolVersion才是 A2A 协议版本。输入输出格式也不是一个随意填写的inputSchema/outputSchema字段而是用 MIME Type 表达的inputModes/outputModes。如果业务需要严格 JSON Schema可以通过扩展或双方约定补充。supportedInterfaces还说明了通信方式。A2A 1.0 定义三种标准协议绑定JSONRPC、GRPC和HTTPJSON。它们共享同一套 Message、Task、Artifact 语义只是操作映射和序列化方式不同。客户端按 Card 中的顺序选择自己支持的接口并使用该接口的 URL 和协议版本。A2A 1.0 规范要求生产环境中的 HTTP 接口使用 HTTPSgRPC 使用 TLS。 Agent Card 不是能力宣传页客户端要用它做协议选择、内容类型校验和认证准备。Card 写错调用通常在业务逻辑开始前就会失败。四、Message表达这一轮要说什么客户端确定目标 Agent 后用SendMessage发起交互。下面使用最直观的 HTTPJSON 绑定POST /message:send HTTP/1.1 Host: report.example.com Content-Type: application/a2ajson A2A-Version: 1.0 Authorization: Bearer access-token { message: { messageId: msg-20260802-001, role: ROLE_USER, parts: [ { text: 请根据附件数据生成新能源汽车行业报告 }, { url: https://files.example.com/research/source-data.json, filename: source-data.json, mediaType: application/json } ] }, configuration: { acceptedOutputModes: [text/markdown, application/pdf] } }Message 的关键字段并不多字段作用messageId由消息创建方生成的唯一标识也可帮助服务端识别重复发送role标记消息来自客户端还是 Agent即ROLE_USER或ROLE_AGENTparts请求正文可放文字、文件 URL、Base64 原始字节或结构化 JSON 数据taskId继续某个已有 Task 时携带contextId将多个 Task 与 Message 归入同一段交互上下文metadata放业务自定义的附加信息不替代正式扩展Part必须在text、raw、url、data中四选一。这样一条 Message 可以同时带自然语言要求和数据文件也能直接传结构化对象。4.1 身份与认证不塞进 Message很多示意图会把identity、auth画在 Message 里容易让人误以为它们是 Message 的固定字段。A2A 1.0 不是这样设计的。Agent Card 用securitySchemes和securityRequirements告诉客户端需要 OAuth、API Key、Bearer Token 还是 mTLS。客户端在协议层获取凭证再通过 HTTP Header 或 gRPC metadata 随每次请求发送。服务端据此完成身份认证和权限判断。A2A 安全规范明确把身份信息放在协议层处理而不是写进 A2A 语义对象。Message 里的role只表示这一轮来自客户端还是服务端不等同于真实用户身份更不能当权限凭证。4.2 HTTP、JSON-RPC 与 gRPC 是协议绑定同一个SendMessage操作可以映射为绑定典型调用形式适合场景HTTPJSONPOST /message:send易调试适合 Web 基础设施和开放 APIJSON-RPCmessage/send方法已使用 JSON-RPC 的系统gRPCSendMessageRPC强类型、内部高吞吐服务因此准确说法是“用某种协议绑定发送 A2A Message”而不是“Message 支持 HTTP、JSON-RPC、gRPC 三种协议”。五、简单请求返回 Message复杂请求创建 Task服务端收到 Message 后有两条路径。如果问题可以立刻回答比如“你支持生成 PDF 吗”服务端可直接返回一个ROLE_AGENTMessage。此时不需要创建可跟踪任务。如果请求要检索资料、调用多个内部工具、等待审批或生成大文件服务端创建 Task并立即把 Task 返回给客户端{ task: { id: task-7f93c2, contextId: ctx-report-20260802, status: { state: TASK_STATE_SUBMITTED, timestamp: 2026-08-02T10:00:00Z } } }TaskId 由服务端生成。客户端不能自己捏一个新 TaskId只能在后续请求中引用已有 Task。contextId则用于把多轮消息和多个相关任务归在一起。它提供协议层的连续性标识但不等于两个 Agent 共享了完整 Prompt、内存对象或内部工作状态。Task 常见状态包括SUBMITTED服务端已经接收任务 WORKING正在执行 INPUT_REQUIRED缺少输入等待客户端补充 AUTH_REQUIRED执行到某一步需要额外授权 COMPLETED成功完成 FAILED执行失败 CANCELED已取消 REJECTED服务端拒绝执行这也是 A2A 与普通 HTTP API 最明显的区别之一。调用方拿到的不是“请求已接收请稍后再试”这样一句模糊提示而是有 ID、有状态、有生命周期的工作对象。六、长任务怎样拿状态Polling、Streaming 与 WebhookTask 创建后客户端要选择一种更新机制。A2A 1.0 支持轮询、流式连接和 Push Notification通常落到 Webhook三种方式。方式工作方式优点代价Polling客户端定期调用GetTask实现最简单容易重试有延迟会产生空查询Streaming SSE保持连接持续接收状态和 Artifact 分片实时适合前台交互要处理断线、重连和重复事件Webhook客户端登记回调地址服务端主动 POST 更新适合超长任务客户端无需保持连接要验证来源、处理重试与重复通知6.1 Polling最稳妥的起点客户端每隔几秒调用一次GetTask(taskId)。HTTPJSON 绑定对应GET /tasks/task-7f93c2 HTTP/1.1 A2A-Version: 1.0 Authorization: Bearer access-token生产环境不要固定每秒查询。可以从短间隔开始再逐步退避并给总等待时间设置上限。页面关闭或上游任务取消后也要停止轮询。6.2 Streaming SSE边执行边接收客户端可以调用流式发送或对已有 Task 使用SubscribeToTask。服务端通过 SSE 发送TaskStatusUpdateEvent与TaskArtifactUpdateEvent。如果报告按章节生成Artifact 更新可带append: true最后一段用lastChunk: true表示结束。断线重连不能只做“重新连上”。客户端还要按taskId、artifactId和事件状态去重避免把同一段内容追加两次。6.3 Webhook任务结束后主动通知对于几十分钟甚至数小时的任务保持连接意义不大。客户端可以为 Task 配置回调 URL服务端在状态变化或结果生成时主动 POST。Webhook 不是“发一次就一定到”。A2A 规范要求服务端至少尝试一次投递所以重复通知是正常情况。客户端要校验来源和 TaskId以幂等方式处理收到通知后也可以再调用GetTask获取权威的最终状态与完整 Artifact。 实践顺序内部系统先实现 Polling需要前台实时反馈时加 SSE跨系统超长任务再上 Webhook。不要一开始就把三套机制全部做完。七、Artifact交付结果不是继续聊天Message 与 Artifact 都包含parts但职责不同。Message 用来发起任务、补充输入、请求澄清或报告状态Artifact 是任务产出的正式结果。A2A 1.0 规范明确建议不要用 Message 交付 Task 输出结果应放入与 Task 关联的 Artifact。报告 Agent 完成任务后可以返回{ id: task-7f93c2, contextId: ctx-report-20260802, status: { state: TASK_STATE_COMPLETED }, artifacts: [ { artifactId: artifact-report-md, name: 新能源汽车行业报告, parts: [ { text: # 新能源汽车行业报告/n/n……, mediaType: text/markdown } ] }, { artifactId: artifact-report-pdf, name: 新能源汽车行业报告 PDF, parts: [ { url: https://files.example.com/reports/ev-2026.pdf, filename: ev-industry-report.pdf, mediaType: application/pdf } ] }, { artifactId: artifact-metrics, name: 报告指标摘要, parts: [ { data: { sources: 27, chapters: 6, confidence: 0.88 }, mediaType: application/json } ] } ] }同一个 Task 可以有多个 ArtifactMarkdown 正文、PDF 文件、结构化指标各自独立。大结果还可以按 Chunk 分段流式返回。客户端因此不必从一大段聊天文本里猜哪部分才是最终交付物。八、把四步串起来研究 Agent 调用报告 Agent现在回到开头的案例。研究 Agent 已经收集好材料要委托另一个团队的报告 Agent 生成交付件。第一步发现。 研究 Agent 读取 Agent Card确认对方有generate-industry-reportSkill支持application/json输入和text/markdown、application/pdf输出然后选择HTTPJSON1.0 接口。第二步认证并发送。 客户端按 Card 声明的 Bearer 认证要求在协议外获取 Token把凭证放入 Header。Message 里只放任务要求、资料 URL、输出偏好和唯一messageId。第三步跟踪。 报告 Agent 判断任务无法立即完成返回taskId和SUBMITTED。研究 Agent 先轮询如果产品页面需要展示章节生成过程再改为 SSE。执行中若报告 Agent 返回INPUT_REQUIRED客户端用同一个taskId发送补充 Message。第四步交付。 Task 进入COMPLETEDArtifact 中出现 Markdown、PDF 和指标摘要。研究 Agent 校验 MIME Type、文件大小和引用数量再把结果交给后续审批流程。这个案例里报告 Agent 内部仍然可以使用 MCP 查询数据库、调用文件存储也可以用 LangGraph 编排自己的节点。A2A 不替代这些机制它只负责跨过服务边界。报告 Agent 内部 Workflow / Graph → 管步骤、分支和共享 State MCP → 连接数据库、搜索、文件和业务 API 两个独立 Agent 之间 A2A → 发现能力、发送 Message、跟踪 Task、接收 Artifact九、生产落地最容易漏掉的六件事9.1 认证与授权分开做认证回答“你是谁”授权回答“你能否调用这个 Skill、读取这个 Task”。同一个 Agent 可以让普通用户调用摘要能力却只允许特定 Scope 生成正式报告。Task 查询也要绑定身份不能只凭 TaskId 放行。9.2 用 messageId 处理重复发送网络超时不代表服务端没收到。客户端重试SendMessage时应复用同一messageId服务端可据此识别重复消息。Webhook 和 SSE 消费端也要按事件涉及的 Task 与 Artifact 去重。9.3 明确版本不静默降级A2A 1.0 请求要携带A2A-Version: 1.0。Agent Card 中 Agent 自身版本和协议版本分别治理。依赖 1.0 特性的客户端不应在失败后悄悄回退到 0.3否则字段与操作语义可能变化。9.4 给 Task 设生命周期服务端需要定义 Task 保存多久、终态何时归档、Artifact URL 何时失效。客户端不要把 TaskId 当成永久存储地址也不要假设contextId会永远保留对话状态。9.5 把状态与业务日志串起来至少记录messageId、taskId、contextId、调用方身份、Skill、协议版本、耗时、最终状态和 Artifact 摘要。跨团队排障时这些标识比一整段 Prompt 更有用也更适合做脱敏审计。9.6 对输出做契约校验COMPLETED只表示远程 Agent 认为自己完成了。客户端仍要检查 Artifact 是否存在、mediaType是否符合请求、文件能否访问、结构化数据是否满足业务约束。协议成功不等于业务合格。十、什么时候该在架构里引入 A2A在评审会上可以用下面五个问题快速判断被调用方是不是独立部署、独立演进的 Agent 服务双方是否无法或不应该共享内部 Context/State调用方是否只需要能力契约不需要了解对方内部工具与工作流任务是否需要跨请求跟踪状态、补充输入或异步通知结果是否需要以可识别的正式 Artifact 交付前两项都不成立大概率继续用应用内 Workflow。只是缺少外部数据或工具优先考虑 MCP。只有当“独立 Agent 的互操作”成为真实工程边界A2A 才值得加入。A2A 最有用的地方不是让系统里出现更多 Agent 名称而是给原本互不透明的服务建立一份稳定合同先用 Agent Card 说明自己使用 Message 沟通把长工作装进 Task最后交付 Artifact。至于每个 Agent 内部如何推理、调用什么工具、怎样编排节点仍由各自团队决定。这条边界分清以后Workflow、MCP 与 A2A 可以同时存在而且各做各的事。最后2026年技术圈的分化愈发明显降薪裁员潮持续蔓延传统开发、测试等岗位大批缩水不少从业者陷入职业焦虑与之形成鲜明对比的是AI大模型相关岗位迎来疯狂扩招薪资逆势飙升150%大厂更是直接开出70-100W年薪疯抢具备实战能力的大模型人才甚至放宽年龄限制只求能快速落地技术、创造价值很多程序员、职场新人纷纷入局大模型领域绝非盲目跟风而是实实在在看到了不可替代的价值优势这也是2026年最值得抓住的职业风口1、窗口期红利入门门槛友好不同于成熟赛道的“内卷式招聘”2026年大模型人才缺口巨大简历只要达标掌握基础AI应用具备简单项目经验年龄、学历均非硬性要求小白可快速入门转行程序员也能无缝衔接2、技术可复用上手速度翻倍如果你有前后端开发、测试、数据分析等基础在大模型落地、系统部署、Prompt工程等环节会更具优势无需从零开始复用原有技术能力就能快速进阶3、懂业务更吃香竞争力翻倍单纯懂技术已不够2026年大厂更看重“技术业务”的复合型人才有垂直领域金融、医疗、工业等经验者能精准定位模型落地痛点薪资比纯技术岗高出30%以上更重要的是即便没有转型需求用AI大模型工具为工作赋能、提升效率也已经成为80%企业的硬性要求——不会用大模型提效未来很可能被行业淘汰那么2026年小白/程序员该如何高效学习大模型很多人想入门大模型却陷入两大困境要么到处搜集零散资料不成体系越学越懵要么被收费高昂的课程割韭菜花了钱却学不到实战技能白白浪费时间走弯路。今天就给大家精心整理了一份2026年最新、免费、系统化的AI大模型学习资源包覆盖从零基础入门到商业实战、从理论沉淀到面试通关的全流程所有资料均已整理归档无需拼凑直接领取就能上手学习小白可照做程序员可进阶扫码免费领取全部内容1、大模型系统化学习路线这份学习路线结合2026年行业趋势和新手学习规律由行业专家精心设计从零基础到精通每一步都有明确指引帮你节省80%的无效学习时间少走弯路、高效进阶避免踩坑。2、从0到进阶大模型学习视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、大模型学习书籍电子文档涵盖2026年最新技术要点包括基础入门、Transformer核心原理、Prompt工程、RAG实战、模型微调与部署等内容4、AI大模型最新行业报告报告包含腾讯、阿里、甲子光年等权威机构发布的核心内容还有2026年中文大模型基准测评报告、AI Agent行业研究报告等帮你站在行业前沿把握技术风口。5、大模型项目实战配套源码项目包含Deepseek R1、GPT项目、MCP项目、RAG实战等热门方向还有视频配套代码手把手教你从0到1完成项目开发既能练手提升技术又能丰富简历为求职和职业发展加分。6、2026大模型大厂面试真题2026年大模型面试已全面升级不再单纯考察基础原理而是转向侧重技术落地和业务结合的综合考察很多程序员和新手因为缺乏针对性准备明明技术不错却在面试中失利。适用人群四阶段学习规划共90天可落地执行第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容7、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表