本文介绍了Google推出的A2A开放协议,旨在实现不同智能体间的标准化协作。文章详细阐述了A2A的五大设计原则,核心组件(Agent Card、A2A服务器、A2A客户端),以及工作流程。通过一个篮球活动安排的真实案例,展示了A2A如何促进多智能体间的动态、多模态通信。最后,文章提出了落地方案和关键注意事项,旨在帮助开发者理解并应用A2A,实现智能体间的无缝协作。
一、什么是 Agent2Agent?
Google将 A2A 作为开放协议推出,目标很明确:让不同团队、不同框架、不同部署形态的智能体,能用同一套「协作语言」连起来,面向大规模、多智能体场景。
二、A2A 的五条设计原则
| 原则 | 一句话说明 |
|---|---|
| 拥抱智能体能力 | 支持自然、非结构化的协作方式。 |
| 利用现有标准 | 使用 HTTP、SSE、JSON-RPC,确保与现有系统的兼容性。 |
| 默认安全 | 强调企业级认证与授权思路,并与 OpenAPI 等生态对齐。 |
| 支持长期任务 | 支持长期任务,支持流式更新、通知、状态推进。 |
| 多模态 | 支持文本、音频、视频流等多模态通信。 |
三、核心组件一览
Agent Card
公共元数据文件,通常位于/.well-known/agent.json,描述智能体能力、技能、端点 URL 和认证要求,用于能力发现。A2A 服务器
暴露 HTTP 端点,实现 A2A 协议方法,管理任务执行。A2A 客户端
应用程序或智能体,消费 A2A 服务,通过tasks/send或tasks/sendSubscribe与服务器交互。
A2A 关键组件与技术细节如下:
| 组件 | 描述 |
|---|---|
| Agent Card | 位于/.well-known/agent.json,描述能力、技能、端点 URL、认证要求,用于发现。 |
| A2A 服务器 | 实现协议约定的方法,管理任务执行(具体以官方规格为准)。 |
| A2A 客户端 | 消费 A2A 服务,例如发送tasks/send或tasks/sendSubscribe。 |
| 任务(Task) | 核心工作单元,有唯一 ID,状态如submitted、working等。 |
| 消息(Message) | 通信单元,角色如user/agent,内含Parts。 |
| 部分(Part) | 内容单元,如TextPart、FilePart、DataPart。 |
| 工件(Artifact) | 任务输出,由 Parts 构成。 |
| 流式传输 | 常用SSE推送长任务状态。 |
| 推送通知 | 可通过Webhook异步告知进展。 |
四、A2A 工作流程:从「发现」到「完成」
- 发现:客户端读取
/.well-known/agent.json(Agent Card),了解智能体能力。 - 启动:客户端发送任务请求。
- 使用
tasks/send处理即时任务,返回最终 Task 对象。 - 使用
tasks/sendSubscribe处理长期任务,服务器通过 SSE 事件持续推送更新。
- 处理:服务端执行任务,可能流式返回,也可能一次性返回。
- 交互(可选):若任务状态为
input-required,客户端可基于相同 Task ID 继续补充输入。 - 完成:任务进入终端状态(如
completed、failed或canceled)。
该流程既支持简单任务,也支持需要多轮交互的复杂任务,尤其适合多模态通信环境。
五、A2A 和 MCP 是什么关系?
二者互补,不是替代:
| 对比项 | MCP | A2A |
|---|---|---|
| 主要解决 | 模型如何标准化接入工具、API、资源 | 多个 Agent 之间如何协作通信 |
| 类比 | 工具说明书 / 应用商店里的能力包 | 同事群里的协作语言、协作总线 |
| 典型场景 | 连数据库、Drive、Slack、GitHub 等 | Agent A 查数、Agent B 分析、Agent C 汇总 |
- MCP:用于工具和资源接入
通过结构化输入/输出将 Agent 连接到工具、API 和资源。Google ADK 支持 MCP 工具,可与 Agent 组合使用广泛的 MCP 服务器。 - A2A:用于 Agent 间协作
在不同 Agent 间实现动态、多模态通信,而无需共享内存、资源和工具。这是社区驱动的开放标准。 - 协议交集
Google 建议将 A2A 智能体通过 Agent Card 描述并注册为 MCP 资源。这样框架既能通过 MCP 调用工具,又能通过 A2A 与用户、远程智能体通信,实现无缝协作。
例如,一个智能体可以先通过 MCP 从数据库检索数据,再通过 A2A 与另一个智能体协作分析数据。
六、A2A 为什么这样设计?
- 解耦能力与通信
MCP 专注标准化能力调用(类似微服务),A2A 专注动态协作(类似聊天)。避免智能体既要处理功能逻辑,又要处理通信协议。 - 无缝扩展性
新智能体只需注册 Agent Card 到 MCP,即可被其他智能体发现和调用;A2A 允许智能体动态组队(如临时组建“数据分析小组”)。 - 兼容现有架构
MCP 可集成传统工具(数据库、API);A2A 可对接人类用户或其他异构智能体。
可以这样记:
- MCP 像“应用商店”:提供标准化服务(如地图、支付)。
- A2A 像“微信群聊”:智能体在群里用通用语言(协议)讨论如何分工。
- Agent Card 像“个人资料”:写明“我会修图”“我会翻译”,方便协作时快速发现能力。
七、案例:安排篮球活动(多智能体协作)
实现了一个自动根据天气情况决定是否安排篮球活动的场景。
7.1 业务故事
- WeatherAgent:提供指定日期天气数据(内存模拟)的智能体。
- BasketBallAgent:收到用户日期后,先拉 Agent Card 再问天气,据此决定篮球活动是否成行。
7.2 整体流程
BasketBallAgent接收到用户提供的活动日期BasketBallAgent通过A2A协议向WeatherAgent请求该日期的天气信息WeatherAgent返回天气数据(温度和天气状况)BasketBallAgent根据天气状况做出决策: -如果天气不含"雨"或"雪",确认安排篮球活动 -否则,取消活动并提供取消原因
7.3 实现说明
- 职责分离:天气服务独立进程(FastAPI),决策方用
requests调用,边界清晰。 - 发现端点:
GET /.well-known/agent.json符合“发现”叙事,后续可替换为更贴近官方 schema 的 JSON。 - 与完整 A2A 的差异:当前为简化 REST + 自定义 JSON,未展开官方 JSON-RPC 方法名与 Message/Part 全模型;鉴权上客户端发送了
Bearer,但服务端示例未校验 token,仅适合教学,生产环境需补齐。
7.4 依赖(requirements.txt)
fastapi==0.115.12pydantic==2.11.4Requests==2.32.3uvicorn==0.34.27.5 WeatherAgent(服务端)
WeatherAgent是一个基于FastAPI实现的服务,默认监听0.0.0.0:8000:
from fastapi import FastAPI, HTTPExceptionfrom datetime import datefrom pydantic import BaseModelimport uvicornapp = FastAPI()# Agent Card 声明(通过 /.well-known/agent.json 暴露)WEATHER_AGENT_CARD = { "name": "WeatherAgent", "version": "1.0", "description": "提供指定日期的天气数据查询", "endpoints": { "task_submit": "/api/tasks/weather", "sse_subscribe": "/api/tasks/updates" }, "input_schema": { "type": "object", "properties": { "date": {"type": "string", "format": "date"}, "location": {"type": "string", "enum": ["北京"]} }, "required": ["date"] }, "authentication": {"methods": ["API_Key"]}}# 任务请求模型class WeatherTaskRequest(BaseModel): task_id: str params: dict# 模拟天气数据存储weather_db = { "2026-03-18": {"temperature": "16℃", "condition": "雷阵雨"}, "2026-03-19": {"temperature": "18℃", "condition": "小雨转晴"}, "2026-03-20": {"temperature": "15℃", "condition": "多云转晴"}}@app.get("/.well-known/agent.json")asyncdef get_agent_card(): return WEATHER_AGENT_CARD@app.post("/api/tasks/weather")asyncdef handle_weather_task(request: WeatherTaskRequest): """处理天气查询任务""" target_date = request.params.get("date") # 参数验证 ifnot target_date or target_date notin weather_db: raise HTTPException(status_code=400, detail="无效日期参数") return { "task_id": request.task_id, "status": "completed", "artifact": { "date": target_date, "weather": weather_db[target_date] } }if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)7.6 BasketBallAgent(客户端)
BasketBallAgent是调用方,负责消费WeatherAgent的服务:
import requestsimport uuidclass BasketBallAgent: def __init__(self): self.weather_agent_url = "http://localhost:8000" self.api_key = "SECRET_KEY"# 实际应通过安全方式存储 def _create_task(self, target_date: str) -> dict: """创建 A2A 标准任务对象""" return { "task_id": str(uuid.uuid4()), "params": { "date": target_date, "location": "北京" } } def check_weather(self, target_date: str) -> dict: """通过 A2A 协议查询天气""" # 获取天气智能体能力描述 agent_card = requests.get( f"{self.weather_agent_url}/.well-known/agent.json" ).json() # 构造任务请求 task = self._create_task(target_date) # 发送任务请求 response = requests.post( f"{self.weather_agent_url}{agent_card['endpoints']['task_submit']}", json=task, headers={"Authorization": f"Bearer {self.api_key}"} ) if response.status_code == 200: return response.json()["artifact"] else: raise Exception(f"天气查询失败: {response.text}") def schedule_meeting(self, date: str): """综合决策逻辑""" try: result = self.check_weather(date) if"雨"notin result["weather"]["condition"] and"雪"notin result["weather"]["condition"]: return {"status": "confirmed", "weather": result["weather"]} else: return {"status": "cancelled", "reason": "恶劣天气"} except Exception as e: return {"status": "error", "detail": str(e)}# 使用示例if __name__ == "__main__": meeting_agent = BasketBallAgent() result = meeting_agent.schedule_meeting("2026-03-18") print("篮球安排结果:", result)7.7 如何运行
- 安装依赖:
pip install -r requirements.txt(版本见 7.4)。 - 终端一:运行
WeatherAgent.py,确保本机8000端口可访问。 - 终端二:运行
BasketBallAgent.py。 - 预期结果:
2026-03-18为雷阵雨,活动取消;将schedule_meeting参数改为2026-03-20可验证“多云转晴”时活动确认。
八、落地清单
- 先画协作图:明确有哪些 Agent、谁先发现谁、任务是否长运行、是否需要 SSE。
- 再选协议层:工具调用走 MCP;跨 Agent 对话与任务编排走 A2A(或官方 SDK / 参考实现)。
- 安全优先:Agent Card 写清认证方式;生产环境必须落实网关、密钥与审计。
- 从最小闭环到规格对齐:先跑通「发现 → 任务 → 工件」,再对照官方 spec 补全消息模型与状态机。
九、结语
A2A 的意义,是让智能体协作可发现、可编排、可演进:系统里多一个 Agent,应像多一个标准接口的同事,而不是多一团无法追踪的调用。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2026 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
以上资料如何领取?
为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!
不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。