一、有哪些框架
这些框架简单来说,有两种,分为高代码平台和低代码平台。低代码平台通过可视化界面和拖拽式操作降低开发门槛,适合非技术用户或快速原型设计。代表性平台为 Coze,这是一个企业商业产品,提供直观的界面,允许用户通过配置构建 Agent,无需深入编码;还有 Dify,是半开源的 Agent 低代码平台,也被很多企业所采用;AutoGen Studio 则是微软推出,集成到 AutoGen 框架,提供低代码工具,适合企业用户快速部署多代理工作流。这些低代码平台的特点是开发周期短,易于上手,适合快速迭代或非开发者使用。局限性是定制性较弱,复杂需求可能受限,依赖平台提供的功能。
我们则主要聚焦于像 LangChain(LangGraph)、AutoGen(AG2)和 CrewAI 等高代码 Agent 开发平台来讲解 A2A 的实战。
6 大 Agent 开发框架:
1、AG2 / AutoGen
2、CrewAI
3、Google ADK (Agent Development Kit)
4、LangGraph
它是由 LangChain 团队开发的一个开源框架,专注于构建和优化基于语言模型(LLM)的多代理系统和图状工作流。于 2024 年初发布,LangGraph 旨在为开发者提供一种灵活、可视化且强大的工具,处理复杂任务的代理协作和状态管理,特别适用于需要动态决策和上下文跟踪的场景。目前,LangGraph 已发展成为 AI 开发社区中的重要工具,尤其在多智能体应用中表现出色。
LangGraph 的主要特点如下:图状工作流:通过有向图 (Directed Acyclic Graph, DAG) 设计工作流,允许任务以节点和边的形式定义,方便复杂逻辑的建模。状态管理:内置状态跟踪机制,确保代理间的上下文一致性,支持多轮对话和任务持续性。多代理协作:支持多个智能体按图定义的路径协作,每个智能体可执行特定任务或调用工具。工具集成:无缝对接 LangChain 生态的工具(如 SerpAPI、Wikipedia),以及自定义工具。动态路由:根据 LLM 输出或条件动态调整工作流路径,增强适应性。可视化支持:提供图形界面(如基于 NetworkX 的可视化),便于调试和优化。Python 开发:以 Python 为主要开发语言,易于集成现有项目。
LangGraph 深深嵌入 LangChain 生态,与 LangChain 的代理、内存和检索模块高度兼容。它还支持其他框架(如 CrewAI、AutoGen)的部分功能,增强了跨框架的互操作性。开发者可以通过 LangSmith 进行工作流的监控和评估。
5、LlamaIndex Agent
LlamaIndex Agent 是由 LlamaIndex 项目团队开发的一个开源 AI 代理框架,专为增强基于大型语言模型(LLM)的数据索引和检索任务而设计。自 2023 年底首次亮相以来,LlamaIndex Agent 已发展为一个强大的工具,特别适用于需要高效处理结构化和非结构化数据的应用场景,它在知识管理、问答系统和数据驱动的代理协作中表现出色。
LlamaIndex Agent 深深嵌入了 LlamaIndex 生态,与其数据连接器(支持 PDF、CSV、SQL 等)、索引器和查询引擎紧密协作。它还与 LangChain 和 CrewAI 等框架兼容,增强了多代理系统的互操作性。开发者可以通过 LlamaIndex 的可视化工具(如 Playground)进行调试和优化。LlamaIndex Agent 以其强大的数据索引和检索能力,成为处理知识密集型任务的理想选择。其模块化设计和多模态支持使其在教育、研究和企业应用中广受欢迎,尤其适合需要深度数据交互的场景。

