编者按: Google 新推出的 A2A 与 Anthropic 的 MCP 到底有何区别?它们是竞争关系还是互补的技术?
本文通过一个规划夏威夷旅行的生动案例,清晰拆解了这两大协议的本质区别:MCP 更像是为单个 AI Agent 赋能的"超能力工具箱",而 A2A 则是构建了 AI Agent 专家团队间的"协作网络"。作者基于实际项目经验,揭示了影响实际应用这两种协议的 3 项技术差异,同时还解读了二者互为补充而非竞争的真实关系。
作者 | Zachary Huang
编译 | 岳扬

01 引言:协作式人工智能的曙光
想想你是如何与同事合作完成那些复杂项目的 ------ 你们互相分享信息、提出问题,并整合彼此的专业知识。现在,请想象这些 AI Agent 也能做同样的事情,它们不再各自为战,而是通过协同工作来解决问题。
这正是 Google 于 2025 年 4 月 9 日发布的 Agent-to-Agent(A2A)协议[1]所追求的目标。该协议将孤军奋战的 AI Agent 转化为团队协作者:研究型助手可将研究成果无缝传递给文案助手,旅行规划助手能直接与财务助手核对酒店预算 ------ 全程无需人类扮演中间人的角色。开发者社区的热情已然印证其价值,该协议上线数日即在 GitHub 斩获 7000+ Stars[2] 的情况足以说明一切。但需注意的是,Anthropic 不久前推出的模型上下文协议(Model Context Protocol,MCP)[3]也抱有相似的愿景。
开发者该如何抉择?A2A 是否只是换个了名字的 MCP?是否应该优先学习其中某个协议?抑或二者本就服务于不同场景?
本教程将拨开市场炒作的迷雾,为您实现:
- 用通俗易懂的语言解释这两种协议
- 揭示影响实际应用这两种协议的 3 项技术差异
- 解读二者互为补充而非竞争的真实关系
本文不会有过多的技术术语,只有对这些协议是如何重塑人工智能协作范式的清晰见解。阅读完本文,相信您将精准掌握 A2A 相较 MCP 的独特优势(反之亦然)。准备好探索这场技术热潮了吗?让我们来一探究竟!
02 MCP vs. A2A
假设您正在计划一场夏威夷梦幻之旅,需要考虑的事情太多了!您需要:
- 查看天气预报以确定最佳出行月份
- 在预算内筛选最合适的航班
- 根据当地人的建议规划活动项目
- 进行货币转换,了解当地物价水平
这些任务涉及完全不同的专业领域!现在假设您拥有一位名为 Claude 的 AI Agent。您可以询问:"Claude,下周茂宜岛(Maui)的天气如何?"
但问题在于:Claude 是根据过往的数据训练出来的,既不了解实时的天气状况,也无法预测下周的天气。这就好比去询问你那位虽然聪明但近期未到访过该城市的朋友 ------ 他们确实无从知晓!此时就需要本文讨论的这两大技术协议来破局。
2.1 MCP:赋予 AI Agent 超能力
模型上下文协议(Model Context Protocol,MCP)如同为任意 AI Agent 装备"按需调用专业工具"的超能力。
未启用 MCP 时的对话场景可能如下:
您问:"下周茂宜岛(Maui)的天气如何?"
Claude 答:"我无法获取实时天气数据或天气预报,建议您查询气象服务网站。"
这样的回答显然令人失望。但启用 MCP 后:
您问:"下周茂宜岛的天气如何?"
Claude 答:[通过 MCP 连接气象服务] "最新气象预报显示,下周茂宜岛天气晴朗,气温约82°F,周三下午可能有短暂阵雨。"
这个过程背后包含四个简单的步骤:
-
发现可用的"超能力" 。Claude 会检索工具库,询问:"今天我有哪些酷炫工具可以使用?" 然后发现有一个气象服务可以使用。(代码实现:调用 list_tools[4])
-
构建服务请求。Claude 生成一条精准的指令:"嘿,天气工具,请提供下周茂宜岛的天气预报"(但是这条指令是以计算机语言表述的)(代码实现:调用 call_tool[5])
-
获取到专家水平的响应。气象服务施展魔法并返回响应:"茂宜岛:82°F,晴,周三下午有小雨!"(代码实现:执行 Tool.run[6])
-
转译为人类语言。Claude 将专业的天气预报转化为通俗易懂的对话聊天式回复(代码实现:从call_tool[7] 获取结果)
此处的神奇之处在于,MCP 为任意 AI Agent 与任意工具的交互构建了一条标准化的通道。 这就像构建了一个适配所有电器与插座的通用适配器。
- 对工具开发者而言:只需按照 MCP 标准开发气象 API、计算器或电子邮件发送器等工具,即可兼容 Claude、GPT、Gemini 等所有支持 MCP 的 AI Agent。
- 对普通用户而言:用户所使用的 AI Agent 突然解锁了实时天气查询、电子邮件发送、会面预约等超能力,所有功能无需针对每项任务单独编程即可实现。
2.2 A2A:组建您的 AI 梦之队
但面对复杂的夏威夷行程规划,仅获取天气数据还远远不够 ------ 你还需要整合航班和酒店的预定、安排活动项目、控制预算等多领域的专业能力。这正是 Agent-to-Agent(A2A)协议大展身手的舞台。如果说 MCP 是连接 AI 与各种工具的桥梁,A2A 则是用来建立专业 AI Agents 间的协作网络。
想象一下假如你拥有这样一只旅行梦之队:
- 深谙航空路线与票价的航班专家
- 能精准匹配你的住宿偏好的酒店达人
- 熟悉夏威夷各种活动与文化的本地向导
- 严格把控支出的预算管家
借助 A2A,您的个人助手(Personal Agent)可将假期规划任务分派给这些专家,继而整合他们的专业建议。
未启用 A2A 时的对话场景可能如下:
您问:"请为我规划 6 月份的夏威夷 5 日游,预算 3000 美元。"
个人助手答:"我能提供一些常规性的建议,但无法获取实时航班价格或酒店空房信息。至于活动,我能推荐一些热门的选择,但无法确定是否符合您的旅行日期或旅行预算。"
这对于拥有一个梦想中的假期显然帮助有限!但启用 A2A 后:
您问:"请为我规划 6 月份的夏威夷 5 日游,预算 3000 美元。"
个人助手答:[通过 A2A 调度专家助手] "已为您制定完整的 6 月份夏威夷 5 日行程!从洛杉矶国际机场出发的往返机票(650美元)与茂宜岛的海滨酒店(1200美元)合计 1850 美元,剩余 1150 美元的活动费用。活动规划如下:次日莫洛基尼火山口浮潜(145美元/人)、第三日传统卢奥晚宴(120美元/人)、第四日哈纳公路之旅(210美元/人)。剩余约 675 美元可用于餐饮与纪念品。您希望我为您预订其中任何一项吗?"
在幕后,您的个人助手(Personal Agent)正通过 A2A 协议编排这场假期交响曲:
-
找到合适的专家。 个人助手翻阅其数字版的"商务名片簿"(AgentCard[8]),筛选能在旅行、活动安排与制定预算等方面能提供帮助的专家助手(代码实现:调用 A2ACardResolver[9] 获取卡片)
-
任务分解和派发。 个人助手将您的假期梦想拆解为多个易于管理的任务:
- 任务1:查询航班/酒店 → 旅行助手
- 任务2:推荐活动 → 本地向导助手
- 任务3:预算审核 → 预算助手
- 航班任务派发
- 个人助手将任务 1 封装为数字包(Task[10]),分配追踪编号如"task-123"
- 通过 tasks/send 指令发送至旅行助手(代码实现:调用 A2AClient.send_task[11] 与 TaskSendParams[12])
- 旅行助手开始寻找最合适的航班与酒店
- 个人助手 → 旅行助手:"请为总预算为 3000 美元的一对情侣查找 6 月份从洛杉矶国际机场飞往夏威夷的平价航班,以及茂宜岛 5 日的酒店选择。"
- 旅行助手 → 个人助手:"已找到夏威夷航空公司洛杉矶国际机场(LAX)至 OGG(茂宜岛)的往返机票,650 美元/人。阿罗哈海滩度假村(Aloha Beach Resort)提供 240 美元/晚的客房,5 晚合计 1200 美元。两项均含可免费取消的服务条款。"
- 在"活动安排"与"预算制定"阶段上重复以上步骤
- 个人助手对其他任务执行相同的封装-派发流程,为每位专家分配专属任务与追踪编号
- 个人助手 → 本地向导:"请为 6 月份的茂宜岛情侣 5 日游推荐最佳活动方案,剩余预算 1150 美元。"
- 本地向导 → 个人助手:"推荐活动:莫洛基尼火山口浮潜(145 美元/人)、老拉海纳卢奥晚宴(120 美元/人)、哈纳公路导览游(210 美元/人)。这些项目六月可预定且评分极高。"
- 个人助手 → 预算助手:"请审核该方案是否符合 3000 美元预算:650 美元的机票+1200 美元的酒店+475 美元的主要活动安排,剩余预算用于餐饮与纪念品支出。"
- 预算助手 → 个人助手:"核心支出 2325 美元,剩余 675 美元(约 135 美元/日)可用于餐饮与购物。若灵活搭配较为高端的餐厅用餐与经济型简餐,该预算在夏威夷属合理范围。"
- 状态跟踪机制
- 个人助手通过 tasks/get 指令定期查询:"任务 task-123 完成了吗?"(代码实现:调用 A2AClient.get_task[13])
- 当助手返回"已完成"状态(TaskStatus[14], TaskState[15]),个人助手提取响应包中的成果(Artifact[16])
- 制定完美的假期方案。个人助手将所有专家建议制定成专属您的完美假期方案!

