TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

智能体协议:MCP、A2A 与 NLWeb

MCP、A2A、NLWeb 三个协议分别解决智能体的哪一段连接:工具与数据、智能体之间、网站内容。读完能判断一个场景该用哪个。

这篇适合谁,读完能做什么

适合已经用过大模型、想弄清智能体怎么连接工具、数据、其他智能体和网站的读者。读完你应该能说清 MCP、A2A、NLWeb 各自解决哪一段连接问题,并能为一个具体场景选对协议。[1]

三个协议各管哪一段

智能体要做事,通常要碰到三类对象:工具和数据、另一个智能体、网站上的内容。MCP、A2A 和 NLWeb 分别对应这三种连接。[1]

MCP(Model Context Protocol,模型上下文协议)是一个开放标准,让应用用统一的方式向大模型提供上下文和工具。它像一个「通用转接头」,智能体可以用同样的方式连接不同的数据源和工具。[1]

A2A(Agent-to-Agent,智能体对智能体协议)负责智能体之间的通信与协作。它可以把不同机构、不同环境、不同技术栈的智能体连在一起,共同完成一项任务。[1]

NLWeb(Natural Language Web,自然语言网络)让网站本身支持自然语言交互,智能体可以发现并访问网站上的内容。[1]

MCP:让模型接上工具和数据

MCP 采用客户端—服务器架构,有三个角色。宿主(host)是大模型应用,比如 VSCode 这样的代码编辑器,它负责启动到 MCP 服务器的连接。客户端(client)是宿主里的组件,与每个服务器保持一对一的连接。服务器(server)是轻量的程序,对外暴露特定的能力。[1]

服务器提供三类能力原语:工具(tools)、资源(resources)和提示模板(prompts)。工具是智能体可以调用的离散动作或函数,比如天气服务的「获取天气」。服务器会在能力列表中公布每个工具的名称、描述,以及输入输出的 schema。资源是只读的数据,如文件内容、数据库记录或日志,可以是文本,也可以是图片或 PDF 这类二进制内容。提示模板是预先写好的提示,用于更复杂的工作流。[1]

MCP 对智能体有三点好处。[1]

  • 动态发现工具:智能体可以从服务器实时拿到可用工具的列表和说明。传统 API 集成通常要写死代码,接口一变就得改代码;MCP 主张「集成一次」。[1]
  • 跨模型通用:MCP 可以配合不同的大模型使用,换一个模型来比较效果更灵活。[1]
  • 统一的安全认证:MCP 包含标准的认证方法,比分别管理多个传统 API 的密钥和认证方式更省事。[1]

订机票的例子

机票预订的例子能看清 MCP 的工作流程:[1]

  1. AI 助手作为 MCP 客户端,连接到航空公司提供的 MCP 服务器。
  2. 助手问服务器有哪些工具,服务器回答有「搜索航班」和「预订航班」等工具。
  3. 用户说要查从波特兰到檀香山的航班。模型判断应调用「搜索航班」,把出发地和目的地作为参数传过去。
  4. MCP 服务器作为包装层,调用航空公司内部的预订接口,把 JSON 格式的航班信息返回给助手。
  5. 用户选定航班后,助手可以在同一个服务器上调用「预订航班」完成订票。[1]

A2A:让智能体之间协作

MCP 解决的是大模型连接工具,A2A 解决的是智能体彼此协作。[1]

A2A 有几个主要组件:[1]

  • Agent Card(智能体名片):类似 MCP 服务器的工具列表,写明智能体的名字、能完成的通用任务、一组带描述的技能、当前的端点地址,以及版本和能力,比如是否支持流式返回和推送通知。其他智能体或人据此判断什么时候该调用它。
  • Agent Executor(执行器):把用户对话的上下文传给远端智能体,让它理解要完成的任务。
  • Artifact(产物):远端智能体完成任务后,成果以 artifact 的形式返回,包含结果、已完成内容的描述和文本上下文。发送之后,连接会关闭,需要时再重新建立。
  • 事件队列(Event Queue):处理更新和消息。对于耗时较长的任务,它能防止智能体之间的连接在任务完成前被关掉。

