A2A第 1 篇:认识 A2A——Agent 之间的 HTTP

A2A 实战系列:从 Agent 互连到企业级协作

本系列共 6 篇,从认识 A2A 到企业级多 Agent 治理,层层递进。每篇独立可读,又前后衔接。

⚠️ 版本与事实声明(发布前必读)

关于 A2A 协议

  • A2A(Agent2Agent Protocol)由 Google 于 2025 年 4 月 联合 50+ 企业发布,2025 年 6 月 捐赠给 Linux 基金会。本文写"发布"和"捐赠"两个时间点,不混为一谈。
  • 协议规范仍在演进。本文基于 2025 年中后期的公开规范 编写,具体字段、状态、方法以 官方规范仓库 为准。
  • Agent Card 路径:新实现优先使用 /.well-known/agent-card.json;早期规范使用 /.well-known/agent.json。兼容旧客户端时可同时提供两者。

关于 Java SDK

  • A2A Java SDK 仍在早期,包名(io.a2a / io.a2a.sdk / dev.a2a 都可能出现)和类名会随版本变化。本文示例的 import 仅为示意,以 官方 Java SDK 仓库 和 Maven Central 当前版本为准。
  • 文中出现的 AgentCard、AgentExecutor、A2AServer、DefaultRequestHandler、InMemoryTaskStore、A2AClient 等类名,请以当前 SDK 版本 README 为准。
  • MCP Java SDK 类名(如 WebFluxSseClientTransport)同样以当前版本为准。

系列导读

篇 标题 核心交付 适合
1 认识 A2A:Agent 之间的 HTTP 概念、架构、与 MCP 的关系、反模式、传输 所有人
2 A2A 核心概念:Agent Card、Task、Message、Artifact 协议数据模型、状态机、JSON-RPC 方法、错误码 要写 Agent 的开发者
3 Java 实战:用官方 SDK 写第一个 A2A Agent 可运行 Agent + Client + 单测 + 集成测试骨架 Java 开发者
4 多 Agent 协作:多轮、流式、推送、编排 长任务、流式、编排、超时、部分失败、重试 架构设计者
5 A2A + MCP:Agent 既是 Server 也是 Client 双协议组合、工具层与协作层、反模式 平台开发者
6 企业级 A2A 治理:注册中心、网关、安全、可观测 Registry + Gateway + OAuth2 + 缓存 + 防循环 企业架构师

阅读路径:

  • 快速建立认知:1 → 2
  • 写第一个 Agent:1 → 2 → 3
  • 多 Agent 协作:1 → 2 → 3 → 4
  • 平台化落地:全系列

第 1 篇:认识 A2A------Agent 之间的 HTTP

📍 系列导航 :1. 认识 A2A | 2. 核心概念 | 3. Java 实战 | 4. 多 Agent 协作 | 5. A2A + MCP | 6. 企业治理

1.1 一个真实痛点

假设你有一个销售 Agent,能查销售数据;一个人事 Agent,能查员工信息;一个财务 Agent,能查发票。用户问:

"帮我分析一下华东区销售团队的业绩,结合人事的团队构成和财务的费用数据。"

传统做法:

  1. 写一个超级 Agent,把所有能力塞进去 → 上下文爆炸、权限混乱、团队耦合。
  2. 写胶水代码:销售 Agent 调人事 Agent 的 HTTP API → 再调财务 Agent 的 API → 自己解析、拼接。
  3. 每个 Agent 之间点对点集成,N 个 Agent 需要 N×(N-1) 套胶水。

💡 问题不是"Agent 之间不能调",而是"Agent 之间没有标准说话方式"。

A2A 就是来解决这个的。

1.2 A2A 是什么

A2A(Agent2Agent Protocol)是一个开放协议,用来标准化 AI Agent 之间的发现、通信与协作。

时间线:

  • 2025 年 4 月:Google 联合 50+ 企业发布 A2A 协议。
  • 2025 年 6 月:捐赠给 Linux 基金会,进入开放治理。
  • 此后:规范、SDK、生态持续演进。

一句话:

