当前位置: 首页 > news >正文

Agent 2 Agent VS MCP

  • 👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家
  • 📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理、AI应用
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2025计划中:逆水行舟,不进则退
  • 📝联系方式:nhs19990716,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀

文章目录

  • A2A前世今生
  • 网友热评
    • A2A 和 MCP 的定位差异
    • 对 A2A 和 MCP 的批评
    • 安全性担忧
    • 对 Agent to Agent (A2A) 模式的质疑
    • 产业动机分析
    • 技术发展的历史循环
    • 对比和未来预测

A2A前世今生

2025 年4月 9 号,谷歌发布了它的 agent to agent protocol a to a 协议。这协议简单来说就是 Google 想制定一套 agent 的开发标准,这样能让不同的智能体之间协作起来。那今天我们就通过文档走读的形式来和大家一起学习一下 Google 的这个 a to a 到底是个什么东西?然后它有什么用?它的一些技术细节是怎么实现的?然后它和 MCP 协议有什么关系?最后我们还会讨一个简单的官方的案例来了解一下它的实现,所以今天没有太多硬核的代码的东西,主要是看文档。

那在最开始我想直接把总结搬到最前面来总结一下 a to a 到底是什么?首先 a to a 是一个协议,它是一个 Protocol 和MCP,那个 p 都是Protocol,都是一套协议,一套开放标准,它定义了智能体之间的一套标准的通信接口。

那在最开始我们就要有一个明确的,大脑里有一个明确的模型, a to a 协议有点像我们现在的客户端和服务端的协议,他把 agent 也分为了客户端 agent 和服务端agent。

那客户端 agent 主要制定负责这个任务的规划。制定任务,那服务端 agent 主要负责完成这个任务。

打个比方,比如说我想让我的客户端的 agent 去发布一个 b 站的视频,那这个 a 者可能要制定任务,比如说他先要登录我的 b 站账号,然后去创建一个投稿,然后填一堆表单,这样,那完成这个发布视频的 agent 是服务端agent,也就是哔哩哔哩agent,他来负责我具体的视频发布的这项工作。客户端 agent 只是来发布当前发布和规划任务。嗯,这样说应该有一个大局观了。

好,那我们看 a to a 协议它定义了什么?首先它定义了接口规范,也就是客户端 agent 要怎么调用服务端 agent 这一套接口,比如说它定义了关于任务,它可以创发送创建一个任务,可以去订阅一个任务,可以去拿到当前任务的状态,拿到当前任务的结果,也可以通过 cancel 这个接口来取消一个任务,这个是接口规范,也就是客户端 agent 和服务端 agent 可以通过这个接口规范联系起来。

好,另外还定义了数据交换的格式,那这个数据交换格式它就是规定我们要使用 Json RPC 2.0 这样一个格式,具体就像是这样 JSON RPC,大家一会我们会细看,具体来说就是一个 Jason 的 JSON 对象里面有 model 的 model 实际上就是我们的接口。比如说我想定义什么 task send 这样,然后 param 就是这个接口的入参 ID 就是当前调用的一个唯一ID,所以 a to a 协议定义了在客户端和服务端之间要使用 JSON RPC 2.0 的数据交换格式。

好,那第三点, a to a 定义的就是我的客户端服务端的交互是可以同步也可以异步的。那同步就是简单的客户端要等待服务端完成调用之后拿到结果。那异步就是我不需要,等你完成了之后可以通过这个 service and event 把结果推送给客户端就好了。

然后第四点, a to a 协议定了一套发现机制,就是说我一个客户端可能可以连接不同很多个服务端的agent。比如说我可以连接一个 GitHub 的agent,不打了 GitHub agent 我也可以连接一个 b 站的哔哩哔哩agent,那每个 agent 有自己不同的能力,那服务端 agent 可以通过 well-known agent.Json 这个文件来定义自己的能力。比如说 GitHub 这个 agent 它可能定义一个能力,就是我可以获取当前用户的所有仓库,我可以获取它的所有issue,所有PR。

那 b 站的 agent 可能就是我可以获取当前用户看过的视频的历史记录,我可以帮用户上传视频,这样,所以这样一套发现机制。

