目录1、A2A协议出现的原因2、多agent之间怎么知道彼此是干什么的3、A2A中任务协作的基本单位4、A2A和MCP的关系提到A2A就可以联想到MCP我理解它们的区别是MCP解决的是单个agent怎么连工具和数据A2A解决的事多个agent之间怎么分工协作。通过A2A协议一个agent就可以把子任务委托给另一个专业agent接收方按自己的skill声明承接支持异步长任务和流推送结果。MCP和A2A是互补的MCP向下连接工具A2A向上连agent在复杂的多agent环境中两者通常都需要用到。1、A2A协议出现的原因总的来说就是单Agent工具数量有限、上下文窗口有限、专业能力有限复杂任务需要拆分给不同的agent并行处理。其实主要是因为单agent不够用所以需要多agent协作就有了A2A。一个agent其实就是一个LLM一组工具一段上下文窗口它的缺点其实就是A2A协议出现的原因1首先它的上下文窗口是有限制的单个agent去执行复杂任务容易很快就把窗口塞满它执行过程中累积的中间产物搜索结果、草稿、反思记录等会很快给窗口塞满2工具数量也有限制我们如果给一个agent装很多个工具会导致模型处理起来效率极低容易混乱。3最后是专业能力的限制我们要确保单一职责比如代码审查agent就只做代码审查、生码agent就只管生成代码每一个agent做好自己的事有自己的配置。比如一个agent去做多个事无论从效率还是结果来看都要好很多。就比如我们现在多agent需要去生成代码和审查代码我们有一个调度agent一个代码生成agent和一个审查代码agent1调度agent将生成代码的工作委托给生成代码agent来做生成代码agent需要自己去理解历史代码规范、新的需求、写草稿、反复迭代这些中间过程都在自己的上下文窗口进行任务结束后只需要把生成的代码通过A2A返回给调度agent即可2这样调度agent的上下文只多了一份代码然后再把审查代码任务委托给审查agent去做审查agent自己去根据一些规则在自己的窗口去审查代码最终返回给调度agent的只有一份审查报告。每个agent承担自己的职责调度agent始终保持轻量这是多agent协作在上下文层面的核心收益。2、多agent之间怎么知道彼此是干什么的比如我们调度agent要把任务委托给生码agent那它就得先知道生码agent能做什么最简单的方法就是在调度agent中硬编码“生码agent”可以生成代码但这样的缺点是一旦生码agent能力一变调度agent的代码就需要改维护成本太高了。其实比较好的方案就是生码agent告诉调度agent自己可以做什么然后由调度agent自己来查这就是A2A协议中的Agent Card设计思路。每个a2a agent都会在一个约定位置发布一张JSON格式的名片(规范的路径是/.well-known/agent-card.json早期版是agent.json)在这个json文件中会写清楚自己叫什么、可以做哪类任务(skill列表)、支不支持流式返回、支不支持异步回调。所有想与它协作的agent都先去拿这张名片然后再决定要不要把任务委托给它。agent card中最关键的是Skill列表每个Skill描述一类能力比如“生成代码”、“审查代码”并带有示例输入。调度agent使用这些skill描述来做任务路由决策——“这个任务和哪个agent的哪个skill最匹配”。这种Agent Card机制让多Agent系统变得更加便捷比如我们要新加一个agent那就发布它的agent card调度agent就能自动发现和利用它完全不需要改调度agent代码。通过给调度agent进行静态配置或者通过注册中心的方式都可以让调度agent知道要去读哪些agent card。3、A2A中任务协作的基本单位A2A中任务协作的基本单位是Task。调度agent把一段任务委托给另一个agent就是创建一个task接收方执行这个task完成后把结果作为Task的产出artifacts(可以是文本、文件等)返回。Task 有完整的生命周期状态管理。一个Task刚被创建时是submitted状态表示已提交、等待处理。接收方开始执行后变为working状态最终根据执行结果进入completed或者failed状态。通知方式有两种一种是主动轮询调度agent定期调用接口查询任务状态一种是主动回调被调agent任务完成后主动回调通知结果。调度agent的视角很干净给agent B提交一个task定期检查这个task的状态等到completed时去取artifacts。整个过程中不需要知道B内部用了什么工具调用了几次LLM完全黑盒。4、A2A和MCP的关系Agent使用MCP来连接各种工具比如数据库、浏览器、代码执行器用Function Calling让LLM触发这些工具调用。而A2A解决的是agent之间需要分工协作时的问题。可以通过A2A来相互通信、委派任务、接收结果。相当于就是MCP解决的是agent连工具的问题A2A解决的事agent连别的agent的问题。MCP和A2A两个协议各管一个维度合在一起才能支撑起真正复杂的Agent系统。