LlamaIndex Agent 主要特点如下:
- 数据索引与检索:利用 LlamaIndex 的核心优势,构建高效的索引(如向量存储、文档图),支持快速检索和语义搜索。
- 代理增强:将 LLM 转化为智能代理,具备上下文感知和工具使用能力(如查询数据库、调用 API)。
- 工具集成:支持与 LangChain、OpenAI、Hugging Face 等生态工具无缝对接,扩展功能。
- 内存与上下文管理:提供短期和长期记忆机制,确保代理在多轮交互中保持一致性。
- 模块化设计:允许开发者自定义代理行为、索引结构和查询策略。
- 多模态支持:除了文本,还支持图像和表格数据,适用于多样化数据源。
- 优化性能:通过缓存和批处理提升查询效率,特别适合大规模数据集。
6、Semantic Kernel
Semantic Kernel (SK) 是一种由 Microsoft 开发的轻量级开源软件开发套件 (SDK),旨在帮助开发者将最新的大型语言模型 (LLM) 轻松集成到 C#、Python 或 Java 代码中。它作为高效的中介层,加速企业级解决方案的交付,受到大型企业的青睐。
这张图展示了 Semantic Kernel 的核心架构,通过将用户代码与插件、钩子与过滤器集成,结合最新的 AI 模型,支持灵活扩展和模型更新。其核心特性如下:
- 灵活性与模块化:支持多种 LLM(如 OpenAI、Azure OpenAI、Hugging Face),便于切换模型。
- 代理框架:构建模块化 AI 代理,支持工具 / 插件、记忆和规划功能。
- 多代理系统:协调复杂工作流,允许专业代理协作。
- 插件生态:通过原生代码、提示模板、OpenAPI 规范或模型上下文协议(MCP)扩展功能。
- 多模态支持:处理文本、视觉和音频输入。
- 企业级可靠性:1.0+ 版本在 C#、Python 和 Java 上提供支持,确保非破坏性更新。
- 安全与可观察性:提供遥测支持、钩子与过滤器,确保负责任的 AI 解决方案。
比较

这些 Agent 拥有一系列的通用性特征:
- 协议兼容性:所有 Agent 都通过 A2A(Agent-to-Agent)协议暴露服务,采用统一的 JSON-RPC 通信格式,支持同步和异步调用模式。
- 任务管理:所有 Agent 具备统一的任务状态管理机制(WORKING、INPUT_REQUIRED、COMPLETED),支持任务流式更新,以及错误处理和恢复机制。
- 会话管理:所有 Agent 基于 session_id 进行会话隔离,支持有状态持久化和多用户并发。
- 扩展性:支持插件化工具集成、模块化框架适配,以及标准化的配置管理。
二、A2A协议
1、A2A 和 MCP 是互补而非互斥关系
Agent2Agent(简称 A2A)协议应运而生,旨在为多 Agent 生态提供一套开放、标准、安全的互操作层,使不同厂商、不同平台上的 Agent 能够动态发现、调用并协同完成复杂任务,从而让 Agent 的生产力大幅上升,并优化成本。
MCP:提供垂直集成,将代理连接到工具和资源;
A2A:提供水平通信,将代理连接到其他代理。

2、A2A 的 5 大核心设计原则

3、A2A 协议的角色
这种设计使得 A2A 成为一个真正的 Agent-to-Agent 协议,而不仅仅是客户端 - 服务器架构的变种。

