智能体通信协议
├── 核心问题
│ ├── 智能体与外部世界高效交互
│ └── 多个智能体相互协作
├── 三种核心协议
│ ├── MCP(Model Context Protocol)
│ │ ├── 定位:智能体与工具的标准化通信
│ │ ├── 设计理念:标准化智能体与外部工具/资源的通信方式,基于“上下文共享”
│ │ ├── 架构:Host(宿主层)、Client(客户端层)、Servers(服务器层)
│ │ ├── 核心能力:Tools(主动执行操作)、Resources(被动提供数据)、Prompts(提供模板)
│ │ ├── 传输方式:Memory Transport(测试)、Stdio Transport(本地开发)、HTTP/SSE/StreamableHTTP(远程/生产)
│ │ └── 应用:通过MCPTool集成到智能体,自动展开为独立工具供调用
│ ├── A2A(Agent-to-Agent Protocol)
│ │ ├── 定位:智能体间的点对点协作
│ │ ├── 设计理念:实现智能体对等通信,无中心化协调器
│ │ ├── 特点:每个智能体既是服务提供者也是消费者,支持主动请求与响应
│ │ └── 应用:通过A2ATool实现智能体间直接对话与协作
│ └── ANP(Agent Network Protocol)
│ ├── 定位:构建大规模智能体网络的基础设施
│ ├── 设计理念:去中心化服务发现,支持动态发现和连接智能体
│ ├── 核心功能:服务注册、服务发现、路由机制
│ └── 应用:通过ANPTool实现大规模智能体网络的管理与通信
├── 协议选择依据
│ ├── 访问外部服务(文件、数据库等)→ 选MCP
│ ├── 多个智能体协作 → 选A2A
│ └── 构建大规模智能体生态 → 选ANP
└── HelloAgents框架实现
├── 三层架构
│ ├── 协议实现层:MCP(基于FastMCP)、A2A(基于a2a-sdk)、ANP(自研轻量实现)
│ ├── 工具封装层:MCPTool、A2ATool、ANPTool(均继承自BaseTool)
│ └── 智能体集成层:通过Tool System与智能体(ReActAgent等)集成
└── 核心优势:标准化接口、互操作性、动态发现、可扩展性
在构建复杂 AI 系统时,单体智能体面临三大限制:
工具集成困境:访问新外部服务需编写专门 Tool 类,兼容性差
能力扩展瓶颈:能力局限于预定义工具集,无法动态发现新服务
协作缺失:多智能体协作需手动编排,效率低下
通信协议的核心价值在于提供标准化接口,实现:
标准化接口:统一访问各种外部服务的方式
互操作性:不同开发者的工具可无缝集成
动态发现:智能体运行时可发现新服务和能力
可扩展性:轻松添加新功能模块
1. MCP(Model Context Protocol)
定位:智能体与工具的标准化通信
设计理念:标准化智能体与外部工具 / 资源的通信方式,基于 "上下文共享"
核心特点
:
不仅是 RPC 协议,还支持丰富的上下文信息共享
采用 Host、Client、Servers 三层架构
提供三大核心能力:Tools(主动执行操作)、Resources(被动提供数据)、Prompts(提供模板)
与 Function Calling 的差异
:
Function Calling 是模型的能力,解决 "如何调用"
MCP 是基础设施协议,解决 "如何连接",实现跨模型兼容
2. A2A(Agent-to-Agent Protocol)
定位:智能体间的点对点协作
设计理念:实现智能体对等通信,无中心化协调器
核心特点
:
每个智能体既是服务提供者也是消费者
支持主动请求与响应
避免中心化瓶颈,网络更灵活可扩展
3. ANP(Agent Network Protocol)
定位:构建大规模智能体网络的基础设施
设计理念:去中心化服务发现,支持动态发现和连接智能体
核心特点
:
提供服务注册、发现和路由机制
适用于成百上千智能体组成的大规模网络
无需预先配置所有连接关系
协议选择依据
访问外部服务(文件、数据库等)→ 选 MCP
多个智能体协作 → 选 A2A
构建大规模智能体生态 → 选 ANP
采用三层设计架构:
协议实现层:三种协议的具体实现
MCP:基于 FastMCP 库
A2A:基于 Google 官方 a2a-sdk
ANP:自研轻量级实现
工具封装层:将协议封装为统一 Tool 接口
MCPTool、A2ATool、ANPTool 均继承自 BaseTool
提供一致的run()方法,简化调用
智能体集成层:智能体与协议的集成点
所有智能体通过 Tool System 使用协议工具
无需关心底层协议细节
1. MCP 客户端使用
import asyncio
from hello_agents.protocols import MCPClient
async def connect_to_server():
# 连接到社区提供的文件系统服务器
client = MCPClient([
"npx", "-y",
"@modelcontextprotocol/server-filesystem",
"." # 指定根目录
])
async with client:
# 发现可用工具
tools = await client.list_tools()
print(f"可用工具: {[t['name'] for t in tools]}")
# 调用工具
result = await client.call_tool("read_file", {"path": "README.md"})
print(f"文件内容:{result}")
asyncio.run(connect_to_server())
2. MCP 传输方式
MCP 支持多种传输方式,适应不同场景:
Memory Transport:用于测试,无需实际服务器
Stdio Transport:本地开发,通过标准输入输出通信
HTTP Transport:生产环境,远程服务通信
SSE Transport:实时通信、流式处理
StreamableHTTP Transport:双向流式通信
# 不同传输方式的使用示例
from hello_agents.tools import MCPTool
# 1. 内存传输(测试用)
mcp_tool = MCPTool()
# 2. 标准输入输出传输(本地开发)
mcp_tool = MCPTool(server_command=["python", "my_mcp_server.py"])
# 3. 社区服务器(npx方式)
mcp_tool = MCPTool(server_command=["npx", "-y", "@modelcontextprotocol/server-filesystem", "."])
3. 在智能体中使用 MCP 工具
MCPTool 具有自动展开特性,会将服务器提供的工具自动展开为独立工具:
from hello_agents import SimpleAgent, HelloAgentsLLM
from hello_agents.tools import MCPTool
agent = SimpleAgent(name="助手", llm=HelloAgentsLLM())
# 添加MCP工具(自动展开为多个独立工具)
mcp_tool = MCPTool(name="calculator")
agent.add_tool(mcp_tool)
# 智能体可直接使用展开后的工具
response = agent.run("计算 25 乘以 16")
print(response) # 输出:25 乘以 16 的结果是 400
智能体通信协议解决了工具集成、能力扩展和多智能体协作的核心问题
MCP、A2A、ANP 三种协议分别针对不同场景,互为补充
HelloAgents 框架通过三层架构实现了协议的标准化集成
MCP 协议作为应用最成熟的协议,提供了灵活的工具访问能力和多种传输方式
实际应用中应根据具体需求选择合适的协议,并利用框架提供的工具封装简化开发
通过掌握这些通信协议,能够构建更灵活、可扩展、协同工作的智能体系统,突破单体智能体的能力边界。
ps:原文为md格式,作者不想调了
学习途径:https://github.com/datawhalechina/hello-agents/tree/main/docs