想象一个没有统一规则的国际贸易港:联邦快递只懂美国的路况,顺丰只跑中国的街区,圆通在东南亚有自己的小圈子。你想从纽约寄一箱货到深圳,得分别联系好几家公司,自己跟踪、自己协调,中间还会因为单据格式不一样而卡壳。后来万国邮政联盟出现了——它规定了一套“通用交接规则”:每家快递公司都在门口挂出营业范围和服务价目,任何一家接到包裹,按统一格式的运单填好追踪号,就能把包裹交到下一家公司手里继续配送。Google 发布的 A2A(Agent2Agent)协议,正是 AI 智能体世界的“万国邮政联盟”。它让不同公司、不同框架开发的智能体,互相发现“你会干什么、地址在哪里”,再用统一格式交接任务、跟踪进度。本文就带你拆开这台“邮政机器”,看看它凭什么成为 Agent 生态的关键基础设施。

岗位关联

学习 A2A 协议,能让你在做多 Agent 系统时不被单一框架绑架,掌握跨厂商智能体互联的核心能力——这是 Agent 生态走向成熟期最抢手的架构技能之一。

目录
  1. 可视化演示
  2. 诞生背景:AI 世界的“货运孤岛”
  3. 设计理念:门口的“营业公示牌”
  4. 通信机制:统一的“国际运单”
  5. 任务协作:可追踪的“包裹旅程”
  6. 安全信任:实名制与“授权委托书”
  7. 与MCP互补:对内管工具,对外搞协作
  8. 生态与场景:联盟成立之后
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Google A2A协议:多Agent(A1-A5)Mesh网络互连,通过Disc(发现)→Neg(协商)→Task(任务分配)→Sec(安全)四层协议栈协作。

本节配有交互动效(进入视口后自动加载,约 3KB)。

A2A协议核心机制 多Agent(A1-A5)通过Mesh网络互连,A2A协议栈四层:Disc发现→Neg协商→Task任务→Sec安全,支持跨框架跨厂商 A2A vs MCP:A2A是Agent间通信标准,MCP是Agent与工具间接口,两者互补而非替代,共同构建Agent生态基础设施 A2A Stack: Discovery → Negotiation → Task Delegation → Security

诞生背景:AI 世界的“货运孤岛”

在没有万国邮政联盟的年代,纽约的邮局想把包裹寄到深圳,得先跟几十家船运公司、内陆车队挨个签合同,而每家的单据格式还不一样。今天的 AI Agent 世界正是这副景象:一个智能体能写代码,另一个擅长查数据库,第三个长于写报告——可让它们协作完成“先查数据、再写报告”的活儿,工程师得手工写大量胶水代码把各家拼在一起,接口一多就变成蜘蛛网。

Google 在 2025 年 4 月发布 A2A(Agent2Agent)协议,目的就是拆掉这些“货运孤岛”。A2A 是一套开放、厂商中立的通信标准,让不同框架(LangChain、AutoGen、CrewAI 等)开发的智能体能够互相发现、协商并协作完成复杂任务。它的设计出发点很朴素:就像万国邮政联盟让天下快递互联一样,让智能体说同一种“交接语言”。

从成本角度看,没有标准时,N 个智能体两两对接需要写 N(N-1)/2 套定制接口;有了 A2A,每个智能体只需实现一次协议,就能和所有支持它的智能体对话。生态扩张从“平方级痛苦”变成“线性接入”,这正是它能快速获得厂商支持的根本原因。

就像万国邮政联盟一纸协定让天下快递互联,A2A 让智能体第一次有了“通用交接单”,也第一次让“让天下智能体互联”从口号变成工程现实。

C定制=N(N−1)2,CA2A=NC_{定制} = \frac{N(N-1)}{2}, \quad C_{A2A} = N
这句话的意思是:N 个智能体协作时,各自定制对接的总工作量,与统一协议后的工作量相比,差距随 N 增大而急剧拉大。
  1. N 的含义N 代表参与协作的智能体数量,每个智能体都相当于一家“快递公司”。
    NN
  2. 点对点集成成本两两之间都要定制接口,所以总接口数是组合数 C(N,2)。
    N(N−1)2\frac{N(N-1)}{2}
  3. 协议归一成本接入统一标准后,每家只要写一次协议实现,成本降为线性。
    NN

