智能体通信协议:MCP、A2A与ANP,构建智能体协作网络
本章将深入探讨智能体通信协议这一关键基础设施层。从单体智能体的局限性出发,解析为何需要通信协议,然后系统介绍三种主流协议:MCP(Model Context Protocol) 用于智能体与工具的标准化通信,A2A(Agent-to-Agent Protocol) 用于智能体间的点对点协作,ANP(Agent Network Protocol) 用于构建大规模智能体网络。通过对比三种协议的设计理念与HelloAgents的三层架构实现,帮助读者理解如何选择合适的协议解决实际问题。
在前面的章节中,我们构建了功能完备的单体智能体,它们具备推理、工具调用和记忆能力。然而,当我们尝试构建更复杂的AI系统时,自然会有疑问:如何让智能体与外部世界高效交互?如何让多个智能体相互协作?
这正是智能体通信协议要解决的核心问题。本章将为HelloAgents框架引入三种通信协议:MCP(Model Context Protocol) 用于智能体与工具的标准化通信,A2A(Agent-to-Agent Protocol) 用于智能体间的点对点协作,ANP(Agent Network Protocol) 用于构建大规模智能体网络。这三种协议共同构成了智能体通信的基础设施层。
通过本章的学习,您将掌握智能体通信协议的设计理念和实践技能,理解三种主流协议的设计差异,学会如何选择合适的协议来解决实际问题。
📊 全文知识框架图
一、为什么需要通信协议?
1.1 单体智能体的三大局限
回顾我们在之前构建的ReAct智能体,它已经具备了强大的推理和工具调用能力。让我们看一个典型的使用场景:
from hello_agents import ReActAgent, HelloAgentsLLM
from hello_agents.tools import CalculatorTool, SearchTool
llm = HelloAgentsLLM()
agent = ReActAgent(name="AI助手", llm=llm)
agent.add_tool(CalculatorTool())
agent.add_tool(SearchTool())
# 智能体可以独立完成任务
response = agent.run("搜索最新的AI新闻,并计算相关公司的市值总和")
这个智能体工作得很好,但它面临着三个根本性的限制:
| 限制 | 说明 |
|---|---|
| 工具集成的困境 | 每当需要访问新的外部服务(如GitHub API、数据库、文件系统),都必须编写专门的Tool类。这不仅工作量大,而且不同开发者编写的工具无法互相兼容 |
| 能力扩展的瓶颈 | 智能体的能力被限制在预先定义的工具集内,无法动态发现和使用新的服务 |
| 协作的缺失 | 当任务复杂到需要多个专业智能体协作时(如研究员+撰写员+编辑),只能通过手动编排来协调它们的工作 |
让我们通过一个更具体的例子来理解这些限制。假设你要构建一个智能研究助手,它需要访问GitHub、数据库、天气API等多种服务:
# 传统方式:手动集成每个服务
class GitHubTool(BaseTool):
"""需要手写GitHub API适配器"""
def run(self, repo_url):
# 大量的API调用代码...
pass
class DatabaseTool(BaseTool):
"""需要手写数据库适配器"""
def run(self, query):
# 数据库连接和查询代码...
pass
class WeatherTool(BaseTool):
"""需要手写天气API适配器"""
def run(self, location):
# 天气API调用代码...
pass
# 每个新服务都需要重复这个过程
agent.add_tool(GitHubTool())
agent.add_tool(DatabaseTool())
agent.add_tool(WeatherTool())
这种方式存在明显的问题:代码重复(每个工具都要处理HTTP请求、错误处理、认证等),难以维护(API变更需要修改所有相关工具),无法复用(其他开发者的工具无法直接使用),扩展性差(添加新服务需要大量编码工作)。
1.2 通信协议的核心价值
💡 通俗理解:通信协议就像互联网的TCP/IP协议——它让不同的设备能够相互通信,而不需要为每种设备编写专门的通信代码。
通信协议的核心价值在于,它提供了一套标准化的接口规范,让智能体能够以统一的方式访问各种外部服务,而无需为每个服务编写专门的适配器。
有了通信协议,上面的代码可以简化为:
from hello_agents.tools import MCPTool
# 连接到MCP服务器,自动获得所有工具
mcp_tool = MCPTool()
# 智能体通过统一的MCP接口访问所有服务
agent.add_tool(mcp_tool)
通信协议带来的变化是根本性的:
- 标准化接口:不同服务提供统一的访问方式
- 互操作性:不同开发者编写的工具可以无缝集成
- 动态发现:智能体可以在运行时发现新的服务
- 可扩展性:系统可以轻松添加新的功能模块
💡 通俗理解:通信协议就像是给智能体配备了一个“万能插座”——无论你接的是什么设备(文件系统、数据库、GitHub),只要它符合协议标准,智能体就能直接用,不需要为每个设备单独配一个转接头。
二、三种主流通信协议
智能体通信协议并非单一的解决方案,而是针对不同通信场景设计的一系列标准。本章以目前业界主流的三种协议——MCP、A2A和ANP为例进行实践。
2.1 MCP:智能体与工具的桥梁
MCP(Model Context Protocol) 由Anthropic团队提出,其核心设计理念是标准化智能体与外部工具/资源的通信方式。
💡 通俗理解:MCP就像是给AI智能体配备的“USB接口”——只要工具支持这个接口标准,智能体就能像插U盘一样即插即用。
MCP的设计哲学不仅是“标准化接口”,更重要的是上下文共享(context sharing) 。它不仅仅是RPC调用,而是让智能体和工具能够共享丰富的上下文信息。例如,当智能体访问代码仓库时,MCP服务器不仅提供文件内容,还能提供代码结构、依赖关系、提交历史等上下文信息,帮助智能体做出更智能的决策。
想象一下,你的智能体需要访问文件系统、数据库、GitHub、Slack等各种服务。传统做法是为每个服务编写专门的适配器,这不仅工作量大,而且难以维护。MCP通过定义统一的协议规范,让所有服务都能以相同的方式被访问。
MCP的完整交互流程:
一个典型的MCP交互流程是:用户问题 → Claude Desktop(Host)→ Claude模型分析 → 需要文件信息 → MCP Client连接 → 文件系统MCP Server → 执行操作 → 返回结果 → Claude生成回答 → 显示在Claude Desktop上。
在实际使用中,MCP客户端可以:
- 连接到MCP服务器(有多种连接方式)
- 查询可用工具(通过
list_tools()获取工具描述) - 调用工具
- 访问服务器提供的资源和提示模板
实战示例:使用GitHub MCP服务:
# 完整示例:使用 GitHub MCP 服务
# 注意:需要设置环境变量
# Windows: $env:GITHUB_PERSONAL_ACCESS_TOKEN="your_token_here"
# Linux/macOS: export GITHUB_PERSONAL_ACCESS_TOKEN="your_token_here"
from hello_agents.tools import MCPTool
# 创建 GitHub MCP 工具
github_tool = MCPTool(
server_command=["npx", "-y", "@modelcontextprotocol/server-github"]
)
# 1. 列出可用工具
print("可用工具:")
result = github_tool.run({"action": "list_tools"})
print(result)
# 2. 搜索仓库
print("\n搜索仓库:")
result = github_tool.run({
"action": "call_tool",
"tool_name": "search_repositories",
"arguments": {
"query": "AI agents language:python",
"page": 1,
"perPage": 3
}
})
print(result)
MCP vs 传统方式对比:
| 对比维度 | 传统方式 | MCP方式 |
|---|---|---|
| 集成方式 | 为每个服务手写适配器 | 统一协议,自动适配 |
| 代码量 | 大量重复代码 | 少量配置代码 |
| 维护成本 | API变更需逐个修改 | 只需维护协议层 |
| 可复用性 | 工具无法跨项目复用 | 服务可被任何MCP客户端使用 |
| 上下文共享 | 无 | 支持代码结构、依赖关系等丰富上下文 |
2.2 A2A:智能体间的对话
A2A(Agent-to-Agent Protocol) 由Google团队提出,其核心设计理念是实现智能体之间的点对点通信。
💡 通俗理解:如果说MCP是智能体的“USB接口”(连接工具),那A2A就是智能体的“微信”(连接其他智能体)。它让不同的AI能够互相“聊天”、分工协作。
与MCP关注智能体与工具的通信不同,A2A关注的是智能体之间如何相互协作。这种设计让智能体能够像人类团队一样进行对话、协商和协作。
A2A的设计哲学是“对等通信”(peer-to-peer communication) 。在A2A网络中,每个智能体既是服务提供者,也是服务消费者。智能体可以主动发起请求,也可以响应其他智能体的请求。这种对等的设计避免了中心化协调器的瓶颈,让智能体网络更加灵活和可扩展。
A2A的核心价值在于:
- 跨平台互操作性:不同框架开发的智能体可以相互通信
- 任务协作:智能体可以相互委托任务、共享结果
- 去中心化:无需中央协调器,智能体间直接通信
💡 通俗理解:A2A让不同公司、不同团队开发的AI能够像人类同事一样协同工作——你负责调研,我负责写作,他负责审核,大家各司其职又互通有无。
A2A在HelloAgents中基于Google官方的a2a-sdk实现,支持智能体间的能力发现(通过Agent Card机制)和任务委托。
2.3 ANP:智能体网络的基础设施
ANP(Agent Network Protocol) 是一个概念性的协议框架,目前由开源社区维护,尚未形成成熟生态。其核心设计理念是构建大规模智能体网络的基础设施。
如果说MCP解决的是“如何访问工具”,A2A解决的是“如何与其他智能体对话”,那么ANP解决的是“如何在大规模网络中发现和连接智能体”。
💡 通俗理解:ANP就像是智能体世界的“电话黄页+DNS服务器”——当网络中有成千上万个智能体时,一个智能体怎么知道谁可以提供它需要的服务?ANP就是解决这个“找谁帮忙”的问题。
ANP的设计哲学是“去中心化服务发现”(decentralized service discovery) 。在一个包含成百上千个智能体的网络中,如何让智能体能够找到它需要的服务?ANP提供了服务注册、发现和路由机制,让智能体能够动态地发现网络中的其他服务,而不需要预先配置所有的连接关系。
ANP的典型操作包括:
- 注册服务:智能体向网络注册自己提供的能力
- 发现服务:智能体查询网络中可用的服务
- 服务路由:将请求路由到提供相应服务的智能体
在HelloAgents中,ANP是框架自研的轻量级实现,提供服务发现和网络管理功能。
2.4 三种协议设计理念比较
| 对比维度 | MCP | A2A | ANP |
|---|---|---|---|
| 全称 | Model Context Protocol | Agent-to-Agent Protocol | Agent Network Protocol |
| 提出方 | Anthropic | 开源社区 | |
| 解决的问题 | 如何访问工具? | 如何与其他智能体协作? | 如何在大规模网络中发现服务? |
| 设计哲学 | 标准化接口 + 上下文共享 | 对等通信 | 去中心化服务发现 |
| 成熟度 | 相对成熟,生态较完善 | 逐步发展 | 概念阶段,尚未形成成熟生态 |
| 通俗类比 | 🔌 USB接口 | 💬 团队对话 | 📞 电话黄页 |
三、HelloAgents通信协议架构
3.1 三层架构设计
HelloAgents的通信协议架构采用三层设计,从底层到上层分别是:协议实现层、工具封装层和智能体集成层。
3.2 各层职责
| 层级 | 职责 | 核心组件 |
|---|---|---|
| 智能体集成层 | 智能体通过统一接口使用通信协议 | ReActAgent、SimpleAgent |
| 工具封装层 | 将协议能力封装为智能体可调用的工具,统一继承自BaseTool |
MCPTool、A2ATool、ANPTool |
| 协议实现层 | 实现具体的协议客户端,处理底层通信 | MCP Client、A2A Client(基于a2a-sdk)、ANP Client(自研) |
这种分层设计的优势在于:
- 关注点分离:每层只关注自己的职责
- 可替换性:协议实现可以独立升级,不影响上层
- 可扩展性:新增协议只需在协议层和工具层添加对应实现
3.3 基本功能体验
以下是三种协议的基本使用示例:
from hello_agents.tools import MCPTool, A2ATool, ANPTool
# 1. MCP:访问工具
mcp_tool = MCPTool()
result = mcp_tool.run({
"action": "call_tool",
"tool_name": "add",
"arguments": {"a": 10, "b": 20}
})
print(f"MCP计算结果: {result}") # 输出: 30.0
# 2. ANP:服务发现
anp_tool = ANPTool()
anp_tool.run({
"action": "register_service",
"service_id": "calculator",
"service_type": "math",
"endpoint": "http://localhost:8080"
})
services = anp_tool.run({"action": "discover_services"})
print(f"发现的服务: {services}")
# 3. A2A:智能体通信
a2a_tool = A2ATool("http://localhost:5000")
print("A2A工具创建成功")
四、综合案例:多智能体协作的智能文档助手
为了展示三种协议的协同工作,下面构建一个多Agent协作的智能文档助手:
业务目标:自动从GitHub搜索AI相关项目,并生成一份结构化文档报告。
团队分工:
| 角色 | 职责 | 使用的协议 |
|---|---|---|
| Agent1:GitHub搜索专家 | 通过MCP访问GitHub服务,搜索AI相关仓库 | MCP(智能体↔工具) |
| Agent2:文档生成专家 | 接收搜索结果,生成结构化报告 | A2A(智能体↔智能体) |
核心实现:
from hello_agents import SimpleAgent, HelloAgentsLLM
from hello_agents.tools import MCPTool
from dotenv import load_dotenv
load_dotenv()
print("="*70)
print("多Agent协作的智能文档助手")
print("="*70)
# Agent1: GitHub搜索专家(使用MCP访问GitHub)
github_tool = MCPTool(
server_command=["npx", "-y", "@modelcontextprotocol/server-github"]
)
search_agent = SimpleAgent(
name="GitHub搜索专家",
llm=HelloAgentsLLM(),
tools=[github_tool]
)
# Agent2: 文档生成专家(通过A2A接收数据)
doc_agent = SimpleAgent(
name="文档生成专家",
llm=HelloAgentsLLM()
)
# 工作流程:
# 1. Agent1搜索GitHub仓库(通过MCP)
# 2. 通过A2A的Agent Card机制发现对方能力,进行任务委托
# 3. Agent2生成最终报告
这个案例展示了三种协议的协同价值:
- MCP让Agent1能够标准化地访问GitHub服务
- A2A让两个智能体能够通过Agent Card机制发现对方能力,无缝传递任务和数据
- ANP(如需扩展到更大网络)可让更多智能体通过服务发现机制动态加入协作
五、核心概念速查表
| 术语 | 通俗解释 |
|---|---|
| 通信协议(Communication Protocol) | 智能体之间、智能体与工具之间通信的“通用语言”和“标准接口” |
| MCP(Model Context Protocol) | Anthropic提出的协议,让智能体像插USB一样访问各种工具和服务 |
| A2A(Agent-to-Agent Protocol) | Google提出的协议,让不同智能体像人类团队一样对话协作 |
| ANP(Agent Network Protocol) | 开源社区维护的概念性协议框架,解决大规模智能体网络中的服务发现与连接问题 |
| 协议实现层 | HelloAgents三层架构的底层,负责具体协议客户端实现 |
| 工具封装层 | HelloAgents三层架构的中间层,将协议能力封装为工具 |
| 智能体集成层 | HelloAgents三层架构的顶层,智能体通过统一接口使用通信协议 |
| 对等通信(Peer-to-Peer) | A2A的设计哲学,每个智能体既是服务提供者也是消费者 |
| 服务发现(Service Discovery) | ANP的核心功能,让智能体在网络中找到需要的服务 |
| 上下文共享(Context Sharing) | MCP的设计哲学之一,让智能体和工具共享丰富的上下文信息 |
六、思考题(帮助加深理解)
-
MCP、A2A和ANP三种协议分别解决了什么问题? 如果一个智能体系统只需要访问外部工具,应该使用哪种协议?如果需要多个智能体协作呢?如果需要构建大规模智能体网络呢?
-
为什么说MCP像“USB接口”,A2A像“团队对话”,ANP像“电话黄页”? 这些比喻分别对应了协议的什么特点?
-
HelloAgents的三层架构设计(协议实现层→工具封装层→智能体集成层)有什么好处? 如果去掉中间的工具封装层,会有什么问题?
-
在智能文档助手案例中,MCP和A2A是如何协同工作的? 如果还需要更多智能体加入(如审核专家、排版专家),ANP可以发挥什么作用?
-
三种协议中,MCP是目前相对成熟、使用较广泛的。 你认为A2A和ANP在未来会有怎样的发展?什么样的应用场景会推动它们的普及?
参考资料
-
Datawhale Hello-Agents 第十章《智能体通信协议》
https://datawhalechina.github.io/hello-agents/#/./chapter10/第十章 智能体通信协议 -
hello-agents/docs/chapter10/Chapter10-Agent-Communication-Protocols.md
https://github.com/datawhalechina/hello-agents/blob/main/docs/chapter10/Chapter10-Agent-Communication-Protocols.md
结语
在这一章中,我们系统学习了智能体通信协议这一关键基础设施:
- 为什么需要通信协议——单体智能体面临工具集成困境、能力扩展瓶颈和协作缺失三大局限,通信协议通过标准化接口解决了这些问题
- 三种主流协议——MCP(智能体↔工具,Anthropic)、A2A(智能体↔智能体,Google)、ANP(大规模网络服务发现,开源社区)
- HelloAgents三层架构——协议实现层→工具封装层→智能体集成层
- 综合案例——通过MCP+A2A协同,构建多智能体协作的智能文档助手
三种协议各有侧重,共同构成了智能体通信的完整基础设施层。MCP解决“如何访问工具”,A2A解决“如何与其他智能体对话”,ANP解决“如何在大规模网络中发现和连接智能体”。
掌握了这些协议的设计理念与实践技能,你就能够根据实际需求选择合适的协议,构建从单体智能体到多智能体协作网络的全方位解决方案。
本文参考:Datawhale《Hello-Agents》教程第十章《智能体通信协议》的内容框架与核心知识点。本文在忠实呈现该教程内容的基础上,为便于新手理解进行了通俗化改写和图表化呈现。
更多推荐


所有评论(0)