A2A协议的核心原理可以概括为:通过标准化的“身份名片”让智能体互相认识,通过统一的“消息格式”让智能体互相沟通,通过结构化的“任务流程”让智能体协作完成目标。本质上是给智能体制定了一套“社交规则”,就像人类用名片介绍自己、用语言沟通、用流程协作一样。
核心原理拆解
-
智能体身份与能力标准化(Agent Card)
每个智能体必须公开一个“身份名片”(JSON格式),明确告诉别人:我是谁、我能做什么、怎么联系我、需要什么权限。这是互操作的基础——就像人类合作前先交换名片了解对方能力。 -
消息格式标准化
所有智能体之间的通信内容(请求、响应、状态更新)必须遵循统一格式,包含“任务ID、发送者、接收者、内容类型、数据”等关键字段。确保即使是不同团队开发的智能体,也能看懂对方的“话”。 -
任务生命周期标准化
任何协作都被抽象为“任务”,从创建到完成有明确的状态(待处理、处理中、需输入、完成、失败等),并支持实时状态同步。就像项目管理中的任务流,所有人都能跟踪进度。
伪代码示例(核心流程)
下面用一个具体场景演示:旅行规划智能体(TravelAgent)调用航班查询智能体(FlightAgent)查询从北京到上海的航班。
1. 首先:FlightAgent 发布自己的“身份名片”(Agent Card)
每个智能体在固定地址(如 /.well-known/agent.json)公开自己的能力,供其他智能体发现:
// FlightAgent 的 Agent Card(公开可访问)
{
"agent_id": "flight-agent-123", // 唯一身份ID
"name": "航班查询智能体",
"capabilities": [ // 支持的任务类型
{
"task_type": "flight_search", // 任务类型:航班查询
"input_schema": { // 输入参数格式
"from_city": "string", // 出发城市
"to_city": "string", // 到达城市
"date": "string" // 日期(YYYY-MM-DD)
},
"output_schema": { // 输出格式
"flights": [
{ "flight_no": "string", "departure": "string", "arrival": "string", "price": "number" }
]
}
}
],
"endpoint": "https://flight-agent.example.com/a2a", // 通信接口地址
"auth": { "type": "none" } // 暂时无需认证
}
2. TravelAgent 发现并调用 FlightAgent
TravelAgent 首先获取 FlightAgent 的“名片”,确认其能处理“航班查询”任务,然后发送任务请求:
# 旅行规划智能体(TravelAgent)的代码逻辑
class TravelAgent:
def __init__(self):
self.agent_id = "travel-agent-456"
def find_flight_agent(self):
# 步骤1:获取 FlightAgent 的身份名片(实际中可能通过服务发现机制)
flight_agent_card = requests.get("https://flight-agent.example.com/.well-known/agent.json").json()
# 检查是否支持航班查询任务
if "flight_search" in [cap["task_type"] for cap in flight_agent_card["capabilities"]]:
return flight_agent_card
else:
raise Exception("该智能体不支持航班查询")
def request_flight_search(self, flight_agent_card):
# 步骤2:构造A2A标准格式的任务请求
task_request = {
"task_id": "task-789", # 唯一任务ID(用于跟踪)
"sender": self.agent_id, # 发送者ID
"receiver": flight_agent_card["agent_id"], # 接收者ID
"task_type": "flight_search", # 任务类型(对应FlightAgent的能力)
"input_data": { # 符合input_schema的参数
"from_city": "北京",
"to_city": "上海",
"date": "2025-11-01"
},
"timestamp": "2025-10-28T10:00:00Z"
}
# 步骤3:发送请求到FlightAgent的接口
response = requests.post(
url=flight_agent_card["endpoint"],
json=task_request
)
return response.json()
3. FlightAgent 处理任务并响应
FlightAgent 收到请求后,按标准格式解析并处理,返回结果:
# 航班查询智能体(FlightAgent)的代码逻辑
class FlightAgent:
def __init__(self):
self.agent_id = "flight-agent-123"
self.endpoint = "https://flight-agent.example.com/a2a"
def handle_request(self, request):
# 步骤1:验证请求格式(是否符合A2A标准)
if not self._validate_request(request):
return self._create_response(
task_id=request["task_id"],
status="failed",
error="请求格式错误"
)
# 步骤2:处理航班查询任务
if request["task_type"] == "flight_search":
input_data = request["input_data"]
# 模拟查询数据库获取航班信息
flights = self._search_flights(
from_city=input_data["from_city"],
to_city=input_data["to_city"],
date=input_data["date"]
)
# 步骤3:返回标准格式的响应
return self._create_response(
task_id=request["task_id"],
status="completed", # 任务状态:已完成
output_data={"flights": flights} # 符合output_schema的结果
)
def _create_response(self, task_id, status, output_data=None, error=None):
# 构造A2A标准响应格式
return {
"task_id": task_id,
"sender": self.agent_id,
"receiver": request["sender"],
"status": status, # 任务状态:pending/completed/failed/needs_input
"output_data": output_data,
"error": error,
"timestamp": "2025-10-28T10:01:00Z"
}
def _search_flights(self, from_city, to_city, date):
# 模拟数据库查询
return [
{"flight_no": "CA185", "departure": "08:00", "arrival": "10:20", "price": 580},
{"flight_no": "MU513", "departure": "14:30", "arrival": "16:45", "price": 650}
]
4. 任务状态跟踪(可选,复杂任务用)
如果任务需要长时间处理(比如需要人工审核),FlightAgent 可以通过 SSE(服务器发送事件)实时推送状态:
# FlightAgent 推送任务状态更新(用于长任务)
def send_status_update(task_id, new_status):
# SSE格式:向订阅者推送状态
sse_data = {
"task_id": task_id,
"status": new_status, # 例如:"processing"(处理中)、"needs_input"(需补充信息)
"message": "正在查询航班数据..."
}
# 通过WebSocket或SSE接口推送给订阅者(如TravelAgent)
sse_server.send_event(task_id, sse_data)
原理总结
A2A协议的核心就是通过标准化的元数据(Agent Card) 解决“智能体互相认识”的问题,通过标准化的消息格式解决“智能体互相理解”的问题,通过标准化的任务生命周期解决“协作流程一致”的问题。
就像人类协作时:
- 先看名片(Agent Card)知道对方能做什么;
- 用共同语言(标准消息格式)沟通;
- 按约定流程(任务状态)推进工作。
这样一来,无论智能体是用Python、Java开发,还是来自Google、阿里,都能“无缝对话”。