设计理念:门口的“营业公示牌”

万国邮政联盟要求每家邮局在门口挂一块公示牌,写明自己开通哪些国际线路、什么时间营业、哪些物品禁寄。别家邮局送货过来,不用打电话反复确认,抬头一看便知能不能把包裹交给你。这种“信息公开”带来的信任与便利,是整个联盟运转的起点。

A2A 的核心设计正是这样一块公示牌,名字叫 Agent Card(智能体卡片)。每个支持 A2A 的智能体都要暴露一个“卡片端点”,返回一份标准 JSON 文档,自报家门:我是谁、能做什么、有哪些技能、任务请求应该发到哪个地址。其他智能体只要 HTTP 请求一下这个端点,就能拿到对方完整的能力画像。

这种“能力自我声明”天然是去中心化的——没有中心注册表,也不需要某个权威机构审核。任何智能体只要知道你的卡片地址,就能读取你的能力并决定是否协作。这相当于每家快递公司自定义营业范围,但用统一格式公示出来,既能百花齐放,又能彼此兼容。

有了这张卡片,两个素不相识的智能体“见面三秒”就能决定是否合作——这正是 A2A 打开生态的第一块基石,也是它区别于传统点对点接口设计的关键创新。

AC={name,description,skills,endpoint}AC = \{ \text{name}, \text{description}, \text{skills}, \text{endpoint} \}
Agent Card 就是智能体的“营业公示牌”,包含名称、描述、技能清单和接收任务的网络地址。
  1. 卡片主体AC 是 Agent Card 的简写,代表智能体对外公示的一张“营业信息牌”。
    ACAC
  2. 能力集合skills 是技能清单,比如“查天气”“写代码”,是其他智能体决定是否合作的关键依据。
    skills\text{skills}
  3. 通信入口endpoint 是接收任务消息的网络地址,相当于邮局的“收件窗口”。
    endpoint\text{endpoint}

通信机制:统一的“国际运单”

不同国家的快递单据五花八门,填法各异,货到了边境常常要重新录入。万国邮政联盟统一了运单格式:寄件人、收件人、重量、件数,各国邮政一看就懂。A2A 也做了同样的事——把智能体之间的消息格式统一为 JSON-RPC over HTTP(S)。

具体来说,每个请求都是一个标准 JSON 对象,包含协议版本、方法名、参数和请求 ID。方法包括发送任务消息、查询任务状态、取消任务等。响应也遵循同样结构,通过 ID 把应答和请求一一对应起来。

选 HTTP 作为传输层是个很聪明的决定:不引入特殊依赖、不需要长连接,任何能发 HTTP 请求的语言和框架都能接入。用行话说这叫“无状态请求”,服务器不用记住你是谁,每次请求自带完整信息——就像国际运单上写清楚所有字段,运到任何一站都能单独处理。

一张标准运单让任何两国的邮局都能交接,一条标准消息让任何两个框架的智能体都能对话——这就是“标准”二字的分量。

req={jsonrpc:"2.0",method,params,id}\text{req} = \{ \text{jsonrpc}: \texttt{"2.0"}, \text{method}, \text{params}, \text{id} \}
A2A 的每条消息都是一张“国际运单”,字段统一、格式固定,任何智能体都能读懂。
  1. 协议标记jsonrpc 字段固定为 "2.0",表示采用标准 JSON-RPC 协议版本,如同运单上印刷的标准编号。
    jsonrpc:"2.0"\text{jsonrpc}: \texttt{"2.0"}
  2. 业务意图method 指明这张“运单”要办什么业务,例如发送任务、查询状态。
    method\text{method}
  3. 请求关联id 是请求编号,响应中携带同一个 id,客户端就知道回复对应哪一笔业务,像运单号一样可追溯。
    id\text{id}

任务协作:可追踪的“包裹旅程”

你寄出一件国际包裹后会拿到运单号,在官网输入就能看到“已收件→运输中→派送中→已签收”。这种全程可见的体验让人安心。A2A 的任务生命周期,就是智能体世界的“包裹追踪系统”。

发起方(client)通过消息任务把“工作包裹”交给处理方(server),任务会经历一组标准状态:已提交(submitted)、处理中(working)、需要更多信息(input-required)、已完成(completed)、失败(failed)。处理方中途发现资料不够,可以回一条“需要更多信息”,发起方补交后再继续——这就是多轮交互。