(1)用户(User)
最终用户(人类或服务),使用 Agent 系统完成任务。
(2)客户端(Client)
代表用户向远程 Agent 请求行动的实体。
需要注意的是,在 A2A 框架中,客户端(Client)通常也是一个具有一定决策能力 Agent。它代表用户行事 ,可以是应用程序、服务或另一个 AI Agent,负责选择合适的远程 Agent 来完成特定任务,管理与远程 Agent 的通信、认证和任务状态。
(3)远程 Agent(Remote Agent)
远程 Agent(Remote Agent)则是执行实际任务的 Agent,作为"黑盒"存在 ,提供特定领域的专业能力,通过 AgentCard 声明自己的技能和接口,保持内部工作机制的不透明性。
说明:
在实际应用中,我们可以看到多个 Agent 形成的网络,其中一个 Agent 可以同时是某些交互中的 Client,又在其他交互中作为 Remote Agent。例如,一个负责旅行规划的 Agent 可能作为 Client 向地图 Agent、酒店预订 Agent 和航班查询 Agent 发送请求,然后整合这些信息为用户提供完整的旅行方案。这种灵活的角色设计使得 A2A 协议能够支持复杂的 Agent 生态系统,实现 Agent 之间的专业分工和协作。
4、A2A 协议的核心对象
A2A 协议设计了一套完整的对象体系,包括 Agent Card、Task、Artifact 和 Message。它们用于实现不同 Agent 之间的高效协作,这些核心对象相互配合,共同构成了 A2A 的通信框架。
(1)Agent Card(Agent 名片)
每个支持 A2A 的远程 Agent 需要发布一个 JSON 格式的 "Agent Card",描述该 Agent 的能力和认证机制。Client 可以通过这些信息选择最适合的 Agent 来完成任务。
{
"name": "Google Maps Agent",
"description": "Plan routes, remember places, and generate directions",
"url": "https://maps-agent.google.com",
"provider": {
"organization": "Google",
"url": "https://google.com"
},
"version": "1.0.0",
"authentication": {
"schemes": "OAuth2"
},
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["text/plain", "application/html"],
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"skills": [
{
"id": "route-planner",
"name": "Route planning",
"description": "Helps plan routing between two locations",
"tags": ["maps", "routing", "navigation"],
"examples": [
"plan my route from Sunnyvale to Mountain View",
"what's the commute time from Sunnyvale to San Francisco at 9AM"
],
"outputModes": ["application/html", "video/mp4"]
}
]
}
(2)Task(任务)
Task 是 Client 和 Remote Agent 之间协作的核心概念。一个 Task 代表一个需要完成的任务,包含状态、历史记录和结果。Task 的具体状态列表如下:
- submitted(已提交)
- working(处理中)
- input-required(需要额外输入)
- completed(已完成)
- canceled(已取消)
- failed(失败)
- unknown(未知)
(3)Artifact(成果)
Artifact 是 Remote Agent 生成的任务结果。Artifact 可以有多个部分(parts),可以是文本、图像等。
(4)Message(消息)
Message 用于 Client 和 Remote Agent 之间的通信,可以包含指令、状态更新等内容。一个 Message 可以包含多个 parts,用于传递不同类型的内容。
5、A2A 协议工作流程
类似于MCP,
(1)能力发现:
每个 Agent 通过一个 JSON 格式的 "Agent Card" 公布自己能执行的能力(如检索文档、调度会议等)。
(2)任务管理
Agent 间围绕一个 "task" 对象展开协作。该对象有生命周期、状态更新和最终产物(artifact),支持即时完成与长跑任务两种模式。
(3)消息协作
双方可互发消息,携带上下文、用户指令或中间产物;消息中包含若干 "parts",每个 part 都指明内容类型,便于双方就 UI 呈现形式(如图片、表单、视频)进行协商。
(4)状态同步
通过 SSE 等机制,Client Agent 与 Remote Agent 保持实时状态同步,确保用户看到最新的进度和结果。
demo
(1)Client 发送任务
{
"jsonrpc": "2.0",
"id": 1,
"method": "tasks/send",
"params": {
"id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
"message": {
"role": "user",
"parts": [
{
"type": "text",
"text": "请分析下面5位候选人是否符合岗位需求,并推荐最佳人选。"
}
]
},
"metadata": {}
}
}
(2)Remote Agent 响应
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
"sessionId": "c295ea44-7543-4f78-b524-7a38915ad6e4",
"status": {
"state": "completed"
},
"artifacts": [
{
"name": "result",
"parts": [
{
"type": "text",
"text": "第二位候选人最符合你的需求!"
}
]
}
],
"metadata": {}
}
}