A2A 是让 Agent 发现彼此、委派任务、交换结果的通用协议。

类比:

类比 说明
HTTP 让浏览器和服务器说话
MCP 让 Agent 和工具/数据源说话
A2A 让 Agent 和 Agent 说话

1.3 A2A 和 MCP 是什么关系

这是最容易混淆的点。先给结论:

💡 MCP 是垂直方向(Agent → 工具),A2A 是水平方向(Agent ↔ Agent)。两者互补,不是竞争。

text 复制代码
        ┌─────────────┐
        │  User       │
        └──────┬──────┘
               │
        ┌──────▼──────┐
        │ Orchestrator│
        │   Agent     │
        └──┬───┬───┬──┘
           │   │   │  A2A(水平协作)
     ┌─────▼┐ ┌▼───┐ ┌▼─────┐
     │Sales │ │HR  │ │Finance│
     │Agent │ │Agent│ │Agent  │
     └──┬───┘ └─┬──┘ └──┬───┘
        │       │       │  MCP(垂直调用)
     ┌──▼──┐ ┌──▼──┐ ┌──▼───┐
     │ DB  │ │ HR  │ │ ERP  │
     │     │ │ API │ │      │
     └─────┘ └─────┘ └──────┘
维度 MCP A2A
方向 Agent → 工具/数据 Agent ↔ Agent
核心原语 Tool / Resource / Prompt Task / Message / Artifact
交互模型 调用-返回 任务生命周期、多轮、流式
发现机制 Server 配置 / 注册中心 Agent Card
状态 通常无状态 Task 有状态
典型场景 查数据库、读文件 委派任务、多 Agent 协作

一个 Agent 可以同时是 MCP Client(调工具)和 A2A Server(被其他 Agent 调)。 第 5 篇会展开。

反面案例:什么时候不该用 A2A

❌ 反模式:把"查数据库"包装成 A2A Agent。

查数据库是确定性函数调用,没有推理、没有多轮、没有任务生命周期。用 MCP 包一个 Tool 就够了。硬套 A2A 会带来:

  • 不必要的 Task 状态管理
  • 额外的网络跳转和序列化开销
  • 调用方要处理 input-required 等本不需要的复杂度

判断标准:能力是"确定性函数"→ MCP;能力是"会思考、要委派、有多轮"的 Agent → A2A。

1.4 A2A 的架构

text 复制代码
┌─────────────────────────────────────────┐
│ Client Agent(调用方)                    │
│  1. 获取 Agent Card                      │
│  2. 发 message/send 或 message/stream    │
│  3. 跟踪 Task 状态                       │
│  4. 接收 Artifact                        │
└───────────────┬─────────────────────────┘
                │ A2A(HTTP + JSON-RPC 2.0)
┌───────────────▼─────────────────────────┐
│ Server Agent(被调方)                    │
│  1. 发布 Agent Card                      │
│  2. 接收 Message                         │
│  3. 创建/更新 Task                       │
│  4. 返回 Message / Artifact              │
└─────────────────────────────────────────┘

两个角色:

  • Client Agent:发起任务的一方。
  • Server Agent:接收任务、执行、返回结果的一方。

和 MCP 不同,A2A 的双方都是 Agent,都可能具备推理能力。A2A 不规定 Agent 内部怎么实现,只规定它们怎么说话。

1.5 A2A 的核心原语

原语 是什么 谁控制 例子
Agent Card Agent 的"名片",描述能力、端点、认证 Server Agent 发布 /.well-known/agent-card.json
Task 一次任务,有生命周期 双方共同推进 task-123:分析华东业绩
Message 任务中的一条消息 双方发送 "请补充时间范围"
Part 消息/产物的内容片段 消息携带 文本、文件、结构化数据
Artifact 任务产出物 Server Agent 生成 分析报告 PDF
Skill Agent 声明的能力 Server Agent 声明 sales_analysis

📌 配图建议:发布时配一张 Agent Card → Task → Message → Artifact 的关系图,展示一次完整交互。

1.6 传输方式

A2A 基于 HTTP + JSON-RPC 2.0:

能力 说明
同步调用 message/send,返回 Task 或 Message
流式 message/stream,SSE 流式返回状态和产物
推送通知 tasks/pushNotificationConfig/set,长任务完成后回调
任务查询 tasks/get,查询 Task 状态
任务取消 tasks/cancel,取消进行中的 Task

选择建议:

  • 短任务、同步返回 → message/send
  • 长任务、需要进度 → message/stream
  • 超长任务、异步 → 推送通知 + tasks/get 轮询

1.7 安全边界:A2A 和 MCP 一样,不能假设对方可信

⚠️ 容易误解的点 :A2A 让 Agent 之间互相调用,但不意味着可以信任对方。

责任 Client Agent Server Agent
是否委派任务 ✅ 决定 不应假设对方会合理委派
输入校验 部分 ✅ 必须自己做
权限控制 按用户授权 ✅ 必须自己控
输出视为不可信 ✅ 必须约束自己 高风险场景自己转义
审计 记录委派 ✅ 记录接收和执行

🚨 Server Agent 不应假设 Client Agent 会做拦截。 你面对的是未知 Agent,可能是另一个 LLM,也可能被间接提示词注入。安全底线必须在 Server Agent 端守住。

1.8 生态现状(2025--2026)

  • 发起方:Google,2025 年 4 月发布,2025 年 6 月捐赠 Linux 基金会。
  • 官方 SDK:Python、Java、JavaScript 等,仍在演进。
  • 官方 Java SDK 仓库:github.com/a2aproject/a2a-java
  • 官方规范仓库:github.com/a2aproject/A2A
  • 典型场景:多 Agent 协作、跨组织 Agent 互调、Agent 市场。
  • 相关协议:MCP(Agent 与工具)、A2A(Agent 与 Agent)、AG-UI(Agent 与前端)。

1.9 一个 Agent 长什么样

最小结构:

text 复制代码
my-agent/
├── agent-card.json     # Agent Card
├── src/                # 实现
└── README.md           # 接入说明

以 Java 为例,核心三步:

java 复制代码
// 1. 定义 Agent Card
AgentCard card = AgentCard.builder()
    .name("sales-agent")
    .url("https://agent.example.com/a2a")
    .skills(...)
    .build();

// 2. 定义请求处理器
RequestHandler handler = new SalesRequestHandler();

// 3. 启动
A2AServer.builder().agentCard(card).requestHandler(handler).build().start();

⚠️ 类名以当前 Java SDK 版本为准。第 3 篇会完整展开。

1.10 本篇小结

  • A2A 解决"Agent 之间怎么说话"的标准化问题。
  • MCP 是垂直方向(Agent → 工具),A2A 是水平方向(Agent ↔ Agent),互补。
  • 反模式:确定性函数调用(查数据库)不要包装成 A2A Agent,用 MCP。
  • 核心原语:Agent Card、Task、Message、Part、Artifact、Skill。
  • 传输:HTTP + JSON-RPC 2.0,支持同步、流式、推送。
  • 安全底线在 Server Agent 端:输入校验、权限控制、输出不可信。

下一篇:深入 A2A 核心概念------Agent Card、Task 生命周期、Message、Artifact、错误码。


相关推荐
SharpCJ1 小时前
Koog(6)——会话记忆、历史压缩与执行恢复
llm·agent·koog
Web3&Basketball1 小时前
litellm 做 Agent 成本监控:3 个账单维度实战
python·大模型·agent·可观测性·litellm·成本控制·llm运维
羞儿2 小时前
Cordis 内核:五概念、生命周期与事件
llm·agent·harness·cordis 内核
一缕82年的清风2 小时前
生产级多智能体协作避坑:死锁防范与确定性状态机实战
agent
lucas_AI2 小时前
Librarian Agents:别等提问了再翻原文——先训练一个「图书管理员」把长文档收拾好
agent
lucas_AI2 小时前
DocPilot:长文档问答别硬灌上下文——让小模型学会「编排」一场跨页取证
agent
.Bryce.3 小时前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
流烟默3 小时前
A2A 与 MCP 双协议网关设计指南
安全·agent·mcp·a2a