这种任务导向的设计非常关键:A2A 不是让两个智能体像聊天机器人一样闲聊天,而是围绕一个明确的“待办事项”协作。每个状态都可查询、可恢复,发起方随时可以轮询任务进度,就像查快递物流一样简单。

从交件到签收全程可追踪,是让智能体协作“靠谱”的核心体验——也是企业愿意把真实业务交给多智能体系统的信任前提。

S:submitted→working→completed∣failed∣input-requiredS: \text{submitted} \to \text{working} \to \text{completed} \mid \text{failed} \mid \text{input-required}
任务状态从“已提交”开始,经过“处理中”,最终到达“已完成”或“失败”;缺资料时进入“需要更多信息”状态等待补充。
  1. 起始状态submitted 表示任务已提交到处理方,相当于包裹刚在柜台完成收件。
    submitted\text{submitted}
  2. 执行中状态working 表示处理方正在干活,可以附带进度更新,如运单显示“运输中”。
    working\text{working}
  3. 终态与旁路任务最终要么 completed 要么 failed;卡壳时可进入 input-required,等待发起方补充资料后继续。
    completed∣failed∣input-required\text{completed} \mid \text{failed} \mid \text{input-required}

安全信任:实名制与“授权委托书”

万国邮政要求寄件实名、跨国件要报关,贵重物品必须声明价值——信任是包裹能一路通行的保障。同样,A2A 如果只解决了“能连通”而不管“谁能连、能连到什么程度”,就永远进不了企业的大门。因此协议内置了安全层。

A2A 支持基于 OAuth 2.0 的认证与授权。智能体在协作前先验证对方身份,再按任务所需的最小权限范围(scope)放行,而不是把全部能力敞开。比如只让对方调用“查天气”技能,就没必要暴露“读数据库”的能力。

在企业落地时,管理员可以配置哪些外部智能体能访问哪些内部服务,配合审计日志追踪每一次跨 Agent 调用。这相当于给每个包裹贴了“仅限本人签收”的标签,还全程录像。安全设计让 A2A 有底气走进企业防火墙,而不是只停留在技术 demo 阶段。

信任不是一句口号,而是从实名认证到授权管控、再到审计留痕的每一步具体设计,这正是企业级协议与玩具 demo 的分水岭。

scope(auth)⊆skills(card)\text{scope}(auth) \subseteq \text{skills}(card)
授权范围必须是智能体卡片声明能力的子集,遵循“最小权限”原则——只给够用的钥匙。
  1. 授权范围scope(auth) 表示身份验证通过后授予的操作范围,即对方能调用哪些技能。
    scope(auth)\text{scope}(auth)
  2. 能力全集skills(card) 是 Agent Card 上声明的全部技能,相当于营业公示牌上的完整服务列表。
    skills(card)\text{skills}(card)
  3. 子集约束⊆ 表示授予范围只能是全部能力的子集,不能越权——就像委托书只授权你签收,不授权你变卖。
    ⊆\subseteq

与MCP互补:对内管工具,对外搞协作

万国邮政联盟管的是“国家与国家之间的包裹交接”,但包裹到了中国境内,用什么货车、进哪个分拣中心,由国内物流标准决定。两者压根不在一个层级,也从不冲突。A2A 与 MCP 的关系正是如此。

MCP(模型上下文协议)解决的是智能体“内部调用工具”的问题——让大模型连接数据库、API、文件系统,相当于智能体自己的“手和工具”;A2A 解决的是“智能体之间”的问题——让不同的智能体协作,相当于“同事与同事”。一个管内,一个管外,垂直正交。

实际操作中,一个智能体内部用 MCP 调用工具处理数据,同时通过 A2A 把结果“快递”给另一个智能体。两套协议在同一系统里各司其职:MCP 让单个智能体变强,A2A 让一群智能体变协同。理解这个分工,就不会再纠结“谁取代谁”了。

明白了这层分工,你就能在架构图上果断地画两条线:一条横线连同事,一条竖线连工具——清晰、自洽、可落地。

