跳到主要内容
2026-08-14 · 一段与 batype 的对话(AI) · 由提问者公开

什么是 A2A 协议?

回答由 AI 基于 batype 的笔记生成,不代表本人实时观点。

什么是 A2A 协议?

我目前没有发布过 A2A(Agent2Agent)协议的笔记,不能把它当作自己已经系统研究过的主题来展开讲。

只做概念区分的话:A2A 面向 AI Agent 与 AI Agent 之间的通信和协作,目标是让不同厂商、不同框架的 Agent 能互操作;MCP 则更偏向让模型或 Agent 接入外部工具、数据和上下文。【W2】

站内引用
能详细讲一下 A2A(Agent2Agent)协议吗?

我没有发布过 A2A 的系统笔记,所以不能把下面当成我对协议细节的完整解读;但基于现有资料,可以先建立一个可靠的框架。

**A2A(Agent2Agent)是让不同 AI Agent 彼此发现、通信并协作的开放协议。**它主要解决的是:不同厂商、不同框架实现的 Agent,如何跨系统完成一项任务,而不是各自困在自己的生态里。【W2】【W4】

它解决什么问题

单个 Agent 通常能调用模型、工具和数据,但现实任务常常需要多个专业 Agent 配合,例如:

  • 一个 Agent 负责拆解用户任务;
  • 一个 Agent 查企业知识库;
  • 一个 Agent 查询库存或生成报价;
  • 一个 Agent 汇总结果并回复用户。

如果这些 Agent 分别由不同团队、不同框架甚至不同供应商构建,没有统一通信方式,集成成本会很高。A2A 想做的就是定义一层共同的交互规范,让它们能“对话”。【W2】【W3】

可以把它类比为:

  • HTTP 让不同客户端和服务器能交换 Web 内容;
  • A2A 让不同 Agent 能交换任务、状态和结果。

这个类比只是帮助理解,不能认为 A2A 已经像 HTTP 一样成熟和普及;它本身仍是较新的协议。【W3】

基本角色:Client Agent 与 Remote Agent

A2A 中有两个核心角色:

  1. Client Agent

    • 接收用户目标;
    • 组织、发起任务;
    • 将任务发送给其他 Agent。
  2. Remote Agent

    • 接收任务;
    • 自己执行推理、调用工具或转交内部流程;
    • 返回结果或任务进度。

Google 对它的描述很直接:Client Agent 负责形成并传达任务,Remote Agent 负责执行任务并尝试给出正确的信息或动作。【W4】

例如用户说:“帮我安排一次出差。”

用户
  ↓
行程规划 Agent(Client Agent)
  ├──→ 航班 Agent(Remote Agent)
  ├──→ 酒店 Agent(Remote Agent)
  └──→ 费用政策 Agent(Remote Agent)
  ↓
汇总可执行的出行方案

这里 A2A 关注的是这些 Agent 怎样交付任务和返回结果,而不是规定它们内部必须使用什么模型、记忆系统或工具链。

它不规定 Agent 内部怎么实现

我认为这是理解 A2A 的关键:它强调 Agent 间互操作,不要求暴露 Agent 的内部实现。

一个 Remote Agent 可以用 LangGraph、CrewAI、AutoGen,也可以是团队自研框架;它的内部 prompt、工具调用逻辑、私有记忆和业务实现不必暴露给调用方。资料将这种特征描述为“opaque execution”,即协议关注交互接口,而非 Agent 内部如何完成工作。【W1】【W3】

这对企业场景很重要:

  • 能保护私有业务逻辑和数据;
  • 不需要强制统一技术栈;
  • 外部调用方只需要知道它有什么能力、如何请求、会返回什么。

通信上复用了常见 Web 技术

A2A 没有另起炉灶地发明一套全新网络协议,而是建立在已有标准之上,包括:

  • HTTP
  • JSON-RPC
  • SSE(Server-Sent Events)

这样做的好处是接入门槛低,也更容易融入已有的服务治理、认证、审计和监控体系。【W1】【W3】

其中 SSE 很适合长任务:某个 Agent 不必等全部工作结束才返回,可以持续推送“任务进行中”“等待人工确认”“已完成”等状态。

Client Agent 发起任务
        ↓
Remote Agent 返回:已接收
        ↓
Remote Agent 返回:正在查询
        ↓
Remote Agent 返回:需要补充信息
        ↓
Remote Agent 返回:最终结果

这比一次性 HTTP 请求更符合 Agent 任务的现实:很多任务耗时长、过程不确定,甚至需要 Human-in-the-loop。

A2A 与 MCP 的区别

