乐于分享
好东西不私藏

AI 智能体怎么"接入"万物?聊聊三种通信协议MCP、A2A、ANP

AI 智能体怎么"接入"万物?聊聊三种通信协议MCP、A2A、ANP

阅读时长:约 12 分钟

适合人群:用过 AI 工具想深入了解、或正在构建 AI 应用的你


上一章我们聊了上下文工程,知道了"把什么信息喂给 AI"很重要。

但还有一个问题没解决:AI 怎么去调用外部工具?多个 AI 怎么互相合作?

这就是本章的主题——智能体通信协议


一个具体的痛点

假设你想构建一个 AI 研究助手,它需要:

  • • 读取本地文件
  • • 查 GitHub 上的代码
  • • 发 Slack 消息
  • • 访问公司内部数据库

传统做法是为每个服务手写一个适配器类,每次接入新服务都要重写一堆 HTTP 请求、认证、错误处理代码。

这是在造重复的轮子,而且很难维护。

更麻烦的是,你用 OpenAI 写的工具,换成 Claude 就得重写格式——不同模型的 Function Calling 接口不一样。

通信协议就是来解决这个问题的。

它就像互联网的 TCP/IP 协议——无论你用什么设备,只要遵守同一套标准,就能互联互通。


三种协议,三个场景

目前业界主流的智能体通信协议有三种,分别解决不同的问题:

MCP(Model Context Protocol)Anthropic 提出。解决"智能体怎么访问外部工具"的问题。类比:USB-C 接口 —— 统一了所有设备的连接方式。

A2A(Agent-to-Agent Protocol)Google 提出。解决"多个智能体怎么互相合作"的问题。类比:点对点对话 —— 智能体之间可以直接交流,不需要中间人协调。

ANP(Agent Network Protocol)开源社区维护。解决"大规模智能体网络怎么互相发现"的问题。类比:互联网 DNS —— 你不需要记住每个服务的 IP,只需要说"我要找能做自然语言处理的智能体"。


怎么选?

  • • 智能体需要访问外部服务(文件、数据库、API)→ 用 MCP
  • • 需要多个智能体协作完成任务 → 用 A2A
  • • 构建大规模智能体生态,需要动态发现服务 → 用 ANP

MCP:智能体的"万能插头"

核心思路

MCP 定义了三层架构:

  • • Host(宿主):用户直接交互的界面,比如 Claude Desktop
  • • Client(客户端):负责与外部服务通信的中间层
  • • Server(服务器):提供具体功能的服务,比如文件系统、GitHub API

当你问 Claude "我桌面有哪些文档",背后发生的是:Claude → MCP Client → 文件系统 MCP Server → 返回文件列表 → Claude 生成回答。

MCP 提供三类能力

类型
说明
类比
Tools
可调用的函数,执行操作
动词:帮我查、帮我写
Resources
可读取的数据来源
名词:文件、数据库记录
Prompts
预定义的提示模板
说明书:按这个格式来

怎么用?

用 HelloAgents 框架接入 GitHub MCP 服务只需几行代码:

from hello_agents import SimpleAgentfrom hello_agents.tools import MCPToolagent = SimpleAgent(name="助手", ...)# 一行接入 GitHub 工具github_tool = MCPTool(    name="gh",    server_command=["npx", "-y", "@modelcontextprotocol/server-github"])agent.add_tool(github_tool)# 智能体自动获得所有 GitHub 能力response = agent.run("搜索关于 AI agents 的 Python 项目,前 5 个")

MCP 的"自动展开"机制:当你添加一个 MCP 工具到智能体,它会自动把服务器提供的所有工具展开为独立工具。比如一个 GitHub MCP 服务器,会自动展开为 gh_search_repositoriesgh_create_issuegh_get_file 等十几个工具,智能体可以像调用普通函数一样使用它们。

MCP vs Function Calling

很多人会问:我已经在用 Function Calling 了,为什么还需要 MCP?

它们不是竞争关系,而是互补的:

  • • Function Calling 是模型的能力:理解"什么时候该调用函数,怎么生成参数"
  • • MCP 是工程基础设施:定义"工具怎么描述、怎么调用、怎么返回结果"

类比:Function Calling 是你学会了"打电话"这项技能,MCP 是全球统一的"电话通信标准"。

丰富的社区生态

MCP 最大的优势是社区生态。你不用自己写工具适配器,直接用现成的:

  • • 官方服务器:文件系统、GitHub、PostgreSQL、Slack、Google Drive...
  • • 社区服务器:Playwright(浏览器自动化)、Obsidian、Jira、Notion...

超过数百个 MCP 服务器可以直接使用,覆盖绝大多数常见场景。