Agent间:  A1→A2AA2,Agent内:  A1→MCPTool\text{Agent间}: \; A_1 \xrightarrow{\text{A2A}} A_2, \qquad \text{Agent内}: \; A_1 \xrightarrow{\text{MCP}} \text{Tool}
A2A 负责智能体之间的横向协作,MCP 负责智能体内部的纵向工具调用,二者构成互补的两条坐标轴。
  1. 外部协作A1 通过 A2A 把任务交给 A2,这是跨智能体的横向协作,像邮局与邮局之间的交接。
    A1→A2AA2A_1 \xrightarrow{\text{A2A}} A_2
  2. 内部调用A1 通过 MCP 调用自己的工具链,这是智能体内部的纵向调用,像邮局里分拣机在工作。
    A1→MCPToolA_1 \xrightarrow{\text{MCP}} \text{Tool}
  3. 两轴正交前者管“同事分工”,后者管“使用工具”,同一系统内可同时存在、互不干扰。
    A2A⊥MCP\text{A2A} \perp \text{MCP}

生态与场景:联盟成立之后

万国邮政联盟成立后,全球信件从“几个月运气好能到”缩短到几天。A2A 发布后也迅速聚拢起一个联盟:Google 联合 50 多家生态伙伴(包括 Salesforce、Cisco、LangChain 等)共同支持,并提供了协议开源实现与 Agent Card 开发套件,让开发者半天就能把自家智能体“接入邮路”。

典型应用场景已经清晰成形:企业内混合智能体平台统一调度不同厂商的 Agent;供应链上采购智能体与物流智能体跨公司协作;客服智能体遇到搞不定的专业问题,直接通过 A2A 转派给理赔智能体。这些场景的共同点是“异构、跨域、多轮”,正是 A2A 的主场。

展望未来,A2A 正在迭代多点协作(群体智能)、离线任务和更细粒度安全机制。它不会解决所有问题,但补上了 Agent 互操作性的关键一环——就像联盟成立之后,剩下的就是每个国家把自家邮局装修好、把邮路跑顺了。

联盟的威力不在于单次交接,而在于“每多一家入会,所有人一起变强”的复利效应——这正是 A2A 作为生态基础设施的价值本质。

生态价值=自身能力+∑j∈伙伴外部能力j\text{生态价值} = \text{自身能力} + \sum_{j \in \text{伙伴}} \text{外部能力}_j
接入 A2A 后,一个智能体的价值等于“自己的能力”加上“所有伙伴的能力之和”,生态越大收益越高。
  1. 基础项自身能力是每个智能体独立解决特定问题的基础价值。
    自身能力\text{自身能力}
  2. 累加项对每个伙伴 j,其能力通过 A2A 变成“可外包”的服务,逐项累加。
    ∑j∈伙伴外部能力j\sum_{j \in \text{伙伴}} \text{外部能力}_j
  3. 复利效应每多一个伙伴入网,所有节点都能多获得一份能力,生态价值随节点数线性增长。
    生态价值=自身能力+∑j外部能力j\text{生态价值} = \text{自身能力} + \sum_{j} \text{外部能力}_j

AI 应用场景

企业多厂商智能体统一调度平台

阶段:多 Agent 编排与协调

解决的问题:企业同时引入合同审核、风险合规、知识库问答等多个智能体,分别来自不同厂商与框架,传统做法是开发大量定制桥接代码,接口数量随智能体数量平方级膨胀。A2A 让每个智能体挂出 Agent Card,平台统一发现、按任务派发,集成成本降为线性。

具体案例:某企业内部署了用 LangChain 写的合同审核 Agent 和自研框架写的合规 Agent,通过 A2A 让前者把审查结果“快递”给后者复核,全程用标准任务状态跟踪,出了问题还能精准定位到是哪个 Agent 的哪一步。

供应链跨公司协同

阶段:跨组织能力复用

解决的问题:供应商的库存 Agent 与买方的采购 Agent 分属两家公司,此前只能靠人工传 Excel、发邮件。A2A 让双方互相发现能力、按任务协作,并通过授权范围控制数据可见性——只给查询权限,不给改数据权限。

具体案例:一家汽车制造商的采购 Agent 通过卡片发现供应商的库存 Agent,自动发任务查询零件可用量;供应商 Agent 处理完通过 A2A 回传结果,整个过程自动留痕、可审计,月底对账再也不用翻邮件。

