A2A通信框架

构建智能体间交互协议

A2A(Agent-to-Agent)协议是一种开放标准,旨在让不同平台和框架之间的AI智能体进行通信和协作,无论其底层技术如何。 本页面详细介绍A2A通信框架的核心组件、架构和实现方式。

A2A:智能体互操作性的新时代

随着AI智能体在企业中的广泛部署,不同智能体之间的协作变得越来越重要。Google于2025年4月发布了Agent2Agent (A2A)开放协议,超过50家技术合作伙伴(包括Atlassian、Box、Cohere、Intuit等)和领先服务提供商(如埃森哲、德勤、普华永道等)为此提供了支持和贡献。

A2A协议是对Anthropic的模型上下文协议(MCP)的补充,为智能体之间的通信提供了标准方法,使它们能够在各种企业平台或应用程序之上相互通信、安全地交换信息和协调操作。

拥抱智能体能力

A2A聚焦于让智能体以自然、非结构化的方式进行协作,即使彼此没有共享内存、工具和上下文,也能高效协作。

默认安全

A2A旨在支持企业级身份验证和授权,与OpenAPI的身份验证方案保持对等,确保通信安全。

多模式支持

A2A设计为支持各种模式,包括文本、音频和视频流,使智能体能够进行多模态交流。

A2A协议核心组件

Agent Card (智能体卡)

一个公开的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 Management (任务管理)

客户端智能体与远程智能体之间的通信以完成任务为导向。"任务"对象由协议定义,具有生命周期。 任务可以立即完成,或对于长时间运行的任务,每个智能体都可以保持同步,了解任务完成情况的最新状态。

{
  "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"
  }
}

Collaboration (协作)

智能体可以相互发送信息,交流上下文、回复、工件或用户指令。 协作功能允许智能体在处理复杂任务时保持持续沟通。

{
  "message_id": "m987654",
  "task_id": "t123456",
  "from": "client_agent",
  "to": "recruitment_agent",
  "content": "请提供与这个职位描述匹配的前三名候选人",
  "timestamp": "2025-04-30T10:02:00Z"
}

User Experience Negotiation (用户体验协商)

每条消息都包含"部件",每个部件是一个完整的内容片段,如生成的图像或文本。 每个部件都有指定的内容类型,允许客户端和远程智能体协商所需的正确格式,包括用户界面功能的协商,如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 }
        ]
      }
    }
  ]
}

A2A协议工作流程

智能体交互流程

客户端智能体
远程智能体
请求任务
查找匹配候选人
接受任务
开始搜索候选人
状态更新
已找到15名潜在候选人
任务完成
已筛选出3名最佳候选人

A2A通信流程

1. 智能体发现

客户端智能体查询远程智能体的Agent Card,确定其是否具有所需能力。

2. 任务创建

客户端智能体创建任务,定义任务参数和目标,然后将其发送给远程智能体。

3. 任务确认

远程智能体确认接收任务,分配任务ID,并开始处理。

4. 状态更新

在处理过程中,远程智能体会定期发送状态更新,包括处理进度或中间结果。

5. 结果交付

任务完成后,远程智能体将最终结果(称为"工件")发送回客户端智能体。

6. 任务关闭

客户端智能体确认收到结果,任务标记为已完成。

A2A实现代码示例

创建A2A服务器(Python)

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客户端(JavaScript)

// 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实际应用案例

1. 人才招聘流程自动化

通过A2A协作,可以大大简化招聘过程。用户(如招聘经理)可以要求智能体寻找符合职位列表、地点和技能组合的候选人。然后,该智能体与其他专业智能体互动,寻找潜在候选人。用户收到建议后,可以指示其智能体安排面试,从而简化候选人搜寻流程。

核心功能:

  • 候选人搜索与筛选
  • 简历分析与技能匹配
  • 面试安排自动化
  • 背景调查协调

2. 跨企业供应链协作

在复杂的供应链环境中,多个企业需要协作以确保产品按时交付。通过A2A,不同企业的供应链智能体可以自动协调库存水平、生产计划和物流安排,而无需人工干预,从而减少延迟和提高效率。

核心功能:

  • 库存管理与预测
  • 生产计划协调
  • 运输与物流优化
  • 需求变化实时响应

3. 客户服务增强

当客户服务智能体遇到复杂问题时,它可以使用A2A协议与多个专业智能体协作,如财务、产品、技术支持等智能体。这种协作可以提供更全面、准确的回应,而无需将客户转接给不同部门,从而提高客户满意度。

核心功能:

  • 跨部门查询处理
  • 问题自动分类与路由
  • 专业知识智能调用
  • 统一客户交互界面

4. 医疗诊断辅助系统

在医疗环境中,A2A协议使不同专业领域的智能体能够协作,为患者提供更全面的诊断辅助。例如,一个常规症状分析智能体可以与专科智能体、实验室结果分析智能体和医学影像智能体合作,共同提出诊断建议。

核心功能:

  • 跨专业医疗协作
  • 医学数据综合分析
  • 治疗方案协同制定
  • 患者记录安全共享

A2A与多智能体系统的未来发展

智能体网络

未来的A2A协议将支持更复杂的智能体网络拓扑结构,使智能体能够形成动态、自适应的协作网络,根据任务需求自动调整结构和通信模式。

增强隐私保护

未来版本将进一步加强数据隐私和安全特性,引入零知识证明、联邦学习和差分隐私等技术,确保敏感信息在智能体协作过程中得到保护。

自适应学习

智能体将能通过A2A协议学习彼此的能力和限制,随着时间推移优化其协作策略,形成更高效的工作流程和分工模式。

A2A与MCP协议的整合前景

随着A2A和MCP协议的进一步发展,我们可以预见这两种协议将更紧密地整合,形成更全面的智能体生态系统支持框架:

  • 优势互补:MCP专注于单一智能体与模型上下文的交互,而A2A关注智能体之间的协作,两者结合将提供从模型到智能体再到智能体网络的完整支持链。
  • 标准统一:协议标准的统一将简化开发者的工作,使他们能够更容易地创建既能充分利用模型能力又能有效协作的智能体。
  • 生态系统扩展:这种整合将促进更广泛的智能体生态系统发展,使不同供应商和平台的智能体能够无缝协作,创造更大的价值。

可以预见,随着这些协议的成熟和广泛采用,我们将进入一个真正的"智能体互联网"时代,智能体将能够像人类团队一样高效协作,解决复杂问题。

结论与展望

A2A协议的出现标志着AI智能体发展的重要里程碑。通过提供标准化的通信框架,A2A使不同平台和框架的智能体能够无缝协作,从而解锁多智能体系统的全部潜力。

随着越来越多的企业采用智能体技术来自动化复杂流程,A2A协议的重要性将继续增长。它不仅促进了技术互操作性,还为创新和效率提升开辟了新的可能性。

未来,我们可以期待看到基于A2A的更复杂、更强大的多智能体系统,它们将协作解决当今一些最棘手的业务挑战,并为人工智能的下一阶段发展铺平道路。

A2A不仅仅是一个协议,它是构建真正协作AI未来的基础。