大模型智能体协同新标准:Agent2Agent(A2A)协议详解与实战指南!

简介

Agent2Agent(A2A)协议解决了多智能体间缺乏统一通信标准的问题,通过Agent Card实现能力自动发现与即插即用。该协议定义了服务器与客户端交互的tasks/send和tasks/sendSubscribe两种方法,支持短时任务和长时任务处理。文章通过旅行顾问与天气查询智能体的协同案例,展示了A2A协议的实际应用价值,为构建复杂多智能体系统提供了标准化解决方案。
在这里插入图片描述


在大模型和自主智能体(Agent)爆发式发展的今天,单个 Agent 已难以应对复杂任务。无论是企业级自动化流程,还是跨领域的研究协作,多个 AI 智能体之间的高效协同已成为刚需。然而,缺乏统一通信标准导致“各自为政”,严重制约了规模化部署。

A2A 协议的出现,正是为了解决这一痛点。

什么是Agent2Agent

每个支持 A2A 的智能体必须在其域名下提供一个公开元数据文件agent card:
/.well-known/agent.json

这个Agent Card 包含:

  • 智能体名称与描述
  • 支持的技能列表(如“生成报告”、“调用 API”)
  • 任务端点 URL(如 /a2a/tasks/send
  • 认证方式(如 Bearer Token、OAuth2)

其他 Agent 可通过该文件自动发现其能力,实现“即插即用”。

A2A 服务器 & 客户端

  • A2A 服务器:暴露标准 HTTP 接口,接收并执行任务。
  • A2A 客户端:发起任务请求的智能体或应用。

两者通过两种主要方法交互:

  • tasks/send:用于短时、无交互任务,直接返回结果。
  • tasks/sendSubscribe:用于长时任务,服务器通过 SSE 持续推送状态更新(如 processing → input-required → completed)。

🌰Agent2Agent应用

假设当前Agent A是一个旅行顾问,能够根据天气情况给出详细的出行建议,但是它无法获取天气信息,需要另一个能专门提供天气信息的Agent B提供支持。

在Agent B方面,需要在域名提供agent card,默认位置是/.well-known/agent.json,agent card需要有该智能体的描述信息、接口信息、接口参数等,以及提供agent功能的接口,代码参考:

from fastapi import FastAPI, HTTPException
from datetime import date
from pydantic import BaseModel
import uvicorn
app = 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 = {
"2025-11-08": {"temperature": "25℃", "condition": "雷阵雨"},
"2025-11-09": {"temperature": "18℃", "condition": "小雨转晴"},
"2025-11-10": {"temperature": "22℃", "condition": "多云转晴"}
}
@app.get("/.well-known/agent.json")
async def get_agent_card():
return WEATHER_AGENT_CARD
@app.post("/api/tasks/weather")
async def handle_weather_task(request: WeatherTaskRequest):
"""处理天气查询任务"""
target_date = request.params.get("date")
# 参数验证
if not target_date or target_date not in 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)

Agent A则首先需要拿到agent card,获取描述信息再调用Agent B的接口获取天气信息,再根据自己的大模型给出出行建议,代码参考:

import requests
import uuid
import dashscope
import os
from http import HTTPStatus
from typing import Dict, Any
class TravelAgent:
def __init__(self):
self.weather_agent_url = "http://localhost:8000"
self.api_key = "SECRET_KEY"  # 实际应通过安全方式存储
self.agent_card = None
def _create_task(self, target_date: str, location: str = "北京") -> dict:
"""创建A2A标准任务对象"""
return {
"task_id": str(uuid.uuid4()),
"params": {
"date": target_date,
"location": location
}
}
def _fetch_agent_card(self) -> Dict[str, Any]:
"""获取天气智能体能力描述"""
if self.agent_card is not None:
return self.agent_card
agent_card_response = requests.get(
f"{self.weather_agent_url}/.well-known/agent.json"
)
if agent_card_response.status_code != 200:
raise Exception(f"无法获取天气智能体信息: {agent_card_response.text}")
self.agent_card = agent_card_response.json()
return self.agent_card
def check_weather(self, target_date: str, location: str = "北京") -> dict:
"""通过A2A协议查询天气"""
# 获取天气智能体能力描述
agent_card = self._fetch_agent_card()
# 构造任务请求
task = self._create_task(target_date, location)
# 发送任务请求
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:
result = response.json()
# 检查返回结果是否包含artifact字段
if "artifact" in result:
return result["artifact"]
else:
raise Exception(f"天气查询返回格式不正确: {result}")
else:
raise Exception(f"天气查询失败: {response.text}")
def get_travel_advice(self, date: str, location: str = "北京"):
"""根据天气给出出行建议"""
try:
result = self.check_weather(date, location)
weather_condition = result["weather"]["condition"]
temperature = result["weather"]["temperature"]
# 使用dashscope调用大模型给出出行建议
# 设置 DashScope API Key
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
# 构造提示词
prompt = f"当前{location}的天气情况:{weather_condition},温度:{temperature}度。请根据这个天气情况给出详细的出行建议,包括穿衣、活动安排等方面。"
messages = [
{"role": "system", "content": "你是一个专业的旅行顾问,能够根据天气情况给出详细的出行建议。"},
{"role": "user", "content": prompt}
]
# 调用dashscope API
response = dashscope.Generation.call(
model="qwen-turbo-latest",
messages=messages,
result_format='message'
)
# 检查响应是否有效并包含所需内容
if response.status_code == HTTPStatus.OK:
advice = response.output.choices[0].message.content
else:
# 如果调用失败或响应结构不符合预期,使用原有的简单建议
if "雨" in weather_condition or "雪" in weather_condition:
advice = f"由于{weather_condition}天气,建议您推迟出行或选择室内活动。"
elif int(temperature) < 10:
advice = "天气较冷,请注意保暖,适当增加衣物。"
elif int(temperature) > 30:
advice = "天气炎热,请做好防暑降温措施,多补充水分。"
else:
advice = "天气适宜出行,祝您旅途愉快!"
return {
"status": "success",
"weather": result["weather"],
"advice": advice
}
except Exception as e:
return {"status": "error", "detail": str(e)}
# 使用示例
if __name__ == "__main__":
travel_agent = TravelAgent()
result = travel_agent.get_travel_advice("2025-11-08")
print("出行建议:", result)

当然这个简单的功能完全能通过mcp实现,可以参考

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈,帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
在这里插入图片描述

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值