A2A 的好处有三点:不同厂商、不同平台的智能体可以互相交流、共享上下文;每个 A2A 智能体可以自己选择用哪个大模型;认证直接集成在协议里。[1]

旅行规划的例子

用户对一个「旅行智能体」说,下周去檀香山,要订机票、酒店和租车。旅行智能体用自己的大模型判断需要分派任务,于是通过 A2A 连接「航空公司智能体」「酒店智能体」和「租车智能体」,它们分别由不同公司开发。每个下游智能体用自己的模型和工具完成那一部分,其中的工具本身也可以是 MCP 服务器。最后,旅行智能体把机票、酒店确认和租车结果汇总,用聊天的方式回复用户。[1]

NLWeb:让网站能用自然语言回答

NLWeb 由几个部分组成:[1]

  • NLWeb 应用:核心服务代码,负责处理自然语言问题,并连接平台的各个部分。可以把它理解为网站自然语言功能背后的引擎。
  • NLWeb 协议:一套基本规则,用于网站上的自然语言交互。它返回 JSON 格式的结果,常用 Schema.org 描述。
  • MCP 服务器:每个 NLWeb 部署同时也是一个 MCP 服务器,可以把 ask 之类的方法和数据共享给其他 AI 系统。
  • 嵌入模型(embedding):把网站内容转换成能表示语义的向量,便于比较和检索。使用者可以选择用哪种嵌入模型。
  • 向量数据库:存放内容的向量,查询时快速找出最相关的内容,并按相似度排序。NLWeb 支持 Qdrant、Snowflake、Milvus、Azure AI Search 和 Elasticsearch 等向量存储。

网站内容可以来自 Schema.org 标记的结构化数据,或 RSS 订阅。NLWeb 的工具读入这些数据,生成向量,存入本地或远程的向量数据库。[1]

假设一个旅行网站有机票列表、酒店介绍和旅游线路。访客在聊天框里输入:想找一家适合家庭、带泳池的檀香山酒店。NLWeb 一边把问题交给大模型理解,一边在向量数据库中检索。大模型再根据「家庭」「泳池」「檀香山」等条件,从网站真实的酒店目录中挑出最合适的几家,组织成自然语言回答。回答指向的是目录里真实存在的酒店,不会凭空编造。[1]

外部智能体也能接入同一个站点。NLWeb 本身是 MCP 服务器,外部旅行智能体可以连上去,调用 ask 方法,询问「这家酒店推荐的檀香山地区素食餐厅有哪些」,拿到结构化的 JSON 回复。[1]

怎么选协议

动手前可以先问自己三个问题:[1]

  1. 我的智能体要调用外部工具或读取外部数据吗?用 MCP。
  2. 我要让多个智能体,甚至不同机构的智能体,一起完成任务吗?用 A2A。
  3. 我的网站想让用户和智能体用自然语言查询内容吗?用 NLWeb。NLWeb 同时也是 MCP 服务器,智能体可以直接接入。

三者并不互斥。A2A 中的智能体可以再通过 MCP 服务器使用工具,NLWeb 站点本身又是 MCP 服务器。[1]

需要注意的地方

  • 智能体能否选对工具,取决于 MCP 服务器是否按规定公布了每个工具的名称、描述和输入输出 schema。[1]
  • 耗时长的 A2A 任务依赖事件队列,否则连接可能在任务完成前断开。[1]
  • NLWeb 只能回答网站已经载入数据库的内容。餐厅推荐的例子,前提是餐厅信息已经载入。[1]
  • 本文只讲三个协议的角色和分工,不涉及部署和代码实现。

下一步

想系统入门 MCP,可以看 MCP for Beginners 课程[1]。想了解 NLWeb 的实现,可以去它在 GitHub 上的仓库[1]。

本文改编自 Microsoft 开源课程《AI Agents for Beginners》第 11 课[1],原文以 MIT 许可证发布。

来源

  1. 1
    Using Agentic Protocols (MCP, A2A and NLWeb)Microsoft ai-agents-for-beginners (MIT)

引用本页: 智能体协议:MCP、A2A 与 NLWeb. TellWorld, https://www.tellworld.net/zh/practice/practice-agentic-protocols. 更新于 2026-11-14

相关动态