💶A2A
type
Post
status
Published
date
Aug 17, 2025
slug
A2A
summary
category
agentic
tags
A2A
agent
icon
password
AI summary
Blocked by
Blocking
Category
A2A是什么

A2A(Agent2Agent Protocol,Agent间协议) 是由Google于2025年4月推出、同年6月捐赠给Linux基金会的开放协议(现由Linux基金会中立治理,Apache 2.0许可)。
- 解决跨agent框架通讯问题:A2A是AI Agent之间的“通用通讯与协作语言”,解决“不同厂商、不同框架、不同云上的Agent如何像团队一样互相发现、委托任务、交换结果,而不泄露各自内部逻辑”的问题。
从协议视角看 A2A
A2A(Agent2Agent)协议是基于 HTTP + JSON-RPC 2.0 的开放标准,主要用于不同AI Agent(可能来自不同框架、不同厂商)之间的通信与协作。它的通信过程本质上是客户端Agent → 远程Agent的请求-响应模式,核心围绕“任务(Task)”展开,支持多种交互风格。
下面按实际通信流程分步说明(最常见、最核心的路径):
前置:Agent发现(Discovery)
客户端Agent首先要知道要找哪个远程Agent,以及它能做什么。
- 最常见方式:获取 Agent Card(一个JSON文件)
- 通过知名路径:https://remote-agent.example.com/.well-known/agent.json 或 /agent-card
- 或通过注册表、直接配置等方式
- Agent Card 里包含:
- 端点URL
- 支持的能力(streaming? push notification?)
- 技能列表(skills)
- 认证要求(API Key、OAuth等)
- 输入/输出模态(text、json、image等)
客户端拿到Card后,就知道远程Agent的URL和认证方式,接下来才能发起通信。
建立上下文(可选,但多轮对话常用)
很多场景需要保持会话连续性,会使用 contextId / sessionId。
- 第一次通信时可以不传,服务器返回后生成一个 contextId
- 后续请求带上这个 contextId,保持历史、记忆、状态
发起任务(核心通信起点)
客户端通过 JSON-RPC 调用远程Agent的端点(通常是 POST 到同一个URL),最重要两个方法:
方法名 | 用途 | 典型场景 | 是否阻塞客户端 |
sendTask | 同步请求-响应 | 快速、短任务 | 是(等待完整结果) |
sendTaskSubscribe | 订阅流式更新(建立SSE长连接) | 需要逐步输出、长思考过程 | 否(异步接收) |
请求体示例
远程Agent收到请求后,任务会经历几个状态(status):
- submitted → 已接收
- working → 正在处理
- input-required → 需要更多信息(最典型的多轮场景!)
- completed → 完成,有最终结果
- failed / cancelled
同步模式(sendTask)流程
- 客户端发 sendTask
- 远程Agent直接返回完整结果(如果很快)或先返回
{status: "working", taskId: "..."}
- 如果很快完成,直接在response里带最终artifact(结果)
异步/流式模式(sendTaskSubscribe)流程
- 客户端发 sendTaskSubscribe
- 服务器立即返回 {status: "working"} 并建立 SSE 连接
- 之后服务器通过 SSE 源源不断推送更新:
- 状态变化(working → input-required)
- 中间结果(partial artifact)
- 最终 completed + 完整artifact
- 如果出现 input-required,服务器会推送:客户端再发新的 sendTask(带contextId),补充信息,继续流程。
更长时间任务的补充方式
- 轮询:客户端定时调用 getTaskStatus 或 getTask 方法查状态
- Webhook(推送通知):客户端在首次请求时提供 webhook URL,服务器完成后POST通知
5. 典型完整一次多轮对话流程(最常见实际使用场景)
- 客户端发现 → 拿到 Agent Card
- 客户端发送 sendTaskSubscribe(带用户问题)
- 服务器 → SSE 推送 working → 思考中...
- 服务器 → SSE 推送 input-required + “请告诉我具体需求”
- 客户端收到后 → 再次发 sendTask(带contextId + 补充信息)
- 服务器继续 → 最终 SSE 推送 completed + 最终答案
- 客户端展示结果,结束或继续下一轮
总结
“客户端把任务(带消息)扔给远程Agent,远程Agent要么一次给完答案,要么分多次(SSE)给部分答案,甚至中途反问要补充信息,所有通信都通过同一个JSON-RPC接口,靠taskId / contextId串联上下文。”
Ref
Prev
在k8s环境中使用vgpu | HAMI
Next
SSE
Loading...