A2A中常见的Agent协议

我们先看下Agent及相关实现。在最近几十年,互联网的发展从原本的信息网络发展为了行动网络。在行动网络中,最为重要的特点就是由原本人来进行操作获取到信息的步骤转变为了智能体自主驱动来完成任务,常见的例子就是Manus。

而Manus就是一个常见的Agent,除了这个典型之外,还有着很多厂家再跟进,在构造Agent,不同的Agent有些可以自主完成任务,有的需要人类来进行指导完成,但都可以统称为Agent。

单一的Agent框架如下

Agent = LLM + 记忆能力 + 规划能力(反复思考) + 工具执行能力

但就目前来看,Agent在垂类领域有所发展,但是对于通用性的Agent,并不是说会很快的出现,后续几年还是只能让Agent先为某一方面进行工作。并逐步扩展到全部方向。

伴随着Agent的发展,业界也提供了不同的开发平台框架,供开发人员使用。

对于这类框架来说,可以分为两类,一类是高代码平台,一类是低代码平台,低代码平台可以通过可视化的界面和拖拽式的操作来降低门槛,常见的就是Coze,Dify。而高代码的平台则是需要依赖于编程语言 Python来实现,可以更加灵活,更加的定制化。也是我们的学习重点,诸如LangGraph,AG2,CrewAI这类框架。

我们依次看下:

  1. AG2/AutoGen

第一个Agent是开源框架AutoGen,其由微软推出,是一个通过多个AI代理对话协作解决复杂问题的框架。

其提供灵活的工具链,可以自定义智能体,任务分解和对话编排。

IMG_256

支持单一Agent构造和后续的多Agent组合构造。

不过后续AutoGen因为核心团队和微软分歧,核心团队出走并产生了AG2。

两者之间出现不同方向的发展

微软 AutoGen,趋向于企业级解决方案,利用低代码特性来吸引非开发者。

AG2坚持开源,更加适合研究者和开发者试验。

  1. CrewAI

这是一个开源项目,目的是为了开发者提供直观的多智能体框架,适合原型开发和小型项目,核心概念是模仿人类团队进行分工协作。常见的构成如下

IMG_256

在CrewAI之中,分为了两种工作模式,Crew模式和Flows模式,左边是Crew模式,强调多代理协同,右侧是Flows模式,更加固定,输出更加精准,更加符合规范。

其具有高性能,灵活低级定制,强大社区的特点,再适合中小项目方面非常具有优势。

  1. Google ADK

Google Agent Development Kit 是Google 提出的开源框架,基于Google 内部开发,旨在简化AI Agent和多Agent系统的开发,部署,评估。

通过简单的pip install google-adk 就可以进行相关的代码开发,比起项目开发,其利用高度封装的SDK,做到了更加像是代码书写。

其利用Google Cloud生态,将Gemini模型和Vertex AI进行结合,并且支持模型上下文协议(MCP)和A2A协议。

  1. LangGraph

这是基于LangChain团队开发的一个开源框架。

专注于构建和优化基于模型的多代理和图形工作流,为开发者提供一种灵活且强大的工具。目前LangGraph已经成为了AI开发社区中的重要工具了。

其具有一定的特点,诸如图形工作流,支持有向图DAG的方式设计工作流,支持状态管理(内部具有状态追踪机制),支持多代理协作(多个智能体按照图定义的路径协作),支持工具集成(无缝对接LangChain生态的工具),支持动态路由。并采用Python作为主要开发语言。

由于其对于其他框架的高兼容性,所以广受好评。

  1. LlamaIndex Agent

其是专门为基于大语言模型LLM的数据索引和检索任务而设计的框架,可以高效处理结构化和非结构化的数据。

IMG_256

其特点和我们上面说的一样,支持高效的建立索引,并进行快速检索操作,将LLM转换为智能代理,具备上下文感知和工具使用能力,支持和LangChain以及OpenAI的对接。提供模块化设计,支持自定义代理行为。支持多模态数据源输入。

由于其提供了多种数据源连接器,还可以和LangChain等框架兼容,增强了多代理系统的互操作性,非常适合深度数据交互的场景。

  1. Semantic Kernel

一个微软开发的轻量级开源软件开发套件,支持开发者将最新的LLM集成到Python或者Java代码之中,作为高效的中介层,加速企业级解决方案的交付,受到大型企业的青睐。

IMG_256

其支持多种LLM,并且可以构建模块化AI代理,增加多代理系统,并提供MCP功能接入插件。

而回归到A2A示例代码库之中

所有Agent都遵循一个统一的架构模式,包含以下的核心组件

agent.py

task_manager.py

_main.py

pyproject.toml

其中所有的Agent都实现了通用的接口

class AgentBase:

SUPPORTED_CONTENT_TYPES = [‘text’, ‘text/plain’] # 支持的内容类型

def invoke(self, query: str, session_id: str) -> dict[str, Any]:

“””同步调用接口”””

pass

async def stream(self, query: str, session_id: str) -> AsyncIterable[dict[str, Any]]:

“””异步流式调用接口”””

pass

并且要求所有的Agent都返回标准的响应格式

{

‘is_task_complete’: bool, # 任务是否完成

‘require_user_input’: bool, # 是否需要用户输入

‘content’: str, # 响应内容

‘parts’: list, # 响应部分(可选)

‘data’: dict # 结构化数据(可选)

}

通过统一的接口,来将不同的框架实现的Agent来进行了统一管理,可以互相通信,协同完成任务。

对应的诸如

Google ADK Agent Google ADK 实现了负责报销处理的Agent
LangGraph Agent LangGraph 实现了负责货币转换的Agent
CrewAI Agent CrewAI 实现了负责图像生成的Agent
LlamaIndex Agent LlamaIndex 实现了负责文档聊天的Agent
Marvin Agent Marvin 实现了负责信息提取的Agent
MindsDB Agent MindsD 实现了负责企业数据的Agent
Semantic Kernel Agent Sematic Kernel 实现了旅行助手的Agent
AG2 Agent AG2 实现了MCP集成的Agent

利用统一的交互协议,实现了A2A之间的交互。

所有Agent都拥有统一的任务管理机制

支持了会话管理

那么最后总结一下,我们介绍了什么是Agent,并说明了Agent开发框架,简单说明了不同框架间的区别。但无论什么框架,都具有框架无关的统一交互标准。

所有框架都通过A2A来进行标准化集成,使得不同框架的Agent可以彼此互相通信。