最终,您的个人助手将所有专家知识整合为一个连贯的旅行计划。整个过程您无需参与 ------ 您只需坐享这份由专家团队精心打造的完整行程!
2.3 完美的组合
当 MCP 和 A2A 协同工作时,真正的奇迹就会发生:
-
您的个人助手通过 A2A 连接专业 AI 智能体
-
每个专业智能体通过 MCP 连接所需的特定工具
-
由此形成 AI 智能体网络,每个智能体都拥有独特的超能力,共同为您服务
这就像拥有一个专家顾问团队(A2A)且为每个顾问配备专属的工作设备(MCP)。它们合力可完成单个 AI Agent 无法独自处理的复杂任务。
其中的关键区别在于谁在与谁对话:
- MCP: AI 智能体与工具进行对话(Claude + 天气服务)
- A2A: AI 智能体与其他 AI 智能体进行对话(行程规划师 + 酒店专家)
最妙之处在于其可扩展性。通过统一标准实现"一次开发,通用适配"------任何新开发的工具或智能体都能无缝接入现有生态,不同组件之间就像标准化接口的乐高积木,无需针对特定组合重复开发对接程序。
03 Beyond Tools vs. Agents:介绍他们真正的技术差异
"MCP 中智能体和工具对话,A2A 中智能体和其他智能体对话"这一解释虽然浅显易懂,但你可能会疑惑:"这种划分是否过于简单?"
没错!"工具"与"智能体"的界限其实很模糊。事实上,正如 OpenAI 的文档所示[17],我们甚至可以将整个智能体当作工具来使用!想象一下,让你的 AI 智能体将另一个 AI 智能体作为工具调用 ------ 这种操作会立即引发系统层级的指数级叠加。
如果您不满足于表面解释而想深入技术本质,那就来对地方了。让我们抛开"谁与谁对话"的表层差异,剖析使这两个协议产生根本性不同的代码层特征!
重要说明:以下分析内容基于 Zach 在实际开发过程中形成的个人理解,部分细节可能出错!若发现任何问题,欢迎留言探讨 ------ 这正是我们共同进步的最佳方式。
3.1 差异1:自然语言与结构化模式
使用 A2A 时,您只需说"100美元等于多少加元?";而使用 MCP 时,必须严格按照货币工具要求的格式输入 ------ 例如 {"currency_from": "USD", "currency_to": "CAD", "amount": 100}。这是完全不同的交流方式!
A2A 的交流方式类似人类对话
A2A 采用类似人类自然对话的方式交流:
ini
# A2A Client sending a task
user_message = Message(
role="user",
parts=[TextPart(text="How much is 100 USD in CAD?")]
)
接收消息的 Agent 能以最自然的方式理解请求 ------ 就像向朋友求助时没有严格的格式要求。
MCP 要求提供精确参数
而 MCP 则要求严格匹配预定义模式(predefined schema)中的参数:
ini
# MCP Client calling a tool
tool_name ="get_exchange_rate"
# Must match EXACTLY what the tool expects
arguments ={"currency_from":"USD","currency_to":"CAD"}
如果未提供工具要求的精确参数(例如使用"from_currency"而非"currency_from"),调用就会失败。这里没有回旋余地!
Why This Matters
试想一下客服服务场景:A2A 如同能与你自然沟通的客服代表,即使你的问题无法归类到预设标签中,也能准确理解需求;MCP 则像填写必须严格对号入座的表格,只能在特定字段输入指定内容。
A2A 的自然语言方法能应对"非标准"请求并适应新场景 ------ 例如询问"100美元够不够在多伦多吃双人份晚餐?",自然语言 Agent 能综合货币知识和当地餐饮定价。而 MCP 的严格模式能确保可靠、可预测的结果 ------ 非常适合需要标准问题的精准答案的场景。
3.2 差异2:任务生命周期与函数调用
A2A 将工作视为具有生命周期的完整任务,而 MCP 则将其视为独立的函数调用。这类似于项目经理(A2A)与计算器(MCP)的区别。
A2A 的多阶段任务管理
A2A 的核心是围绕"任务"概念构建的,"任务"具有包含多个状态的完整生命周期:
bash
# A2A Task has explicit states in its lifecycle
{
"id":"task123",
"status":{
"state":"running",# Can be: pending → running → completed/failed
"startTime":"2025-04-12T10:30:00Z"
},
"artifacts":[...]# Partial results as they're created
}
"任务"可以在不同状态间自然流转 ------ 可以是启动状态、需要更多输入、生成部分结果,最终的完成或失败状态。A2A 协议本身就能管理这一生命周期,使其非常适合具有不确定性的复杂、多阶段的工作。
MCP 的单阶段操作
MCP 的操作本质上是单阶段的 ------ 它们要么成功要么失败:
ini
# MCP has no built-in "in-progress" or "needs more input" states
result = client.call_tool("get_exchange_rate",{"from":"USD","to":"CAD"})
# If arguments are invalid or missing, it simply fails with an error
# There's no protocol-level "input-required" state
如果工具需要更多信息,无法通过协议直接请求 ------ 它必须返回报错信息,或由客户端应用程序处理创建一个新的、单独的请求。进度更新是可选的附加功能,而非操作生命周期的核心部分。
Why This Matters
想象一下翻新房屋与使用单个工具的区别。A2A 就像雇佣一位承包商管理整个翻新项目 ------ 他们会处理所有阶段、向你汇报进度,并解决突发问题。MCP 则像单独呼叫各个专家 ------ 水管工做一件事,电工做另一件事,无人全程跟进整体项目进度。
A2A 在需要适应性、存在不确定性且涉及复杂多阶段的工作中表现卓越,例如项目研究、创意工作或解决复杂问题。
MCP 在需要精确的独立操作(具有可预测的输入和输出)时表现优异,例如数据计算、数据检索或特定类型的数据转换。
3.3 差异3:宏观的、通用性强的技能 vs. 明确的、步骤化的具体功能
A2A 是笼统地描述智能体能做什么,而 MCP 则详细说明了可用的具体功能及其调用方式。
A2A 的能力描述
A2A 以概括性的、灵活的术语描述智能体的能力:
ini
# A2A AgentCard example
agent_skill = AgentSkill(
id="research_capability",
name="Research and Analysis",
description="Can research topics and provide analysis.",
examples=[
"Research quantum computing advances",
"Analyze market trends for electric vehicles"
]
# Notice: no schema for how to invoke these skills!
)
它就像一份简历,告诉你某人擅长什么,而不是具体为他如何分配工作。
MCP 的功能规范
MCP 精确定义了每项可用功能:
bash
# MCP tool definition
{
"name":"get_exchange_rate",
"description":"Get exchange rate between currencies",
"inputSchema":{
"type":"object",
"properties":{
"currency_from":{"type":"string"},
"currency_to":{"type":"string"}
},
"required":["currency_from","currency_to"]
}
}
它就像一本说明书,没有任何解释的余地。
Why This Matters
想象一下工作分配场景。使用 A2A 类似于只告知某个团队成员"你负责这个项目的调研部分" ------ 他们将根据自身专业知识自行规划实施细节。使用 MCP 则如同给出详细的逐步操作指令:"用这三个关键词搜索这三个数据库,并按此格式整理结果"。
A2A 模式鼓励创造性思维、主动性和应对突发情况的能力。智能体可根据探索过程中发现的新信息动态调整策略。
MCP 模式则确保执行过程的一致性、可预测性,以及对操作流程和结果的精准控制。这种方式特别适用于需要严格遵循既定程序的场景。
04 二者的理念差异
这三项技术差异反映了对于 AI 协作的不同理念:
- MCP 的核心理念:"明确告知需要完成的具体内容及执行方式"
- A2A 的核心理念:"告诉我你想要完成什么,我将自主规划实现路径"
可以将 MCP 类比为乐高积木 ------ 精准、可预测、组合方式明确。A2A 则更似陶土 ------ 灵活、适应性强、能够呈现您最初可能未曾设想的形态。
其精妙之处在于无需二选一!许多复杂的系统将同时运用这两种模式:MCP 用于精确执行工具,A2A 用于专业智能体之间协作解决问题。
05 结论:协作型 AI 即未来
我们已剖析了 A2A 与 MCP 的核心差异,其本质在于:它们不是非此即彼的技术标准,而是解决同一难题不同部分的互补性方案。
可将 MCP 视为精确工具的构建者,A2A 则是专家团队的组建者。当二者协同运作时,真正的奇迹就出现了:
- MCP 通过标准化的工具连接为单个 AI 智能体赋予超能力
- A2A 使这些强化后的智能体能够协作攻克复杂任务
- 二者合力构建的生态系统,实现了专业能力与知识经验的无障碍交互共享
对开发者而言,这意味着他们不必纠结于人为制造的协议阵营对立。相反,你可以问问自己:"我需要精准的工具执行(MCP)、智能体协作(A2A),还是两者都需要?"答案完全取决于您的具体应用场景。
未来将如何发展?随着 AI 生态的成熟,这两大协议的融合将日益加深。这些协议背后的企业都明白,协同工作能力才是未来的趋势------孤岛式的 AI 智能体终将被淘汰。最具价值的应用不会局限于单一智能体搭配若干工具,而是统筹协调由专业智能体组成的完整团队。 开发者若能把握这一技术交汇点,就将成为构建下一代真正具备协作能力的 AI 系统的先行者。
About the author
Zachary Huang
Incoming Researcher @MSFTResearch AI Frontiers. I work on LLM Agents and Sys | Phd@ColumbiaCompSci | Prev: @GraySystemsLab @databricks | Fellowship: @GoogleAI
END
本期互动内容 🍻
❓您是否已经在项目中应用了这些协议?欢迎分享您的实践经验和取得的成果。
文中链接
1\][developers.googleblog.com/en/a2a-a-ne...](https://link.juejin.cn?target=https%3A%2F%2Fdevelopers.googleblog.com%2Fen%2Fa2a-a-new-era-of-agent-interoperability%2F "https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/") \[2\][github.com/google/A2A](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A "https://github.com/google/A2A") \[3\][www.anthropic.com/news/model-...](https://link.juejin.cn?target=https%3A%2F%2Fwww.anthropic.com%2Fnews%2Fmodel-context-protocol "https://www.anthropic.com/news/model-context-protocol") \[4\][github.com/modelcontex...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fblob%2F70115b99b3ee267ef10f61df21f73a93db74db03%2Fsrc%2Fmcp%2Fserver%2Ffastmcp%2Fserver.py%23L173 "https://github.com/modelcontextprotocol/python-sdk/blob/70115b99b3ee267ef10f61df21f73a93db74db03/src/mcp/server/fastmcp/server.py#L173") \[5\][github.com/modelcontex...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fblob%2F70115b99b3ee267ef10f61df21f73a93db74db03%2Fsrc%2Fmcp%2Fclient%2Fsession.py%23L256 "https://github.com/modelcontextprotocol/python-sdk/blob/70115b99b3ee267ef10f61df21f73a93db74db03/src/mcp/client/session.py#L256") \[6\][github.com/modelcontex...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fblob%2F70115b99b3ee267ef10f61df21f73a93db74db03%2Fsrc%2Fmcp%2Fserver%2Ffastmcp%2Ftools%2Fbase.py%23L78 "https://github.com/modelcontextprotocol/python-sdk/blob/70115b99b3ee267ef10f61df21f73a93db74db03/src/mcp/server/fastmcp/tools/base.py#L78") \[7\][github.com/modelcontex...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fblob%2F70115b99b3ee267ef10f61df21f73a93db74db03%2Fsrc%2Fmcp%2Fclient%2Fsession.py%23L256 "https://github.com/modelcontextprotocol/python-sdk/blob/70115b99b3ee267ef10f61df21f73a93db74db03/src/mcp/client/session.py#L256") \[8\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Ftypes.py%23L331 "https://github.com/google/A2A/blob/main/samples/python/common/types.py#L331") \[9\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Fclient%2Fcard_resolver.py "https://github.com/google/A2A/blob/main/samples/python/common/client/card_resolver.py") \[10\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Ftypes.py%23L85 "https://github.com/google/A2A/blob/main/samples/python/common/types.py#L85") \[11\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Fclient%2Fclient.py%23L34 "https://github.com/google/A2A/blob/main/samples/python/common/client/client.py#L34") \[12\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Ftypes.py%23L129 "https://github.com/google/A2A/blob/main/samples/python/common/types.py#L129") \[13\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Fclient%2Fclient.py%23L68 "https://github.com/google/A2A/blob/main/samples/python/common/client/client.py#L68") \[14\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Ftypes.py%23L65 "https://github.com/google/A2A/blob/main/samples/python/common/types.py#L65") \[15\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Ftypes.py%23L11 "https://github.com/google/A2A/blob/main/samples/python/common/types.py#L11") \[16\][github.com/google/A2A/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fgoogle%2FA2A%2Fblob%2Fmain%2Fsamples%2Fpython%2Fcommon%2Ftypes.py%23L75 "https://github.com/google/A2A/blob/main/samples/python/common/types.py#L75") \[17\][openai.github.io/openai-agen...](https://link.juejin.cn?target=https%3A%2F%2Fopenai.github.io%2Fopenai-agents-python%2Ftools%2F%23agents-as-tools "https://openai.github.io/openai-agents-python/tools/#agents-as-tools") ****本文经原作者授权,由** **Baihai IDP** **编译。如需转载译文,请联系获取授权。**** **原文链接:** [zacharyhuang.substack.com/p/a2a-proto...](https://link.juejin.cn?target=https%3A%2F%2Fzacharyhuang.substack.com%2Fp%2Fa2a-protocol-simply-explained-here "https://zacharyhuang.substack.com/p/a2a-protocol-simply-explained-here")