智能客服跨系统转派

阶段:Agent 间任务交接

解决的问题:客服 Agent 遇到保险理赔等专业问题答不上来,传统做法是让用户跳转到另一个系统重新描述一遍,体验极差。A2A 让客服 Agent 直接创建理赔任务“派单”给理赔 Agent,并随包裹捎上对话上下文。

具体案例:某电商售后 Agent 识别到退货运费争议,通过 A2A 把任务转派给物流赔付 Agent;赔付 Agent 查单后回传结论,用户只觉得“客服变聪明了”,完全感知不到背后是两个不同厂商的智能体在接力。

Python 演示

python79 行
"""A2A 协议核心机制模拟:Agent Card 发现 + 任务交接"""import jsonimport timefrom dataclasses import dataclass, field  @dataclassclass AgentCard:    """Agent 的"挂牌营业"信息:对方只需读这张卡即可对接"""    name: str    skills: list    endpoint: str  @dataclassclass TaskMessage:    """一次任务交接的包裹:带任务号、内容、当前状态"""    task_id: str    payload: dict    status: str = "submitted"  class A2ANode:    """模拟一个支持 A2A 协议的 Agent 节点"""     def __init__(self, card):        self.card = card        self._task_map = {}     def fetch_card(self):        """供其他 Agent 发现本节点的能力"""        return {            "name": self.card.name,            "skills": self.card.skills,            "endpoint": self.card.endpoint,        }     def send_task(self, target, payload):        """A 方把任务包裹交给 B 方"""        msg = TaskMessage(            task_id=f"{self.card.name}-{time.time():.0f}",            payload=payload,        )        target._task_map[msg.task_id] = msg        return msg.task_id     def poll_status(self, target, task_id):        """轮询对方任务状态,模拟 submitted / working / completed 流转"""        msg = target._task_map[task_id]        if msg.status == "submitted":            msg.status = "working"        elif msg.status == "working":            msg.status = "completed"            msg.payload = {"result": f"{target.card.name} 已处理: {msg.payload['data']}"}        return {            "task_id": task_id,            "status": msg.status,            "result": msg.payload.get("result"),        }  if __name__ == "__main__":    # 两个不同"厂商"的 Agent,只靠 A2A 约定就能协作    courier_a = A2ANode(        AgentCard(name="快递A", skills=["揽收", "分拣"], endpoint="http://a.local")    )    courier_b = A2ANode(        AgentCard(name="快递B", skills=["派送", "签收"], endpoint="http://b.local")    )     print("A 方发现 B 方能力:",          json.dumps(courier_b.fetch_card(), ensure_ascii=False))     task_id = courier_a.send_task(courier_b, {"data": "一份合同"})    for _ in range(3):        print("A 方询问:",              json.dumps(courier_a.poll_status(courier_b, task_id),                         ensure_ascii=False))        time.sleep(0.3)
目的:用纯 Python 模拟 A2A 协议的两个关键动作——读取对方 Agent Card 发现能力,以及通过标准消息收发任务并轮询状态。
  1. def fetch_card(self)模拟 A2A 的“营业公示牌”:返回该 Agent 的名称、技能和端点,供其他智能体发现。
  2. def send_task(self, target, payload)模拟发起方把“工作包裹”交给处理方,并生成唯一的任务号(类似运单号)。
  3. poll_status模拟发起方轮询任务状态,状态依次从 submitted 流转到 working、completed。
  4. @dataclass class AgentCard用数据类定义标准的卡片结构,保证不同“厂商”实现同一套字段。
  5. target._task_map[msg.task_id] = msg处理方把收到的任务登记在案,就像邮局给包裹建档。
  6. time.time()用时间戳生成任务编号,确保每次任务的 task_id 唯一可追踪。

常见误区

误区现在有了 A2A,MCP 是不是就没用了?以后只需要学一个协议就够了,MCP 早晚被淘汰。

正解A2A 和 MCP 根本不在一个层级。A2A 是“智能体与智能体”之间的横向协作协议,好比邮局与邮局交接包裹;MCP 是“智能体与工具”之间的纵向调用协议,好比邮局内部用分拣机。一个智能体完全可以一边用 MCP 查数据库,一边用 A2A 把结果发给同事。两者互补而非替代,实际项目里经常同时出现。

