AI 学习资料 · AI 智能体入门(精选 9 课)
第 11 课 使用智能体协议(MCP、A2A 和 NLWeb)
随着 AI 智能体的使用越来越广,人们越来越需要一些协议来保证标准化和安全,并支持开放创新。本课介绍为满足这一需求而出现的三种协议:模型上下文协议(MCP)、智能体间协议(A2A)和自然语言网页(NLWeb)。
介绍
本课内容包括:
- MCP 如何让 AI 智能体访问外部工具和数据,完成用户的任务。
- A2A 如何让不同的 AI 智能体之间相互通信、协作。
- NLWeb 如何给任意网站加上自然语言界面,让 AI 智能体能够发现网站内容并与之交互。
学习目标
- 认识 MCP、A2A 和 NLWeb 在 AI 智能体领域的核心用途和优势。
- 解释每种协议如何促进 LLM、工具和其他智能体之间的通信与交互。
- 理解每种协议在构建复杂智能体系统时各自扮演的角色。
模型上下文协议
模型上下文协议(Model Context Protocol,MCP)是一个开放标准,为应用向 LLM 提供上下文和工具规定了统一的方式。它相当于一个“万能转接头”,让 AI 智能体能以一致的方式连接各种数据源和工具。
下面来看 MCP 由哪些部分组成、与直接调用 API 相比有什么好处,以及 AI 智能体使用 MCP 服务器的一个例子。
MCP 核心组件
MCP 采用客户端-服务器架构,核心组件包括:
- Host(宿主):发起与 MCP 服务器连接的 LLM 应用(例如 VSCode 这样的代码编辑器)。
- Client(客户端):宿主应用中的组件,与服务器保持一对一的连接。
- Server(服务器):对外提供特定能力的轻量级程序。
协议定义了三种核心要素,也就是 MCP 服务器能提供的三类能力:
- Tools(工具):AI 智能体可以调用、用来执行某个动作的独立操作或函数。例如,天气服务可以提供“获取天气”工具,电商服务器可以提供“购买商品”工具。MCP 服务器会在能力清单中公布每个工具的名称、描述和输入/输出 Schema。
- Resources(资源):MCP 服务器可以提供的只读数据或文档,客户端按需获取。例如文件内容、数据库记录或日志文件。资源可以是文本(如代码或 JSON),也可以是二进制文件(如图片或 PDF)。
- Prompts(提示词):预先定义好的模板,提供推荐的提示词,用来支持更复杂的工作流程。
MCP 的优势
MCP 给 AI 智能体带来了明显的好处:
- 动态发现工具:智能体可以从服务器动态获取可用工具的列表,以及每个工具用途的说明。传统 API 则往往要把集成写死在代码里,API 一有变动就得改代码。MCP 提供“一次集成”的方式,适应性更强。
- 跨 LLM 互通:MCP 可以配合不同的 LLM 使用,便于更换核心模型、比较哪个效果更好。
- 标准化的安全机制:MCP 有一套标准的身份验证方式,接入更多 MCP 服务器时更容易扩展。这比为各种传统 API 分别管理不同的密钥和认证方式要简单。
MCP 示例
假设用户想通过一个基于 MCP 的 AI 助手预订机票。
- 连接:AI 助手(MCP 客户端)连接到航空公司提供的 MCP 服务器。
- 发现工具:客户端问航空公司的 MCP 服务器:“你有哪些可用的工具?”服务器回复“搜索航班”“预订航班”等工具。
- 调用工具:你对 AI 助手说:“帮我搜一下从波特兰到檀香山的航班。”AI 助手借助它的 LLM,判断需要调用“搜索航班”工具,并把相关参数(出发地、目的地)传给 MCP 服务器。
- 执行与响应:MCP 服务器充当一层封装,实际去调用航空公司内部的预订 API,拿到航班信息(例如 JSON 数据)后发回给 AI 助手。
- 后续交互:AI 助手把航班选项展示给你。你选好航班后,助手可能会调用同一台 MCP 服务器上的“预订航班”工具,完成预订。
智能体间协议(A2A)
MCP 关注的是把 LLM 连接到工具,而智能体间协议(Agent-to-Agent,A2A)更进一步,让不同的 AI 智能体之间能够通信和协作。A2A 能把来自不同组织、不同环境和不同技术栈的 AI 智能体连接起来,共同完成一项任务。
下面来看 A2A 的组成部分和优势,以及它在我们的旅行应用中可以怎样使用。
A2A 核心组件
A2A 的重点是让智能体之间能够通信,并协同完成用户任务中的某个子任务。协议的每个组件都为此服务:
智能体卡片(Agent Card)
与 MCP 服务器公布工具列表类似,智能体卡片包含:
- 智能体的名称。
- 它所完成的一般任务的描述。
- 具体技能的列表及说明,帮助其他智能体(甚至人类用户)了解在什么时候、为什么要调用这个智能体。
- 智能体当前的端点 URL。
- 智能体的版本和能力,例如是否支持流式响应和推送通知。
智能体执行器(Agent Executor)
智能体执行器负责把用户对话的上下文传给远程智能体,远程智能体需要这些信息才能理解要完成什么任务。在 A2A 服务器中,智能体用自己的大语言模型(LLM)解析收到的请求,并用自己的内部工具执行任务。
工件(Artifact)
远程智能体完成请求的任务后,它的工作成果会以工件的形式生成。工件包含智能体的工作结果、对已完成内容的描述,以及通过协议传递的文本上下文。工件发出之后,与远程智能体的连接就会关闭,直到再次需要它。
事件队列(Event Queue)
这个组件用于处理状态更新和传递消息。在生产环境的智能体系统中,它尤其重要:任务可能要花较长时间才能完成,事件队列能防止智能体之间的连接在任务完成前就被关闭。
A2A 的优势
- 更好的协作:让不同厂商、不同平台的智能体能够互相交互、共享上下文、协同工作,使过去彼此割裂的系统之间也能顺畅地自动化协作。
- 灵活选择模型:每个 A2A 智能体都可以自行决定用哪个 LLM 来处理请求,因此每个智能体都能用上优化或微调过的模型,不像某些 MCP 场景那样只连着一个 LLM。
- 内置身份验证:身份验证直接集成在 A2A 协议中,为智能体之间的交互提供可靠的安全框架。
A2A 示例
我们把旅行预订的场景扩展一下,这次用 A2A 来实现。
- 用户向多智能体系统提出请求:用户与一个作为 A2A 客户端的“旅行智能体”交互,比如说:“帮我订一趟下周去檀香山的完整行程,包括机票、酒店和租车。”
- 旅行智能体负责编排:旅行智能体收到这个复杂请求后,用它的 LLM 对任务进行推理,判断需要与其他专职智能体协作。
- 智能体之间通信:旅行智能体通过 A2A 协议,连接下游的智能体,比如由不同公司开发的“航空公司智能体”“酒店智能体”和“租车智能体”。
- 委派并执行任务:旅行智能体向这些专职智能体发送具体任务(例如“查找飞往檀香山的航班”“预订酒店”“租一辆车”)。每个专职智能体都运行自己的 LLM,使用自己的工具(这些工具本身可能就是 MCP 服务器),完成各自负责的那部分预订。
- 汇总回复:所有下游智能体完成任务后,旅行智能体把结果(航班详情、酒店确认、租车订单)汇总起来,以聊天的形式给用户一个完整的回复。
自然语言网页(NLWeb)
长期以来,网站一直是用户在互联网上获取信息和数据的主要途径。
下面来看 NLWeb 的组成部分和优势,并以我们的旅行应用为例,看看 NLWeb 是怎么工作的。
NLWeb 的组成部分
- NLWeb 应用(核心服务代码):处理自然语言问题的系统。它把平台的各个部分连接起来,生成回复。可以把它看作驱动网站自然语言功能的引擎。
- NLWeb 协议:网站进行自然语言交互的一套基本规则。它以 JSON 格式返回回复(通常使用 Schema.org)。它的目的是为“AI 网络”打下一个简单的基础,就像 HTML 让人们能够在网上分享文档一样。
- MCP 服务器(模型上下文协议端点):每个 NLWeb 部署同时也是一台 MCP 服务器。这意味着它可以与其他 AI 系统共享工具(例如
ask方法)和数据。实际效果是,网站的内容和功能可以被 AI 智能体使用,网站也就成了更大的“智能体生态”的一部分。 - 嵌入模型:这类模型用来把网站内容转换成叫作向量(嵌入)的数值表示。向量以计算机能够比较和搜索的方式记录内容的含义。向量存放在专门的数据库里,用户可以自行选择使用哪个嵌入模型。
- 向量数据库(检索机制):这个数据库存放网站内容的嵌入。有人提问时,NLWeb 会查询向量数据库,快速找到最相关的信息,给出一份按相似度排序的候选答案列表。NLWeb 支持多种向量存储系统,例如 Qdrant、Snowflake、Milvus、Azure AI Search 和 Elasticsearch。
NLWeb 示例
编者注:图中“查找家庭酒店带游泳池的”是机器翻译的语序错误,原意是“查找带游泳池、适合家庭的酒店”;“架构/RSS”中的“架构”指 Schema(Schema.org 结构化数据)。
再来看我们的旅行预订网站,这次它由 NLWeb 驱动。
- 数据摄取:旅行网站现有的产品目录(例如航班列表、酒店介绍、旅游套餐)用 Schema.org 格式标注,或通过 RSS 订阅源载入。NLWeb 的工具读取这些结构化数据,生成嵌入,存入本地或远程的向量数据库。
- 自然语言查询(人类用户):用户访问网站时不用在菜单里一层层找,而是在聊天界面输入:“帮我找一家下周在檀香山、带泳池、适合家庭入住的酒店。”
- NLWeb 处理:NLWeb 应用收到这条查询,把它发给 LLM 去理解,同时在向量数据库中搜索相关的酒店信息。
- 准确的结果:LLM 帮助解读数据库的搜索结果,按“适合家庭”“有泳池”“在檀香山”这几个条件找出最匹配的酒店,再组织成自然语言回复。关键在于,回复引用的是网站目录中真实存在的酒店,避免编造信息。
- 与 AI 智能体交互:由于 NLWeb 同时是一台 MCP 服务器,外部的 AI 旅行智能体也可以连接这个网站的 NLWeb 实例。这个智能体可以用 MCP 的
ask方法直接向网站提问,例如:“酒店推荐的檀香山一带餐厅里,有适合纯素食者的吗?”NLWeb 实例会处理这个问题,利用餐厅信息数据库(如果已经载入)返回结构化的 JSON 回复。
资源
免责声明:本课中文最初由 AI 翻译工具 Co-op Translator 自动翻译,本库对照英文原文做了校订和删节。译文仍可能有错漏,与英文原版不一致之处,以英文原版为准。


