/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 转换为 LangSmith 追踪的 thread_id,将对话中的所有消息分组到一个线程下。
例如:
代理间通信
一旦您的代理通过langgraph dev 在本地运行或部署到生产环境,您就可以使用 A2A 协议促进它们之间的通信。
此示例演示了两个代理如何通过向彼此的 A2A 端点发送 JSON-RPC 消息进行通信。该脚本模拟了一个多轮对话,其中每个代理处理对方的响应并继续对话。
- 两个 LangGraph 代理通信 - 两个使用 A2A 协议的 LangGraph 代理示例
- Google ADK 代理与 LangChain 代理 - Google ADK 代理使用 A2A 协议与 LangChain 代理交互的示例
分布式追踪
当多个代理通过 A2A 通信时,LangSmith 可以将它们的所有追踪分组到一个线程中,为您提供整个多代理对话的统一视图。contextId 如何映射到 thread_id
Agent Server A2A 端点会自动将 A2AcontextId 转换为 LangSmith 追踪的 thread_id。这意味着对话中的每条消息,无论来自哪个参与代理,都会在 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:
通过 MCP 将这些文档连接到 Claude、VSCode 等,以获取实时答案。