为何常见:因为两个协议都是 2024-2025 年热度飙升的“标准”,名字都是字母缩写,初学者容易把它们当成同一赛道上的竞争对手。

误区Agent Card 就是一份静态 JSON 文件,写好放在服务器上就完事了,能力变了再手动改文件。

正解Agent Card 是一个动态端点,每次被 HTTP 请求时实时返回 JSON。这意味着智能体可以根据当前状态动态调整对外宣称的能力——比如“高峰期暂停接单”,或者升级后自动新增技能。它更像营业厅门口实时更新的电子屏,而不是打印好就贴上去的纸质公告。

为何常见:因为大多数协议文档示例都展示了一段静态 JSON,容易让人误以为卡片是配置项;而忽略了“端点返回”这一动态机制正是灵活性的来源。

误区A2A 是 Google 提出的,那是不是只有 Google 的 AI 产品和框架才能用?用 LangChain 的团队是不是没法接?

正解A2A 是开放、厂商中立的协议,Google 只是发起者和主要推动者。协议规范公开,任何框架、任何语言都可以实现。事实上首批支持者就包括 LangChain、Salesforce、Cisco 等与 Google 没有从属关系的企业。它就像万国邮政联盟由某个国家牵头成立,但加盟的是全世界。

为何常见:人们习惯用“谁家的标准”来判断归属,尤其是大厂发布的协议很容易被贴上“绑定生态”的标签。

误区A2A 既然是 Agent 之间通信的,那它就是把两个聊天机器人接起来,让它们像人一样互相发消息聊天。

正解A2A 是任务导向(task-oriented)的结构化协议:每次交互围绕一个明确的任务,包含任务创建、状态流转、结果回传,而不是自由闲聊。消息里承载的是结构化任务数据,而非自然语言对话流。就像邮政系统运的是有单号的包裹,而不是让邮递员隔着窗户聊天。

为何常见:因为“通信”这个词太宽泛,加上 LLM Agent 常以对话框形态出现,很容易把 Agent 间通信误解为对话式消息传递。

误区A2A 协议已经内置了认证和授权,我把智能体接上 A2A 就等于安全了,不用再额外做防护。

正解A2A 定义了安全机制的支持方式(如 OAuth 2.0、scope 授权),但“支持”不等于“自动生效”。是否需要认证、授予哪些权限、如何审计,都需要开发者自己配置。就像万国邮政规定了实名制,但执行不执行、查得严不严,还得靠每个国家的邮局自己落实。协议只是给了安全框架,安全责任始终在实现方。

为何常见:协议文档里关于安全的部分常常被快速略过,加上“内置机制”这类表述,让人误以为安全是自动完成的。

面试题

Q1. A2A 协议要解决的核心问题是什么?

单选题 · easy

  • A.让单个智能体内部调用工具更高效
  • B.让不同厂商的智能体互相发现协作← 正确答案
  • C.让大模型生成比原来更长的文本
  • D.让 GPU 分布式训练的速度更快

答案:B。A2A 的核心是跨厂商、跨框架的智能体互操作——就像万国邮政联盟解决不同国家邮局的交接问题。选项 A 是 MCP 的职责,C 和 D 分别属于文本生成与训练加速领域,都与 Agent 间通信无关。

Q2. Agent Card 在 A2A 协议中的作用最类似于什么?

单选题 · easy

  • A.快递包裹上贴着的运单号
  • B.快递公司门口挂的营业公示牌← 正确答案
  • C.快递员随身佩戴的工作证
  • D.用来运输包裹的货车牌照

答案:B。Agent Card 是智能体对外声明“我是谁、会什么、任务发哪里”的公开信息,相当于营业公示牌——别人看一眼就知道能不能合作。运单号对应任务 ID,工作证对应身份令牌,货车牌照则与能力发现无关。

Q3. A2A 协议的底层消息格式是什么?

单选题 · mid

  • A.JSON-RPC 消息经由 HTTP 传输← 正确答案
  • B.WebSocket 二进制帧直接传输
  • C.XML-RPC 消息经由 SMTP 传输
  • D.Protobuf 消息经由 gRPC 传输