一句话:

  • MCP(Model Context Protocol):重点是 Agent / 模型如何接入工具、数据和上下文
  • A2A:重点是一个 Agent 如何与另一个 Agent协作。

Google 将二者定义为互补关系:MCP 为 Agent 提供工具和上下文,A2A 则处理 Agent 与 Agent 的连接和协作。【W4】

可以这样理解:

Agent A
  ├── 通过 MCP 调用数据库、文件系统、GitHub、浏览器等工具
  └── 通过 A2A 委托 Agent B 完成一类专业任务

所以 A2A 不是 MCP 的替代品。一个实际系统里,两者完全可以同时存在:

  • Agent 对内通过 MCP 使用能力;
  • Agent 对外通过 A2A 寻找和委派专业 Agent。

为什么不直接用普通 API

普通 API 当然也能让服务相互调用,但 API 通常面向固定、明确的功能:

GET /flights?from=SHA&to=HKG

A2A 面向的是更高层的、可能持续变化的任务协作

请根据用户预算、公司差旅政策和会议时间,
制定可预订的出行方案;如信息不足,请说明缺少什么。

这类请求的特点是:

  • 任务可能很复杂;
  • 执行可能耗时;
  • 结果不一定是一个固定 JSON 字段;
  • 可能需要流式进度;
  • 可能需要补充信息或人工介入;
  • 调用方不应该依赖被调用 Agent 的内部工具和实现。

因此,我倾向于把 A2A 看作“面向 Agent 协作的任务协议层”,而不是普通 REST API 的简单替代。

需要保持清醒的地方

A2A 的愿景很明确:降低多 Agent 生态的互操作成本。但协议存在不代表协作天然可靠。

真正落地仍然要处理:

  • 身份认证与授权:谁能调用哪个 Agent;
  • 数据边界:哪些上下文允许发送给外部 Agent;
  • 结果可信度:Agent 的输出是否需要校验;
  • 成本与超时:长任务如何取消、重试和计费;
  • 可观测性:任务经过哪些 Agent、在哪一步失败;
  • 人类确认:涉及付款、删除、发布等高风险动作,不能只靠 Agent 自行决定。

A2A 的资料本身也强调了企业级认证、授权、安全和隐私等需求。【W1】【W3】

**总结:A2A 要标准化的不是“模型怎么思考”,而是“Agent 如何把任务交给另一个 Agent,并获得可跟踪、可协作的结果”。**它更适合多团队、多供应商、多专业 Agent 共存的场景;如果只是一个应用内几个固定函数的调用,先用普通 API 或 MCP 往往更简单。

站内引用
A2A 的 身份认证与授权,如何处理?

我没有发布过 A2A 规范的系统笔记,因此不把下面当作对某一版规范字段和流程的逐条解读。先给结论:

**A2A 的认证与授权,本质上沿用成熟的 Web/API 安全模型:TLS 负责确认通信端点和保护链路;OAuth 2.0、Bearer Token、JWT 或 mTLS 等机制负责确认调用方身份;服务端再依据 token 的权限范围、用户身份和资源策略决定是否允许这个 Agent 执行某个任务。**A2A 不应因为通信双方是 Agent,就跳过现有的身份和权限边界。【W1】【2】

先区分三个问题

1. 传输链路是否可信:TLS / HTTPS

Client Agent 调用 Remote Agent 时,首先应走 HTTPS。

TLS 证书让客户端验证“我连到的确实是目标服务”,同时加密传输内容。浏览器/客户端会检查证书链、有效期、签发方与撤销状态;证书体系通过根 CA 与中间 CA 建立信任链。【2】

Client Agent  -- HTTPS/TLS -->  Remote Agent

这解决的是:

  • 请求是否被窃听;
  • 传输内容是否被篡改;
  • Remote Agent 的服务端身份是否可信。

TLS 不能替代业务授权。即使连接的是正确服务,也仍要回答“这个调用方有没有权调用它”。


2. 谁在发起请求:Authentication

常见方式是 Authorization: Bearer <token>

POST /tasks HTTP/1.1
Host: agent.example.com
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json

{
  "message": "查询订单状态",
  "context": {
    "orderId": "123"
  }
}

这里的 Token 可以是:

  • OAuth 2.0 Access Token;
  • JWT;
  • 服务间签发的短期 Bearer Token;
  • 在更高安全级别的企业场景,也可以结合 mTLS 的客户端证书。

要注意:**AI Token 和认证 Token 只是同名,不是一回事。**前者是模型处理文本的单位;后者是客户端证明身份或权限的凭证。【1】

服务端收到请求后,至少应验证:

  1. Token 是否存在、格式是否合法;
  2. 签名或向授权服务器的校验是否通过;
  3. 是否过期;
  4. issueraudience 是否匹配当前服务;
  5. 调用方身份是谁,例如某个 Agent、某个服务账号,或某个最终用户。