有了这套发现机制,客户端 agent 就可以发,通过这套发现机制就可以知道哪些服务端 agent 有哪些能力,然后找到那个想要的能力,找到那个想要的 agent 来去调用它的能力就好了。然后最后一点就是有一套 a to a 协议,规定了一套完整的认证和错误处理机制,这个认证你可能是通过 JWT 认证,也可能通过第三方的 Auth 认证,还有一套错误处理机制,所以总结下来就是 a to a,它是个协议,这个协议定义了这么一些东西,只要我的客户端 agent 和服务端 agent 遵循了这些协议来设计,他们之间就可以协同操作、协同起来了。

OK,那这个就是一个大概 a to a 协议都规定。

然后我们可以简单看一下调用流程这个东西先简单看一下,把后面看会更清晰。

好,那客户端agent、服务端agent,客户端 agent 就是可以跑在我们手机或电脑上的一个智能体。服务端agent,就是刚才说的具体做事情的,比如说 GitHub agent、 b 站agent、小红书 agent 这样,那具体的处理逻辑就是服务端 agent 里面的工具。比如说 b 站 agent可能会调用 b 站的视频上传工具,嗯,这样,那这个工具可能是一个 MCP 的服务。嗯,这边我们今天就不讨论了,因为它后面工具想怎么接就可以怎么接。

好,那第一步就是客户端要通过这个 well-known agent.Json 来了解到很多,我比如说我订阅了 5 个服务端,这五个服务端都有什么能力?然后根据服务端的能力来选择出一个最合适的 agent 来完成当前的任务。所以客户端已经知道我要调用哪个 agent 了,他会用 JSON RPC 格式发送一个 task send 请求来给当前的 agent Server 创建一个task,那有了这个task, agent 就要去调用它的工具或者它内部的逻辑来完成这样的一个任务了。

**好,这时候就是分同步和异步了,同步的话那这时候客户端就等着就好了,那服务端完成了之后,以 JSON RPC 的格式响应给客户端,那异步的就是客户端,这时候就不用一直阻塞,不用等着,而是等着服务器主动推送当前的这个完成的状态或者进度。**嗯,所以大概是这么个逻辑,那我们的总结差不多到这就完成了。

《developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/》

接下来我们来读文档,读的第一个文档就是官方发布的这篇博客。他是一个不是那么技术向的博客,他主要是介绍这个 a to a 到底是什么,所以他第一句话还是很明确, A to A 一定是一个 open Protocol,它一定是一个协议,所以大家明确它是一个协议,它不是一个具体的库,它不是一个框架,而是一个协议。

好,然后这个协议我们看第二句话,它是一个开放协议,它补充了 Anthropic 的 MCP 上下文模型上下文协议,所以通过这句话我们就知道它和 MCP 并不是敌竞争关系,也不是取代关系,而是一种互相的补充关系。具体为什么是补充关系,我们在后面看到他和 MCP 的关系的时候会来细聊。

好,所以 a to a 的目的就是说如果当前开发者开发的 agent 遵循了 a to a,我另外一个开发者开发的 agent也遵循了 a to a 协议,那么理论上这两个 a 证就可以相互协同了。可以当 A agent,就可以调用 B agent的能力, B agent也可以调用 a agent 的能力。

那么下面就是谷歌来秀一下有哪些大厂跟他合作了,来让大家对这个 a to a 有一些信心。

好,然后我们来看一些设计原则,就是说 a to a 的基本原则。首先我觉得最重要的就是 a to a 它是建立在已有的标准之上的。它并没有推出一个新的标准,而是建立在一些很成熟的标准,比如说它通信用的就是HTTP,然后对于异步的传输它用的就是 service and event。另外传输的格式也没有自己去实现一些奇怪的格式,而是用了很标准的 JSON RPC 格式,所以这个我觉得对开发者是非常友好的,都是建立在一些很成熟的上面。然后另外 a to a 本身就考虑了安全问题,也就考虑了验证身份认证的问题。

第三点, a to a 本身就支持了一些很长的任务,比如说我一个异步任务可能要持续一天或者两天。这个一会我们会有这个例子,所以 a to a 协议是可以很好的支持长任务的。

