A2A(Agent-to-Agent)协议是一种开放标准,旨在让不同平台和框架之间的AI智能体进行通信和协作,无论其底层技术如何。 本页面详细介绍A2A通信框架的核心组件、架构和实现方式。
随着AI智能体在企业中的广泛部署,不同智能体之间的协作变得越来越重要。Google于2025年4月发布了Agent2Agent (A2A)开放协议,超过50家技术合作伙伴(包括Atlassian、Box、Cohere、Intuit等)和领先服务提供商(如埃森哲、德勤、普华永道等)为此提供了支持和贡献。
A2A协议是对Anthropic的模型上下文协议(MCP)的补充,为智能体之间的通信提供了标准方法,使它们能够在各种企业平台或应用程序之上相互通信、安全地交换信息和协调操作。
A2A聚焦于让智能体以自然、非结构化的方式进行协作,即使彼此没有共享内存、工具和上下文,也能高效协作。
A2A旨在支持企业级身份验证和授权,与OpenAPI的身份验证方案保持对等,确保通信安全。
A2A设计为支持各种模式,包括文本、音频和视频流,使智能体能够进行多模态交流。
一个公开的JSON格式文件,通常托管在/.well-known/agent.json,用于宣传智能体的能力。
客户端智能体通过Agent Card能够识别出能执行任务的最佳智能体。
{
"name": "RecruitmentAssistant",
"description": "帮助招聘经理寻找合适的候选人",
"version": "1.0",
"capabilities": [
"candidate_search",
"resume_analysis",
"interview_scheduling"
],
"endpoint": "/api/agents/recruitment"
}
客户端智能体与远程智能体之间的通信以完成任务为导向。"任务"对象由协议定义,具有生命周期。 任务可以立即完成,或对于长时间运行的任务,每个智能体都可以保持同步,了解任务完成情况的最新状态。
{
"task_id": "t123456",
"description": "寻找匹配的软件工程师候选人",
"status": "in_progress",
"created_at": "2025-04-30T10:00:00Z",
"updated_at": "2025-04-30T10:05:30Z",
"parameters": {
"skills": ["Python", "JavaScript", "React"],
"experience": "3+ years",
"location": "Remote"
}
}
智能体可以相互发送信息,交流上下文、回复、工件或用户指令。 协作功能允许智能体在处理复杂任务时保持持续沟通。
{
"message_id": "m987654",
"task_id": "t123456",
"from": "client_agent",
"to": "recruitment_agent",
"content": "请提供与这个职位描述匹配的前三名候选人",
"timestamp": "2025-04-30T10:02:00Z"
}
每条消息都包含"部件",每个部件是一个完整的内容片段,如生成的图像或文本。 每个部件都有指定的内容类型,允许客户端和远程智能体协商所需的正确格式,包括用户界面功能的协商,如iframe、视频、网页表单等。
{
"parts": [
{
"type": "text/markdown",
"content": "# 候选人推荐报告\n\n以下是匹配您要求的三名顶级候选人..."
},
{
"type": "application/json",
"content": {
"candidates": [
{ "name": "张三", "match_score": 0.95 },
{ "name": "李四", "match_score": 0.92 },
{ "name": "王五", "match_score": 0.89 }
]
}
}
]
}
客户端智能体查询远程智能体的Agent Card,确定其是否具有所需能力。
客户端智能体创建任务,定义任务参数和目标,然后将其发送给远程智能体。
远程智能体确认接收任务,分配任务ID,并开始处理。
在处理过程中,远程智能体会定期发送状态更新,包括处理进度或中间结果。
任务完成后,远程智能体将最终结果(称为"工件")发送回客户端智能体。
客户端智能体确认收到结果,任务标记为已完成。
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Dict, List, Optional
import uuid
import datetime
app = FastAPI()
# 定义数据模型
class AgentCard(BaseModel):
name: str
description: str
version: str
capabilities: List[str]
endpoint: str
class TaskParameters(BaseModel):
skills: List[str]
experience: str
location: str
class Task(BaseModel):
task_id: str = ""
description: str
status: str = "pending"
created_at: str = ""
updated_at: str = ""
parameters: Optional[TaskParameters] = None
# 保存当前任务
tasks = {}
# 定义Agent Card
@app.get("/.well-known/agent.json")
def get_agent_card():
return {
"name": "RecruitmentAssistant",
"description": "帮助招聘经理寻找合适的候选人",
"version": "1.0",
"capabilities": [
"candidate_search",
"resume_analysis",
"interview_scheduling"
],
"endpoint": "/api/agents/recruitment"
}
# 创建新任务
@app.post("/api/agents/recruitment/tasks")
def create_task(task: Task):
task_id = str(uuid.uuid4())
now = datetime.datetime.now().isoformat()
task.task_id = task_id
task.created_at = now
task.updated_at = now
task.status = "accepted"
tasks[task_id] = task
# 在实际应用中,这里会启动异步任务处理
return task
# 获取任务状态
@app.get("/api/agents/recruitment/tasks/{task_id}")
def get_task(task_id: str):
if task_id not in tasks:
raise HTTPException(status_code=404, detail="Task not found")
return tasks[task_id]
# 更新任务状态
@app.put("/api/agents/recruitment/tasks/{task_id}")
def update_task(task_id: str, status: str):
if task_id not in tasks:
raise HTTPException(status_code=404, detail="Task not found")
tasks[task_id].status = status
tasks[task_id].updated_at = datetime.datetime.now().isoformat()
return tasks[task_id]
// A2A客户端实现
class A2AClient {
constructor(remoteAgentUrl) {
this.remoteAgentUrl = remoteAgentUrl;
}
// 获取远程智能体能力
async discoverAgent() {
try {
const response = await fetch(`${this.remoteAgentUrl}/.well-known/agent.json`);
if (!response.ok) {
throw new Error(`Failed to discover agent: ${response.statusText}`);
}
return await response.json();
} catch (error) {
console.error("Agent discovery failed:", error);
throw error;
}
}
// 创建新任务
async createTask(description, parameters) {
try {
const agentCard = await this.discoverAgent();
const endpoint = `${this.remoteAgentUrl}${agentCard.endpoint}/tasks`;
const response = await fetch(endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
description,
parameters
})
});
if (!response.ok) {
throw new Error(`Failed to create task: ${response.statusText}`);
}
return await response.json();
} catch (error) {
console.error("Task creation failed:", error);
throw error;
}
}
// 获取任务状态
async getTaskStatus(taskId) {
try {
const agentCard = await this.discoverAgent();
const endpoint = `${this.remoteAgentUrl}${agentCard.endpoint}/tasks/${taskId}`;
const response = await fetch(endpoint);
if (!response.ok) {
throw new Error(`Failed to get task status: ${response.statusText}`);
}
return await response.json();
} catch (error) {
console.error("Get task status failed:", error);
throw error;
}
}
// 使用示例
async findCandidates(skills, experience, location) {
try {
// 创建任务
const task = await this.createTask(
"寻找匹配的软件工程师候选人",
{ skills, experience, location }
);
console.log(`Task created with ID: ${task.task_id}`);
// 轮询任务状态
return new Promise((resolve, reject) => {
const checkStatus = async () => {
const status = await this.getTaskStatus(task.task_id);
console.log(`Current task status: ${status.status}`);
if (status.status === "completed") {
resolve(status.result);
} else if (status.status === "failed") {
reject(new Error("Task failed"));
} else {
// 继续轮询
setTimeout(checkStatus, 2000);
}
};
checkStatus();
});
} catch (error) {
console.error("Find candidates operation failed:", error);
throw error;
}
}
}
// 使用示例
async function runExample() {
const client = new A2AClient("https://recruitment-agent.example.com");
try {
const candidates = await client.findCandidates(
["Python", "JavaScript", "React"],
"3+ years",
"Remote"
);
console.log("Found candidates:", candidates);
} catch (error) {
console.error("Example failed:", error);
}
}
runExample();
通过A2A协作,可以大大简化招聘过程。用户(如招聘经理)可以要求智能体寻找符合职位列表、地点和技能组合的候选人。然后,该智能体与其他专业智能体互动,寻找潜在候选人。用户收到建议后,可以指示其智能体安排面试,从而简化候选人搜寻流程。
在复杂的供应链环境中,多个企业需要协作以确保产品按时交付。通过A2A,不同企业的供应链智能体可以自动协调库存水平、生产计划和物流安排,而无需人工干预,从而减少延迟和提高效率。
当客户服务智能体遇到复杂问题时,它可以使用A2A协议与多个专业智能体协作,如财务、产品、技术支持等智能体。这种协作可以提供更全面、准确的回应,而无需将客户转接给不同部门,从而提高客户满意度。
在医疗环境中,A2A协议使不同专业领域的智能体能够协作,为患者提供更全面的诊断辅助。例如,一个常规症状分析智能体可以与专科智能体、实验室结果分析智能体和医学影像智能体合作,共同提出诊断建议。
未来的A2A协议将支持更复杂的智能体网络拓扑结构,使智能体能够形成动态、自适应的协作网络,根据任务需求自动调整结构和通信模式。
未来版本将进一步加强数据隐私和安全特性,引入零知识证明、联邦学习和差分隐私等技术,确保敏感信息在智能体协作过程中得到保护。
智能体将能通过A2A协议学习彼此的能力和限制,随着时间推移优化其协作策略,形成更高效的工作流程和分工模式。
随着A2A和MCP协议的进一步发展,我们可以预见这两种协议将更紧密地整合,形成更全面的智能体生态系统支持框架:
可以预见,随着这些协议的成熟和广泛采用,我们将进入一个真正的"智能体互联网"时代,智能体将能够像人类团队一样高效协作,解决复杂问题。
A2A协议的出现标志着AI智能体发展的重要里程碑。通过提供标准化的通信框架,A2A使不同平台和框架的智能体能够无缝协作,从而解锁多智能体系统的全部潜力。
随着越来越多的企业采用智能体技术来自动化复杂流程,A2A协议的重要性将继续增长。它不仅促进了技术互操作性,还为创新和效率提升开辟了新的可能性。
未来,我们可以期待看到基于A2A的更复杂、更强大的多智能体系统,它们将协作解决当今一些最棘手的业务挑战,并为人工智能的下一阶段发展铺平道路。
A2A不仅仅是一个协议,它是构建真正协作AI未来的基础。