A2A:智能体之间的"对话"

为什么需要 A2A?

当任务复杂到需要多个专家协作——比如"研究员收集资料 → 撰写员写文章 → 编辑审阅优化"——传统的"星型拓扑"(所有请求都经过一个中心协调器)会产生三个问题:

  • • 单点故障:协调器挂了,整个系统瘫痪
  • • 性能瓶颈:所有流量都走中心节点
  • • 扩展困难:加个新智能体就要改中心逻辑

A2A 采用点对点(P2P)架构,智能体之间直接通信,没有中心节点。

核心抽象:任务 + 工件

A2A 的核心是两个概念:

  • • Task(任务):一个有生命周期的工作单元,从创建 → 执行中 → 完成/失败
  • • Artifact(工件):任务产出的成果,比如一篇文章、一份分析报告

这让多个智能体可以协商任务、追踪进度、传递成果。

实战:三智能体客服系统

# 技术专家智能体(运行在 6000 端口)tech_expert = A2AServer(name="tech_expert")@tech_expert.skill("answer")def answer_tech(text): ...# 销售顾问智能体(运行在 6001 端口)sales_advisor = A2AServer(name="sales_advisor")# 接待员智能体:接到问题,自动判断转给谁receptionist = SimpleAgent(name="接待员", ...)receptionist.add_tool(A2ATool(agent_url="http://localhost:6000"))receptionist.add_tool(A2ATool(agent_url="http://localhost:6001"))

客户问技术问题 → 接待员调用技术专家;问价格 → 转给销售顾问。每个智能体专注自己的领域,互不干扰。


ANP:智能体的"互联网"

场景:成百上千个智能体

当一个系统里有几百个智能体(自然语言处理、图像识别、数据分析、任务调度...),每次启动都手动配置"谁能连谁"是不现实的。

ANP 提供了:

  • • 服务注册:智能体启动时把自己的能力注册到网络
  • • 服务发现:需要某种能力时,动态查找谁能提供
  • • 智能路由:多个智能体都能处理时,选负载最低的那个

工作机制

ANP 的核心是 DID(去中心化身份标识)。每个智能体有自己的 DID,就像每个人有身份证。

整个流程:

  1. 1. 智能体 A 通过发现服务找到能处理任务的智能体 B
  2. 2. A 用私钥签名请求,B 用 A 的公钥验证身份
  3. 3. 验证通过后,双方按标准格式交换数据

这套机制让智能体可以在互联网上安全、自主地寻找合作伙伴,不需要预先配置所有连接。


把三层协议组合起来

三种协议构成完整的智能体通信栈:

层次
协议
解决的问题
网络层
ANP
如何在大规模网络中发现服务
协作层
A2A
多个智能体如何点对点通信
工具层
MCP
单个智能体如何访问外部工具

在 HelloAgents 框架里,三种协议统一封装成 Tool 接口:

from hello_agents.tools import MCPTool, A2ATool, ANPTool# 三种协议,统一的 add_tool 接口agent.add_tool(MCPTool(...))   # 接入外部服务agent.add_tool(A2ATool(...))   # 连接其他智能体agent.add_tool(ANPTool(...))   # 接入智能体网络

动手:创建自己的 MCP 服务器

你不只是协议的消费者——也可以自己创建 MCP 服务器,让全世界的智能体使用你封装的能力。

一个天气查询 MCP 服务器

from hello_agents.protocols import MCPServerweather_server = MCPServer(name="weather-server")def get_weather(city: str) -> str:    """获取指定城市的当前天气"""    # 调用天气 API...    return json.dumps(weather_data)def list_supported_cities() -> str:    """列出支持的城市"""    return json.dumps({"cities": ["北京", "上海", ...]})weather_server.add_tool(get_weather)weather_server.add_tool(list_supported_cities)weather_server.run()

写完后,可以上传到 Smithery(MCP 服务器的官方市场),其他开发者可以一键安装你的服务。

这就像开源社区的精髓——你贡献一个 MCP 工具,全世界的 AI 应用都可以使用。


小结

本章介绍了智能体通信的三层架构:

从"手写适配器"到"标准化协议",是 AI 应用工程化的必经之路。

  • • MCP:给智能体装上"USB-C 万能接口",一次适配,到处可用
  • • A2A:让多个智能体像团队一样点对点协作,没有单点瓶颈
  • • ANP:在大规模网络中自动发现和路由,构建智能体的"互联网"

下一章,我们将进入多智能体系统,学习如何构建更复杂的协作网络——让多个专业智能体像人类团队一样协同工作。


本文内容整理自 Datawhale《Hello Agents》

觉得有收获?点个赞告诉我 👇