第四点就是 a to a 协议并不仅仅能支持文本间的通讯,文本间的 agent 它也可以有视频、音频,甚至是又可以看到它是可以返回一个网页,它返回这个以直接嵌入到网页里面。

好,然后下面我们可以来看比较重要的了,就是 a to a 是怎么工作的?也就是它的基本结构。好,那通过第一张图我们就可以看到它其实就是分为了我们客户端的 agent 和远程的服务端agent。远程的agent,那客户端 agent 主要就是负责什么?

在这面看吧。嗯,那这边他说客户端 agent 负责 formulating and communicating task,负责产生任务或者规划任务,也就是说他不具体做某些事情。那远程的这个服务端agent,虽然这个服务端可能不是那么准确的叫法,叫 remote agent,远程的 agent 才是真正的负责来执行这个任务的。嗯,还是刚才那个例子,比如说我的客户端,我想让他帮我生成一个脚本,并且生成一个视频上传到 b 站,那真正做这个事情的可能是哔哩哔哩的服务端的agent。

那下面 Google 开始定义了一些 agent a to a 协议的 agent 要具备的基本能力,首先第一点就是 capability discovery 也叫能力的发现。我需要让客户端 agent 知道我的服务端 remote 远程 agent 有什么能力,所以就是通过这个能力 capability discovery 具体实现就是通过 Json 的这个 agent card ,他管我们说的这个 well-known agent.Json 这个 Json 他管它叫做 agent card,也就是说当前 agent 一个卡片,一个名片,这个名片或者说这个 Json 文件就是说明了我这个 agent 有什么能力,可以给你提供什么样的服务。

第二点就是任务管理,那任务管理主要是通过一个 Google 管它叫做一个 task 对象来定义的,就像我们刚才看到这个接口 task 它可以客户端 agent 可以通过 send 这个接口来发布一个任务出去。那这个其实就是任务管理的范畴。那在最后当这个任务结束的时候,这个任务的产物我们管它叫做ARTIFACT,你可以管它叫做产物,或者说结果。

对,第三点就是 collaboration agent 之间是要可以协作的,他们可以互相传递消息,传递上下文,共享产物ARTIFACTS,共享用户的指令。

第四点就是 user experience negotiation,这点比较难以理解,就比如说当前的客户端可以告诉我的远程 agent 说你可以给我返回一个html,因为我的客户端可以渲染 html 给用户,所以这个就是 UX 的协商。

经过了这个协商,服务端就知道了我最终的产物不一定是要文字,不一定是要图片,也可以是一个 h t m l,这样的话客户端就可以嵌入在它的显示里面,用户就可以很清晰的看到了。那再比如说假设说一个聊天工具它不支持嵌入 h t m l,这时候客户端和远程的 agent 就可以协商说你只能返回给我文本或者图片,因为我没有办法渲染或者显示 iframe 显示 html这样的东西,所以就是用户体验的协商,客户端和远程的 agent 之间是可以协商最终产物的呃。

这个叫最终产物的类型的,或者说是否是文本、图片,或者说是 Web 一样的东西?OK,那有了这些基本的概念,我们来看一个真实的例子.

好,那这个最开始是在 Google agent space 这样一个 UI 界面。那我们看看他问的什么问题啊?他是上传了一个职位的描述的 PDF 文档,然后跟他说我正在招一个软件工程师,然后这个是职位描述,你能帮我找到这个合适的人选吗?也就是说这个需求是一个招聘需求。

OK,那这块就信息量比较大了,首先他把这个需求发送给了一个agent,这个 agent 也就是当前对话这个 agent 我们管它称之为客户端的这个agent, client agent,那我们看 client agent 在说什么?client,这 agent 明确了,我现在需要找到一些合适的候选人,那么他要通过 a to a 这个协议来发现一些远程的服务端 agent 能完成候选人查找这样一个工作。那怎么找呢?就是要通过那个 agent 提前定义好的 well-known agent.Json 里面的能力,也就是 agent card 的能力来找到哪个 agent 有寻找候选人的这样的一个功能。

