Agents

多智能体协议——A2A

前面我们介绍了多智能体,也介绍了几种实现多智能体的方案,包括SubAgent、HandOff以及ChatGrpoup等等。使用langchain/langgraph、autogen、包括spring ai alibaba,我们都可以…

TL;DR

前面我们介绍了多智能体,也介绍了几种实现多智能体的方案,包括SubAgent、HandOff以及ChatGrpoup等等。使用langchain/langgraph、autogen、包括spring ai alibaba,我们都可以…

前面我们介绍了多智能体,也介绍了几种实现多智能体的方案,包括SubAgent、HandOff以及ChatGrpoup等等。使用langchain/langgraph、autogen、包括spring ai alibaba,我们都可以在一个应用内实现一个multi agent。 如果实在一个应用内部的多智能体,其实是不需要额外的通信的,我们完全可以借助框架给我们提供的比如事件机制、Graph机制等等实现上下文的传递和通信。 但是,有一种多智能体,是多个不同应用间协作,整体组成一个多agent的话,那么就需要有一个通信方式,比如我开发了一个工单问题排查的主Agent,但是需要依赖几个外部团队提供的多个子问题排查的Agent。但是我们不是同一个应用中的,我们之间的通信就是个大问题。 我们之前介绍过,Agent如果想要和工具通信,可以通过MCP协议,那其实google也提出过一个可以让多个agent之间通信的协议,那就是A2A协议——Agent to Agent Protocol A2A 也是个协议,他是负责多个 Agent 智能体之间的通信、协作和能力发现的。解决了智能体与其他使用不同框架、部署在不同机器、不同公司的智能体进行有效通信和协作的问题。 与其说A2A和MCP很像,倒不如说A2A和RPC有点像。

A2A关键组件

以下是 A2A 协议的关键组件及其作用:

A2A 客户端(Client Agent)

发起请求或任务的本地智能体。通常运行在用户设备或本地系统中,代表用户或其他系统发起协作,作用: - 构建并发送任务请求给远程智能体(A2A 服务器)。 - 解析并处理来自远程智能体的响应。 - 管理与远程智能体的会话状态和上下文。

A2A 服务器(Remote Agent)

接收并执行任务请求的远程智能体。可部署在云端或第三方服务中,提供特定能力(如图像生成、代码编写、数据分析等)。作用: - 接收来自 A2A 客户端的任务。 - 执行任务逻辑(可能涉及推理、调用工具、生成内容等)。 - 返回结构化的响应(包括消息、工件等)。

智能体卡(Agent Card)

描述智能体能力、接口和元数据的标准化文档。作用: - 声明智能体支持的任务类型、输入/输出格式、依赖项、权限要求等。 - 供客户端发现和理解远程智能体的功能。 - 类似于 OpenAPI 规范,但专为智能体设计。 内容示例: - 名称、版本、描述 - 支持的任务列表 - 输入/输出 schema - 认证方式、速率限制等

任务(Task)

客户端向服务器提交的一个具体工作单元。任务是 A2A 通信的基本单位,具有明确的开始与结束。结构: - 任务 ID(唯一标识) - 任务类型(对应智能体卡中声明的能力) - 输入参数(结构化数据) - 上下文(可选,用于多轮对话或状态传递)

{
  "task_id": "t-789",
  "task_type": "code_interpretation",
  "input": { "code": "print('Hello A2A')" }
}

消息(Message)

任务执行过程中交换的通信单元。承载任务的输入、输出及状态反馈。 - 类型: - 请求消息(客户端 → 服务器) - 响应消息(服务器 → 客户端) - 流式中间消息(用于长任务的进度更新) - 内容: - 文本、结构化数据、错误信息等 - 可包含对工件的引用 Task不会单独在网络上传输,而是封装在一条 Message 中(通常是第一条请求消息)从客户端发送给服务端。

{
  "message_id": "m-001",
  "task_id": "t-789",
  "role": "request",
  "content": {
    "task": { /* 上面的 task 结构 */ }
  }
}

{
  "message_id": "m-002",
  "task_id": "t-789",
  "role": "response",
  "content": { "output": "Hello A2A" }
}

工件(Artifact)

任务执行过程中生成或使用的具体产出物或资源。支持复杂工作流中的数据传递与持久化。 - 示例: - 生成的图像、代码文件、报告 - 中间计算结果、日志、缓存数据 - 特点: - 通常以 URI 或嵌入方式在消息中引用。 - 可被其他智能体复用或进一步处理。

A2A主要流程

1、客户端首先需要知道远程智能体能做什么。它通过获取 智能体卡(Agent Card) 来了解服务端支持的任务类型、输入输出格式、是否需要认证等信息。 2、客户端根据 Agent Card 中声明的能力,构造一个合法的 Task。将该 Task 封装进一条 request 类型的 Message,发送给服务端。 3、服务端收到 Message 后,验证 task_type 是否支持(对照自身 Agent Card),执行任务逻辑(可能调用工具、模型、外部 API 等),若任务生成具体产出(如图片、代码文件、报告等),则创建 Artifact。 4、服务端将结果(包括对 Artifact 的引用)封装进 response Message。

版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。