答案:A。A2A 规定消息采用标准 JSON-RPC 格式,传输层走 HTTP(S)。选 HTTP 是为了最大程度降低接入门槛——任何能发 HTTP 请求的语言都能实现。WebSocket 用于长连接场景、SMTP 走邮件、gRPC 依赖特殊框架,都不符合 A2A 的“广泛易接入”设计初衷。

Q4. 相比 N 个智能体两两自建接口,使用 A2A 后集成复杂度从约 N(N-1)/2 降为多少?

单选题 · mid

  • A.N 的平方级别
  • B.N 的对数级别
  • C.线性级别 N← 正确答案
  • D.常数级别 1

答案:C。统一协议后,每个智能体只需实现一次 A2A 接口即可与所有节点互通,总成本是 N 级别的线性增长。平方级对应无标准时的两两对接,对数级常用于二分搜索类复杂度,常数 1 只存在于只有一个节点的理想情况,均不准确。

Q5. 以下哪个状态不属于 A2A 任务生命周期的标准状态?

单选题 · easy

  • A.submitted 已提交
  • B.working 处理中
  • C.completed 已完成
  • D.paused 已暂停← 正确答案

答案:D。A2A 的标准状态是 submitted、working、input-required、completed、failed,没有 paused。任务处理中缺资料时进入的是 input-required(等待补充信息),而不是“暂停”。这就像包裹运输中只会显示“等待报关”,不会显示“快递公司睡着了”。

Q6. 关于 A2A 与 MCP 的关系,正确的说法是?

单选题 · hard

  • A.两者等同,二选一即可
  • B.A2A 是 MCP 的子集
  • C.一个对外协作,一个对内工具← 正确答案
  • D.MCP 是 A2A 的加密扩展

答案:C。MCP 解决智能体内部调用工具(Agent→Tool),A2A 解决智能体之间协作(Agent↔Agent),两者在不同层级且天然互补。A、B、D 都把两者混为一谈或强加包含关系,就像说“国际邮政协定是货车标准的一部分”一样逻辑混乱。

Q7. A2A 中授权范围(scope)的设计原则是什么?

单选题 · hard

  • A.授权范围可以大于卡片声明能力
  • B.授权范围必须等于卡片全部技能
  • C.授权范围应限定为任务所需子集← 正确答案
  • D.授权范围由接收方随意决定

答案:C。A2A 遵循最小权限原则:授权范围必须是卡片能力的子集,只给当前任务够用的权限。大于卡片能力属于越权,等于全部技能则过度暴露(比如只查天气却开放了删库权限),由接收方随意决定则完全失去安全掌控。

Q8. A2A 协议的核心设计目标包括哪些?

多选题 · mid

  • A.跨框架的互操作能力← 正确答案
  • B.能力的自我声明机制← 正确答案
  • C.强制使用中心注册表
  • D.以任务为导向的协作← 正确答案

答案:ABD。A2A 追求跨框架互操作、通过 Agent Card 自我声明能力、以任务状态机驱动协作,这些都是协议的核心特征。C 恰恰相反——A2A 是去中心化的,不依赖中心注册表,任何智能体只要知道卡片端点即可互联。

Q9. 以下哪些信息会出现在 A2A 的 Agent Card 中?

多选题 · mid

  • A.智能体名称与功能描述← 正确答案
  • B.支持处理的技能清单← 正确答案
  • C.接受任务的服务端点← 正确答案
  • D.训练语料的全部内容

答案:ABC。Agent Card 公示的是“对外协作所需”的信息:名称描述、技能清单、服务端点,用于让其他智能体判断是否合作、往哪里发任务。训练语料属于内部资产,既不需要也不可能暴露在卡片上——没有哪家快递公司会把货舱清单贴在门口。

Q10. 在实际多 Agent 系统中,A2A 与 MCP 可以如何联合使用?

多选题 · extreme

  • A.智能体间用 A2A 横向派单← 正确答案
  • B.智能体内用 MCP 访问工具← 正确答案
  • C.用 A2A 发现远程智能体能力← 正确答案
  • D.用 MCP 替代全部外部协议

答案:ABC。典型的联合用法是:智能体之间用 A2A 派发任务和发现能力,每个智能体内部用 MCP 访问数据库和 API——一条横线连同事、一条竖线连工具。D 是错的,MCP 只管内部工具调用,无法替代负责跨智能体协作的 A2A,正如货车永远替代不了邮局间的国际交接。