那他在他已知的所有 agent 里面查找这些功能,发现 sourcing agent 这样一个 agent 能帮他完成找候选人的这样一个工作,所以他就选择了 sourcing agent,这个就是我们刚才看到的 capability discovery 能力发现,也就是说 client agent 通过不同的远程 agent 暴露出来的这个 agent 的名片来知道哪个 agent 都有什么功能,然后选到一个最合适的,嗯,他选到最合适的就是这个 sourcing agent。

然后他在思考,OK,下一步是他发现用户没有告诉他我要找的人是在什么地区,比如说是美国本地的还是全球的,还是远程工作?所以它需要询问user,询问用户具体的一些地点。

OK,这就是他的询问过程,那用户就需要答。唉,你看他说的是全球都可以,当然最好的就是跟美国的时差在正负 3 小时,这样话时差问题会比较小。这个其实就是 collaboration 的过程,也就是用户和 agent 和远程的 agent 之间都需要有协作。

OK,他把他的这个具体的明确需求发过去,又开始思考了,这个也比较重要,那这个远程的 sourcing agent 在思考什么呢唉?他发现这个已经不是刚才客户端的 agent 思考内容了,而是远端的那个 sourcing agent,他发现我需要找到一些合适的候选人,在这个正负 3 小时的 time zone 里面。然后我可以直接把这个候选人变成这个纯文本发送给客户端,也可以把它渲染成一个这个用户交互友好的这个卡片,通过 iPhone 嵌入在当前用户的这个 client agent 里面,OK,然后他发现通过这个 agent protocol negotiation,也就是通过这个 a to a 的交互,他发现当前客户端的 agent 支持 client does support iframe rendering,支持 iframe 渲染,所以我想我需要返回一个 user UX 友好的 iframe 格式。你看,这时候又就提到了刚才的这个negotiation,他为什么没有选择 playing tax 或者一个图片?因为他发现当前的客户端也支持iframe,那支持 iframe 这样的交互会更友好,所以他会选择返回一个 iframe 来渲染这些候选人。

对,这个就是刚才我们提到 user experience negotiation。

好,那这块其实就是非常神奇了,等于他提前构建好了UI,通过 iframe 来嵌入到我们的 client agent 里面,我们就可以跟这些卡片交互了。他找到这些候选人。

OK,现在用户来提出需求,那请你跟他们接触一下,预约一下这个面试。嗯,等于这是另外,另,又是另外一个任务了,所以他在去建立一个约面的这样的一个流程。

OK,两周之后,然后面试都结束了。所以你看这个任务实际持续了两周,也就是 agent 和 agent 之间的协作是可以有一个很长的时间的,这个就要提到刚才的 long running task,这个 long running task 甚至可以是两周之后再更新,这个任务的状态也没有问题。好,两周之后他又回到了这个 UI 界面。然后发现,唉,有一个我的当前的这个会话可以有更新了,所以他点这个 get update 发送一个 get update。

此时 client agent 就会向那个远端的那个真正去做事情的 remote agent 要一下更新,好,他要到更新。就是,唉,这几个人已经pass,已经通过了 interview 了,已经通过了面试了,下面一步就是,OK,那你帮我去启动这个背调吧。

OK,背调,那背调的时候也不是 client agent 去完成,他也要找到相关能够完成背调的 remote agent 来完成这件事,还是一样通过那个 agent 的名片 agent card 来发现,他发现 using 这个 symbol background agent 可以完成背调这个任务,所以他就去找这个 symbol background agent,这时候这个多 agent 写作能力就体现出来了啊。

他已经成功的叫那个 agent 去给这三个人做这个背调了,但是他遇到了一个问题,就是那个背调的 agent 只能在美国区域内做背调。超过这个美国他就用不了了,这时候怎么办?你看他就问你能帮我在美国之外去跑背调吗啊?这时候又开始推理了,他要找到另外一个agent,可以在美国之外,也可以做背调,然后他根据这个 agent 名片找到了 international background agent,这个 agent 也可就可以在美国之外去做背调,那就结束了。

OK,然后他说什么我已经发起了,然后这个预计是两个工作日完成,你看这又是一个长任务,所以这就体现了 a to a 的 task 任务的状态管理能力,任务不一定要在会话内完成,它可以是一个很长的期间,很长的时间跨度。OK,那这个视频就完成了,所以还是很挺惊艳的,这个多 agent 的结合。

