Agent2Agent (A2A) 是谷歌提出的一种用于实现对话式 AI 智能体间通信的协议。LangSmith 实现了对 A2A 的支持,允许你的智能体通过标准化协议与其他兼容 A2A 的智能体进行通信。 A2A 端点可在 Agent Server 中的文档索引
在以下地址获取完整的文档索引:https://docs.langchain.org.cn/llms.txt
在进一步探索之前,请使用此文件发现所有可用页面。
/a2a/{assistant_id} 使用。支持的方法
Agent Server 支持以下 A2A RPC 方法- message/send:向助手发送消息并接收完整响应
- message/stream:发送消息并使用服务器发送事件 (SSE) 实时流式传输响应
- tasks/get:检索先前创建的任务的状态和结果
智能体卡片发现
每个助手都会自动公开一张 A2A 智能体卡片,该卡片描述了其功能并提供了其他智能体连接所需的信息。你可以使用以下方式检索任何助手的智能体卡片要求
要使用 A2A,请确保安装了以下依赖项langgraph-api >= 0.4.21
使用概述
启用 A2A- 升级至使用 langgraph-api>=0.4.21。
- 部署具有基于消息的状态结构的智能体。
- 使用该端点与其他兼容 A2A 的智能体建立连接。
创建 A2A 兼容的智能体
此示例创建了一个兼容 A2A 的智能体,该智能体使用 OpenAI 的 API 处理传入消息并维护对话状态。该智能体定义了基于消息的状态结构,并处理 A2A 协议的消息格式。 为了与 A2A “text” 部分兼容,智能体状态中必须包含messages 键。 A2A 协议使用两个标识符来保持对话的连续性:contextId:将消息分组到一个对话线程中(类似于会话 ID)taskId:标识该对话中的每个单独请求
contextId 和 taskId - 智能体会生成并返回它们。对于对话中的所有后续消息,请包含来自之前响应的 contextId 和 taskId 以保持线程连续性。 LangSmith 追踪:LangSmith 部署的 A2A 端点会自动将 A2A 的 contextId 转换为 thread_id 以进行 LangSmith 追踪,将对话中的所有消息归类在同一个线程下。 例如:智能体间通信
一旦你的智能体通过langgraph dev 在本地运行或部署到生产环境,你就可以使用 A2A 协议促进它们之间的通信。 此示例演示了两个智能体如何通过向彼此的 A2A 端点发送 JSON-RPC 消息进行通信。该脚本模拟了一场多轮对话,其中每个智能体都会处理对方的响应并继续对话。- 两个 LangGraph 智能体通信 - 使用 A2A 协议的两个 LangGraph 智能体示例
- Google ADK 智能体与 LangChain 智能体交互 - 使用 A2A 协议的 Google ADK 智能体与 LangChain 智能体交互示例
分布式追踪
当多个智能体通过 A2A 进行通信时,LangSmith 可以将它们所有的追踪 (traces) 分组到一个线程 (thread) 中,从而为你提供整个多智能体对话的统一视图。contextId 如何映射到 thread_id
Agent Server 的 A2A 端点会自动将 A2A 的contextId 转换为 thread_id 以用于 LangSmith 追踪。这意味着对话中所有参与智能体的每条消息都会归类在 LangSmith 的同一个线程下,无需你进行任何额外配置。 工作流程如下:- 在第一条消息中,客户端省略
contextId。服务器生成一个并在响应中返回它。 - 客户端在所有后续消息中传递
contextId以保持对话连续性。 - Agent Server 将
contextId映射到 LangSmith 元数据中的thread_id,因此所有轮次都会出现在同一个线程中。
跨多个智能体进行追踪
当来自不同框架的智能体通过 A2A 进行通信时,你可以通过在所有智能体之间共享相同的thread_id 来在 LangSmith 中统一它们的追踪。将第一个智能体返回的 contextId 用作所有后续请求的 thread_id。 以下代码片段演示了核心概念。有关包含两个智能体的完整可运行实现,请参考 Google ADK + LangChain 示例。message 对象内包含 contextId 和 taskId,以便服务器将其与正在进行的对话关联起来。在第一条消息中省略它们,因为服务器会生成 contextId 并在响应中返回。 2. 在元数据中设置 thread_id:在 JSON-RPC 有效负载的顶层 metadata 字段中传递 thread_id,而不是在 params 中。 3. 在智能体间共享 thread_id:在第一条消息之前生成一个随机的 thread_id。一旦服务器返回 contextId,将其用作所有后续请求的 thread_id,这样可以使 A2A 对话上下文与 LangSmith 线程保持同步。将相同的 thread_id 传递给每个智能体,以便所有追踪都被分组到一个线程中。在非 LangGraph 智能体中接收 thread_id
上一节介绍了客户端方面的内容——即在发送消息时传播thread_id。如果你的某个智能体不是基于 LangGraph 构建的,它还需要在接收端提取并附加 thread_id,以便其追踪能落在相同的 LangSmith 线程中。使用 langsmith.integrations.otel.configure() 来设置自动追踪,并从传入的 A2A 请求元数据中提取 thread_id,从而将追踪归组到同一个线程中。
app 上注册你的智能体路由。
在你的环境中设置
LANGSMITH_API_KEY 以及(可选的)LANGSMITH_PROJECT 以启用追踪。对话中的所有智能体应使用同一个项目,以便它们的追踪可以一起显示。在 LangSmith 中查看跟踪
在运行多智能体对话后,打开 LangSmith UI 并导航至 Threads (线程)。所有来自参与智能体的轮次都将显示在一个由共享的thread_id 标识的单个线程下。
禁用 A2A
要禁用 A2A 端点,请在你的langgraph.json 配置文件中将 disable_a2a 设置为 true
将这些文档连接到 Claude、VSCode 等,以获得实时答案。

