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未来的基础。