OK,那我们下面一步就是看一下 github 官方的 github 仓库,来具体了解一下这些技术细节和名词。那他的 github 就是 Google 下面的 a to a,很简单,很好记,OK。我们看一眼概念上的东西,其实概念上东西就是我们提到的之前比如说 agent car,这个 agent 的名片到底是什么?

那 agent card 其实就是一个公共的元数据,它存在这个服务器点 well-known 这个目录下面的 agent.Json,它的任务也很简单,就是描述这个 agent 能力。那具体这个 Jaon Schema 是怎么规定的?我们一会可以看。

然后呢? a to a 这个协议也是 client 和 Server 之间的联系,所以 a to a 的 Server 就是暴露最简单的 HTTP 的接口,给这个 a to a 的 client 来定,来调用那具体的接口其实就是在总结的时候定义的这些接口,当然还有其他接口,这个只是简单举个例子,那 a to a, client 也就是能够调用这些接口的客户端,就是 a to a client,他发送请求给到 a to a 的服务器。

好,下面就是一些概念了,这些概念挺无聊的, task 就是一个最基本的能力,最基本的任务由客户端发起。那这个 task 里面要有一个 unit ID 和当前的状态,这个状态可以是提交了正在进行,然后 input require 就是需要用户进行输入这个具体的例子就是像刚才那样,客户端不确定具体的这个地区候选人,地区用户输入的和美国时差正负 3 小时地区都可以,这就是 input require,然后完成失败被取消。

message 就是客户端服务端之前的通话通讯.

然后 part 这个我们可以把它理解成一个部件。它是 fundamental content unit with a message 或者 ARTIFACT,part 就是结果的一个最基本的组成单位,可以是最终产物的组成单位。最终的产物可以有很多个 part 组成,那当前的 message 也可以有很多的 part 组成。 part 可以是文本,可以是文件,可以是数据,可以是一个json,或者可以是一个表单。嗯,那其实理解成一小段的数据就好了,那而且在就是最终的产物 output generate by the agent during a task。最终的产物就叫ARTIFACT, ARTIFACT 之中包含了很多part,包含了很多部件,这个比较难以理解,大家先理,就这么简单,有概念就好。

然后 streaming 就是是否支持流式传输,那支持或者不支持流式传输不是客户端说的算,而是当前服务端支不支持流式传输,如果支持的话,客户端就可以通过这个 send subscribe 接口来订阅这个客户端服务端的 service and event。嗯,OK,所以基本的概念就是这样。

那我们来看一下它的典型的调用的这个流程,其实这个流程跟我们这块基本上是一模一样的,首先第一步就是客户端要通过服务端的这个名片来知道服务端 agent 有什么能力,然后知道了选择好了要调用哪个服务端 agent 要去初始化一个卡片,比如说可以同步的就通过 send 异步的就可以,要流式订阅的就可以通过这个 send subscribe 去初始化一个任务。

好,然后后面就是,嗯,服务端的 agent 去处理这个任务,然后最后完成,通过状态可以判断是成功了还是失败了,对吧?OK,这就是基本的一个定义。然后下一步我们就是要看技术细节,也就是说它的官方文档这里面内容就非常非常的杂乱了。

我们先看一下这张图吧。首先。就是一个基本的结构,我们怎么理解 a to a 它的一个基本架构?首先 a to a 一定是 agent 和 agent 之间的,所以你看这有两边的这个agent,它们之间的通信通过 a to a 这个协议,那 agent 里面它可以调用大语言模型的API,可以通过各种框架来组成这个agent。比如说可以用 Google 的ADK,可以用 long graph,可以用这个QAI,对吧?那 agent 还需要调用工具,这个调用工具可以通过 MCP 协议来调用。

m c p 协议实现的工具,所以 a to a 它就是 agent 和 agent 之间的协议,而 MCP 是 agent 和工具的协议。嗯,这个就是比较好的解释了 a to a 和 MCP 的关系。

可以直接跳到这个地方来,具体的看一下。你看他搞了个爱心,就说明他们俩是很友好的。嗯,他们俩不是替换关系,他。

We recommend MCP for tools and A2A for agents.