3. 允许做什么:Authorization

认证确认“你是谁”,授权确认“你能做什么”。

例如一个“行程规划 Agent”有权调用航班查询 Agent,却未必有权让付款 Agent 直接扣款:

行程规划 Agent
  ├─ flights.read       ✅ 查询航班
  ├─ hotels.read        ✅ 查询酒店
  ├─ payment.create     ❌ 无权创建付款
  └─ payment.confirm    ❌ 无权确认扣款

服务端通常根据 Token 中的 scope、角色(RBAC)、资源归属或业务规则判定:

function canCreatePayment(claims: { scope?: string[] }) {
  return claims.scope?.includes('payment.create') ?? false;
}

我倾向于把权限设计得细一些:查询、创建、确认、取消必须是不同权限。特别是涉及付款、删除、发信、修改生产数据等动作,不能只因为 Agent “声称代表用户”就直接放行。


Agent 场景里最容易混淆的身份链

A2A 往往不是单一主体,而是至少有三层身份:

最终用户
  ↓ 授权/委托
Client Agent
  ↓ 发起 A2A 请求
Remote Agent
  ↓ 调用内部工具
业务系统

因此服务端最好能区分:

  • 用户身份:是谁提出了任务;
  • Client Agent 身份:哪个 Agent 或服务在代理请求;
  • Remote Agent 身份:实际处理任务的是谁;
  • 工具/服务身份:Remote Agent 再调用数据库、支付、CRM 时使用什么身份。

不能把它们揉成一个“万能 Token”。否则审计时只能看到“某个 Agent 做了操作”,却不知道它代表哪个用户、经过了谁的授权。

一个更合理的 Token Claims 示意:

{
  "sub": "user_123",
  "client_id": "travel-planner-agent",
  "aud": "payment-agent",
  "scope": ["payment.create"],
  "delegation": {
    "on_behalf_of": "user_123"
  },
  "exp": 1735689600
}

这里表达的是:travel-planner-agent 代表 user_123,向 payment-agent 请求 payment.create 权限。


实现上我会遵守的原则

  1. 默认 HTTPS,拒绝明文 HTTP
    数字证书既用于证明服务端身份,也包含服务端公钥;它是链路安全的基础。【2】

  2. Token 短时效、最小权限、指定 audience
    不给一个能访问所有 Agent、永久有效的 Token。

  3. 高风险操作要求显式确认
    例如支付、提交订单、删除数据。Agent 可以规划,但最终执行要有明确用户确认或额外授权。

  4. 不要把第三方输入直接转成权限决策
    Agent 接收的自然语言、网页内容、工具返回值都可能是不可信输入;它们不能改变原有权限范围。

  5. 完整审计
    记录用户、Client Agent、Remote Agent、任务 ID、授权范围、实际执行动作和结果。

  6. Token 不写进日志、Prompt 或任务正文
    它应只存在于安全传输层或受控凭证存储中。

一句话概括:A2A 解决 Agent 怎么协作;认证和授权解决“谁在代表谁、能操作什么、出了问题如何追溯”。前者不能覆盖后者。

站内引用
汇总一下 A2A 协议,我发布小红书用。 要求格式什么都适配小红书。

标题:A2A 协议是什么?AI Agent 开始学会“跨团队协作”

现在很多人都在做 AI Agent:能查资料、调工具、写代码、处理订单。

但一个现实问题是:
不同团队、不同厂商、不同框架做出来的 Agent,怎么互相协作?

A2A(Agent2Agent)协议,就是为这个问题准备的。

它希望建立一套通用规则,让一个 Agent 能发现另一个 Agent、委托任务、持续获取进度,最后拿到结果。【W1】


1. A2A 解决的是什么问题?

假设你有一个“出差助手” Agent。

用户说:“帮我安排下周去上海的出差。”

这件事可能要拆给多个专业 Agent:

  • 航班 Agent:查航班、比价、预订;
  • 酒店 Agent:找符合差旅标准的酒店;
  • 财务 Agent:核对预算和报销政策;
  • 日程 Agent:把行程同步到日历。

如果每个 Agent 都是独立系统,接口、鉴权、任务格式各不相同,协作成本会很高。

A2A 的目标就是让它们用统一方式交接工作:

用户
  ↓
出差助手 Agent
  ├─→ 航班 Agent
  ├─→ 酒店 Agent
  ├─→ 财务 Agent
  └─→ 日程 Agent
  ↓
汇总为一份可执行方案

重点不在于“一个 Agent 多聪明”,而在于“多个 Agent 能否可靠协作”。


2. A2A 里有哪些核心角色?

可以先记住两个:

Client Agent:发起协作的一方

它接收用户目标,选择合适的外部 Agent,并把任务交出去。

例如,出差助手把“查上海酒店”这个子任务发给酒店 Agent。

Remote Agent:执行任务的一方

它接收任务,完成自己的工作,然后持续返回状态或最终结果。

它的内部可以是任意技术实现:自研工作流、不同模型、不同工具链,都不重要。

A2A 约束的是 Agent 之间怎么交互,不是 Agent 内部必须怎么写。


3. Agent 怎么找到彼此?

A2A 里有一个很关键的概念:Agent Card(智能体卡)

可以把它理解成 Agent 的“能力说明书”或“服务名片”,通常会描述:

  • 这个 Agent 是做什么的;
  • 擅长哪些任务;
  • 服务地址在哪里;
  • 支持哪些输入、输出格式;
  • 是否支持流式返回、异步任务;
  • 需要什么认证方式。

Client Agent 先通过 Agent Card 判断:

“这个 Agent 能不能完成我现在的任务?我要怎么调用它?”

这一步叫 发现(Discovery)。【W1】


4. 一次 A2A 调用大致怎么走?

一个典型流程可以概括成 3 步:

① 发现

Client Agent 找到 Remote Agent,并读取它的 Agent Card,确认能力和调用方式。

② 身份认证

Client Agent 按对方要求证明身份,例如使用 API Key、OAuth 2.0 或 OpenID Connect 等方案。【W1】

③ 任务通信

Client Agent 创建任务并发送消息;Remote Agent 处理后返回:

  • 当前状态;
  • 中间进度;
  • 最终结果;
  • 文件、表格等产物。
Client Agent
  ↓ 创建任务
Remote Agent
  ↓ 执行中 / 需要补充信息
Client Agent
  ↓ 补充上下文
Remote Agent
  ↓ 返回最终结果或产物
Client Agent
  ↓ 汇总后回复用户

5. A2A 中常见的数据对象

A2A 不只是“发一句话、回一句话”,它围绕任务协作定义了几类基础对象:【W1】

  • Task:任务本身,例如“查询订单状态”
  • Message:任务过程中的消息
  • Artifact:任务输出的产物,例如报告、文件、结构化结果
  • Part:消息或产物中的具体内容片段

Part 可以是:

  • TextPart:文本;
  • FilePart:文件;
  • DataPart:JSON 等结构化数据。【W1】

这意味着 A2A 更适合处理真实业务协作,而不只是聊天。


6. A2A 和 MCP 有什么区别?

这是最容易混淆的一点。

MCP:让 Agent 接工具和数据

MCP(Model Context Protocol)更关注:

Agent / 模型
  ↓
数据库、文件系统、GitHub、搜索、支付接口……

也就是:Agent 怎么使用外部工具和上下文。

A2A:让 Agent 接 Agent

A2A 更关注:

Agent A
  ↓
Agent B、Agent C、Agent D……

也就是:一个 Agent 怎么把任务交给另一个专业 Agent。

一句话记忆:

MCP 解决“Agent 如何用工具”,A2A 解决“Agent 如何找同事”。

两者不是替代关系,反而常常会组合使用:

用户
  ↓
总控 Agent
  ↓ A2A
专业 Agent
  ↓ MCP
数据库 / 搜索 / 企业系统 / 第三方 API

7. 为什么 A2A 值得关注?

我认为,Agent 真正大规模进入企业业务后,难点不会只是“调用一次大模型”。

更难的是:

  • 不同团队的 Agent 怎么复用;
  • 不同系统如何安全协作;
  • 长任务如何跟踪状态;
  • 任务失败后如何重试、补充信息或转交;
  • 如何避免把内部实现和敏感权限完全暴露出去。

A2A 试图把这些跨 Agent 协作问题标准化。

不过也要冷静看待:**协议存在不等于生态已经成熟。**实际落地仍要处理鉴权、权限最小化、数据隔离、任务幂等、超时重试、审计日志等工程问题。


总结

A2A 是一套面向 AI Agent 协作的协议。

它希望让不同厂商、不同框架、不同业务系统里的 Agent,可以:

✅ 发现彼此
✅ 说明自身能力
✅ 安全地委托任务
✅ 获取任务状态
✅ 返回结构化结果和文件产物

未来的 AI 应用可能不再是“一个万能 Agent 包打天下”,而更像一个由多个专业 Agent 组成的协作网络。

#AI #AIAgent #A2A #MCP #大模型 #人工智能 #AI应用 #技术分享

资料参考:【W1】

站内引用