也就是说他们推荐 MCP 协议来打通 agent 和工具之间的这一道墙,那 a to a 协议是打通 agent和 agent之间的强,所以他们俩并不冲突,也就是说 MCP 负责打通 agent和工具, a to a 负责打通 agent和 agent。

具体可以看这张图,你看在 agent内部和工具之间是通过 MCP 协议,而 agent 和不同的 agent 之间是通过 a to a Protocol,所以大家就理解了他们是不是互相影响的,甚至是互相成就,互相加成,对吧?我的 agent 有了 MC p 可以调用工具,我 agent 有了 a to a 可以调用另外其他agent。

好,那我们看回这个文档,看一下这个 technical document action,这里面非常非常的长,我们主要来看一些基本的定义。回到最上面,首先就是 a to a 协议里面的基本角色有三个,首先就是用户,这个用户就是指的是使用这个客户端 agent 的用户,比如说我们。然后又有了client,也就是客户端的agent,也就是用户使用的这个agent,还有服务端agent,就是远程的agent,就客户端 agent 可以调用远程的agent。所以就是这三个角色,然后他们的传输是用 HTTP 协议里面的文里面的数据格式遵守 JSON RPC 2.0。这也刚才也说了 2.0 主要就是规定一个方法,一个接口,然后把入参给他,然后有一个唯一的ID,当我这个发送出去了,客服务端想响应结果的时候, result 带上,然后并且匹配相同的ID,这个简单来说就是 JSON RPC。

好,那我们继续看一个最重要的概念,可能是在 a to a 里面就是这个 agent 的名片,因为必须要有了一个名片,我才能告诉客户端agent,我当前服务端 agent,远程 agent 有什么样的能力?那我们来看一下它的 schema 定义也比较简单,这个 agent card 的接口,首先我当前 agent 的名字我的描述是什么?然后我的URL,因为它这个 a to a 协议都是通过 HTTP 接口来实现的,所以这个远程的 agent 也相当于跑在一个,也相当于一个外部服务,一个 HTTP 的服务它要暴露一个它的 URL 链接给客户栏来调用,OK,然后他的provider,比如说 GitHub agent,可能他的 organization 就是 gihub 当前的版本,对吧?然后一些文档,因为这个名片里面可能附不了那么详细的文档,所以还要把文档的地址带给他。

然后下面一个比较重要的就是 capability 能力,也就是我当前这个服务端 a 站是否支持流式传输,如果不支持的话,那我只能就是全部调用完了返回给你,是否支持这个消息推送?嗯,是否支持保留这个叫什么历史记录?嗯,所以这个就是服务端 agent 的一些基本属性,然后就是 authentication 我用什么方法进行off?比如说我用 JWT 的方法,我用奥斯 0 或者用第三方的 authentication 去进行验证,

嗯,然后下面才是最重要的,就是我这个 agent 有什么能力?大家看skills,它是一个这个对象的数组,所以我的 agent 有很多能力,那每一个能力有一个专属的ID,有一个专属的名称,一个description,然后还有一些案例。所以当我们给 agent 实现了一个 agent card 之后,这 agent 的基本能力和属性就已经定义好了啊。具体的例子可以从这看一个他 a to a 仓库里的 agent card 案例。我找一下 Json specification。 a to a 大JSON,对,就是这样一个非常大的JSON。

他的 agent capability, agent schema 都定义在这了,这个内容其实就是他这个就是一个案例,比如说 Google map agent,他的名字就叫他,然后他的 URL 是这个,也就是我们可以通过这个接口来请求 Google map 的服务。

然后它的能力就是路径规划,对吧?然后一个 custom 可以,你可以构建,通过这个 agent 来构建一个自定义的map,这就是他的能力。所以每一个 agent 都需要有一个 agent card。好,那我们继续往下看。

接下来就是任务的定义了,那一个任务一直就是应该是被服客户端发起的,然后由服务端完成这个agent。这个 task 定义比较重要的就是它有一个status。也就是 task 是有状态的,客户端可以通过这个状态来判断当前任务的状态,然后服务端是可以更新这个状态。嗯, ARTIFACT 就是产物,剩下的就不多说了,都是一些很细节的定义了。我觉得这些也不用太多的说明了。

因为通过这个流程图大家就知道它是怎么运作的了,就把它想象成一个客户端和服务器之间的交互就好了。这些具体的定义只是具体的数据格式的定义,我们在实现的时候按照它的数据格式定义实现就好了。

网友热评

在最后我想说的是针对于A2A 的一些观点和看法(来源自网友和我自己的思考)

A2A 和 MCP 的定位差异

MCP 主要是让单个代理(Agent)调用工具和资源。

A2A 主要是让代理之间能够互相发现、分配任务、协作通信。

但不少人觉得:“既然 Agent 也可以被包装成 MCP 工具,那 A2A 是不是多此一举?”

对 A2A 和 MCP 的批评

有人觉得这些协议本质就是重新发明轮子:RPC over HTTP 本来就能做。

有人觉得是过度设计(over-engineering),只是在已有概念上套了一层"时髦"的新名字。

还有人觉得,Google 推 A2A 是为了战略性占领标准,未来掌控生态,类似于 Android、Chrome 等"开源但主导"的模式。

总结:技术上没新意,商业上是为了抢占标准控制权。

安全性担忧

很多人提到 Prompt Injection(提示注入攻击)的风险:LLM 接触到不可信数据后,可能被攻击,执行恶意操作。

目前的安全建议是:只能使用经过认证的、受信任的 Agent 和 MCP 服务。

总结:协议本身没安全漏洞,但用法容易出大问题。

对 Agent to Agent (A2A) 模式的质疑

有人认为让多个 LLM 互相通信只会放大非确定性和错误率,不是一个好的架构设计。

总结:实际应用价值存疑,风险很高。

产业动机分析

有人指出 Google 集结这么多咨询公司(Accenture、KPMG、BCG、Infosys 等)的目的,是要推动企业广泛部署 Agent,最终取代大量中介类职业(如招聘、客服、数据整理等)。

总结:背后是大规模产业转型和裁员的伏笔。

技术发展的历史循环

很多人提到这类协议像是重新发明了 SOA、WSDL、SOAP、CORBA,只不过这次是给 LLM 用的。 历史一再证明:复杂协议标准往往难以普及,简单直观的设计(比如 REST)才会胜出。

总结:技术史上的"轮回",未来也许还会重新被淘汰。

对比和未来预测

大家普遍怀疑:A2A 可能很快被遗忘,进入 Google Graveyard(谷歌产品坟场)。

总结:MCP 可能继续发展,A2A 很可能是短命的。

相关文章:

  • 【C++】深拷贝与浅拷贝
  • GitHub 趋势日报 (2025年04月08日)
  • C语言精讲-12
  • 【Linux】基础开发工具
  • 八大可商用桌面客户端应用开发框架深度指南-优雅草卓伊凡
  • 操作系统基础:05 系统调用实现
  • playwright 教程高级篇:掌握网页自动化与验证码处理等关键技术详解
  • [数据结构]排序 --2
  • 【C++】C++的引用
  • 在 Ubuntu 下通过 Docker 部署 Caddy 服务器
  • C++双链表介绍及实现
  • 从输入URL到页面渲染:浏览器请求的完整旅程解析
  • LLM学习笔记3——使用Docker(vLLM+OpenWebUI)实现本地部署DeepSeek-R1-32B模型
  • 基于HASM模型的高精度建模matlab仿真
  • Go 跨域中间件实现指南:优雅解决 CORS 问题
  • 十五、C++速通秘籍—异常处理
  • 基于Python的经济循环模型构建与可视化案例
  • Matlab添加标题title与标签lable
  • 上层 Makefile 控制下层 Makefile 的方法
  • 解释型语言和编译型语言的区别
  • 会计江湖|年报披露关注什么:独董给出的“信号”
  • 韩德洙成为韩国执政党总统大选候选人
  • 比尔·盖茨:未来20年通过盖茨基金会捐出几乎全部财富,2045年底基金会停止运营
  • 8大类1000多支,中国红十字会已建成10万人规模救援队伍
  • A股三大股指收涨:军工股掀涨停潮,两市成交近1.5万亿元
  • 当年的你,现在在哪里?——新民晚报杯40周年寻人启事