智链谷AI 智链谷苏一二问苏一二 ↗

社区交流 ·

使用智能代理协议(MCP、A2A 和 NLWeb)

开源教程转载|使用智能代理协议(MCP、A2A 和 NLWeb)。Microsoft 及项目贡献者编写,智链谷平台运营整理。

> 开源教程转载 · 由智链谷平台运营账号整理发布。作者:Microsoft 及项目贡献者。
> [查看原文](https://github.com/microsoft/ai-agents-for-beginners/blob/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translations/zh-CN/11-agentic-protocols/README.md) · MIT 许可,完整声明见文末。

# 使用智能代理协议(MCP、A2A 和 NLWeb)

[![智能代理协议](https://raw.githubusercontent.com/microsoft/ai-agents-for-beginners/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translated_images/zh-CN/lesson-11-thumbnail.b6c742949cf1ce2a.webp)](https://youtu.be/X-Dh9R3Opn8)

> _(点击上方图片查看本课视频)_

随着 AI 代理的使用日益增多,对确保标准化、安全性以及支持开放创新的协议需求也在增长。本课将介绍三种旨在满足这一需求的协议——模型上下文协议(MCP)、代理间协议(A2A)和自然语言网页(NLWeb)。

## 引言

本课内容包括:

• **MCP** 如何允许 AI 代理访问外部工具和数据,以完成用户任务。

• **A2A** 如何实现不同 AI 代理之间的通信与协作。

• **NLWeb** 如何为任何网站带来自然语言界面,使 AI 代理能够发现并与内容互动。

## 学习目标

• <strong>识别</strong> MCP、A2A 和 NLWeb 在 AI 代理中的核心目的和优势。

• <strong>解释</strong> 每个协议如何促进大型语言模型(LLM)、工具和其他代理之间的通信与互动。

• <strong>认识到</strong> 每个协议在构建复杂代理系统中所扮演的不同角色。

## 模型上下文协议(MCP)

**模型上下文协议(MCP)** 是一个开放标准,为应用程序向大型语言模型(LLM)提供上下文和工具的方式提供了标准化方法。这使得 AI 代理能够通过“通用适配器”一致地连接到不同的数据源和工具。

接下来我们将了解 MCP 的组成部分、与直接调用 API 的优势对比,以及 AI 代理如何使用 MCP 服务器的示例。

### MCP 核心组件

MCP 基于<strong>客户端-服务器架构</strong>,其核心组件包括:

• <strong>主机</strong> 是启动与 MCP 服务器连接的 LLM 应用程序(例如代码编辑器 VSCode)。

• <strong>客户端</strong> 是主机应用内维护与服务器一对一连接的组件。

• <strong>服务器</strong> 是提供具体功能的轻量级程序。

协议中包含三个核心基础功能,作为 MCP 服务器的能力:

• <strong>工具</strong>:AI 代理可调用的离散动作或功能。例如,天气服务可能提供“获取天气”工具,电子商务服务器可能提供“购买产品”工具。MCP 服务器在能力列表中公布每个工具的名称、描述及输入/输出格式。

• <strong>资源</strong>:由 MCP 服务器提供的只读数据项或文档,客户端可按需获取。示例包括文件内容、数据库记录或日志文件。资源可以是文本(如代码或 JSON)或二进制(如图像或 PDF)。

• <strong>提示</strong>:预定义的模板,提供建议的提示,以支持更复杂的工作流程。

### MCP 的优势

MCP 为 AI 代理带来了显著的优势:

• <strong>动态工具发现</strong>:代理可以动态获取服务器提供的可用工具列表及其描述。相比传统 API 往往需要静态编码集成,且 API 变更需要更新代码,MCP 提供“一次集成”的方式,更具适应性。

• **跨 LLM 互操作性**:MCP 可跨不同 LLM 工作,灵活切换核心模型以评估并提升性能。

• <strong>标准化安全</strong>:MCP 包含标准认证方法,便于扩展对更多 MCP 服务器的访问管理,相较于管理各种传统 API 不同密钥和认证方式,简化了安全管理。

### MCP 示例

![MCP Diagram](https://raw.githubusercontent.com/microsoft/ai-agents-for-beginners/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translated_images/zh-CN/mcp-diagram.e4ca1cbd551444a1.webp)

假设用户想通过由 MCP 支持的 AI 助手预订航班。

1. <strong>连接</strong>:AI 助手(MCP 客户端)连接航空公司提供的 MCP 服务器。

2. <strong>工具发现</strong>:客户端询问航空公司 MCP 服务器:“有哪些可用工具?”服务器回应如“搜索航班”和“预订航班”等工具。

3. <strong>调用工具</strong>:用户向 AI 助手说:“请搜索从波特兰到火奴鲁鲁的航班。”AI 助手通过其 LLM 识别需要调用“搜索航班”工具,并向 MCP 服务器传递相关参数(出发地、目的地)。

4. <strong>执行与响应</strong>:MCP 服务器作为包装层,调用航空公司的内部预订 API,随后接收航班信息(如 JSON 数据)并返回给 AI 助手。

5. <strong>后续交互</strong>:AI 助手展示航班选项,用户选定航班后,助手可能调用同一 MCP 服务器上的“预订航班”工具,完成预订。

## 代理间协议(A2A)

MCP 主要连接 LLM 与工具,**代理间协议(A2A)** 更进一步,实现不同 AI 代理之间的通信与协作。A2A 将不同组织、环境和技术栈的 AI 代理连接起来,共同完成共享任务。

我们将探讨 A2A 的组成部分和优势,并通过旅游应用示例说明其应用。

### A2A 核心组件

A2A 致力于使代理之间通信并协作完成用户子任务。协议中的每个组件均支持这一点:

#### 代理卡

类似 MCP 服务器分享工具列表,代理卡包含:
- 代理名称。
- 其完成的一般任务的<strong>描述</strong>。
- <strong>具体技能列表</strong>及描述,帮助其他代理(甚至人类用户)理解何时及为何调用该代理。
- 当前代理的<strong>端点 URL</strong>。
- 代理的<strong>版本</strong>及<strong>功能</strong>,如流式响应和推送通知。

#### 代理执行器

代理执行器负责<strong>传递用户聊天上下文给远程代理</strong>,远程代理需要这些信息来理解待完成的任务。在 A2A 服务器中,代理通过自身的 LLM 解析请求并利用内部工具执行任务。

#### 工件

当远程代理完成请求的任务,其工作成果以工件形式创建。工件<strong>包含代理工作的结果</strong>,<strong>所完成工作的描述</strong>以及通过协议传递的<strong>文本上下文</strong>。工件发送后,远程代理的连接关闭,直至再次需要。

#### 事件队列

此组件用于<strong>处理更新和消息传递</strong>。在生产环境中尤为重要,以防任务尚未完成时代理间连接被关闭,尤其是任务完成可能耗时较长。

### A2A 的优势

• <strong>增强协作</strong>:使来自不同厂商和平台的代理能够互动、共享上下文并协作,促进传统分离系统间无缝自动化。

• <strong>模型选择灵活性</strong>:每个 A2A 代理可自主选择使用的 LLM,允许按代理优化或微调模型,与某些 MCP 场景中单一 LLM 连接不同。

• <strong>内置认证</strong>:认证集成于 A2A 协议中,为代理交互提供强健安全框架。

### A2A 示例

![A2A Diagram](https://raw.githubusercontent.com/microsoft/ai-agents-for-beginners/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translated_images/zh-CN/A2A-Diagram.8666928d648acc26.webp)

让我们扩展旅游预订场景,这次采用 A2A。

1. <strong>用户向多代理请求</strong>:用户与“旅游代理” A2A 客户端/代理互动,例如说:“请预订下周前往火奴鲁鲁的全程旅行,包括航班、酒店及租车。”

2. <strong>旅游代理协调</strong>:旅游代理接收到复杂请求,利用其 LLM 推理任务,确定需要与其他专门代理交互。

3. <strong>代理间通信</strong>:旅游代理使用 A2A 协议连接下游代理,如不同公司的“航空代理”、“酒店代理”和“租车代理”。

4. <strong>委托任务执行</strong>:旅游代理将具体任务发送给这些专门代理(例如“查找飞往火奴鲁鲁的航班”、“预订酒店”、“租车”)。每个专门代理运行自己的 LLM,使用自己工具(也可能是 MCP 服务器),完成各自的预订部分。

5. <strong>整合响应</strong>:所有下游代理完成任务后,旅游代理汇总结果(航班详情、酒店确认、租车预订),以聊天式响应方式发送给用户。

## 自然语言网页(NLWeb)

网站长期以来是用户访问互联网上信息和数据的主要渠道。

下面我们将了解 NLWeb 的不同组件、优势及通过旅游应用示例展示 NLWeb 的工作方式。

### NLWeb 组件

- **NLWeb 应用(核心服务代码)**:处理自然语言问题的系统。它连接平台各部分生成响应。可以将其视为为网站自然语言功能提供动力的<strong>引擎</strong>。

- **NLWeb 协议**:网站自然语言交互的<strong>基本规则集</strong>。响应以 JSON 格式返回(常用 Schema.org)。其目的是为“AI 网”打造简单基础,就像 HTML 让文档在线共享成为可能。

- **MCP 服务器(模型上下文协议端点)**:每个 NLWeb 配置也充当<strong>MCP 服务器</strong>。意味着可以<strong>与其他 AI 系统共享工具(如“ask”方法)和数据</strong>。实际上,使网站内容和功能可被 AI 代理使用,让网站成为更广泛“代理生态系统”的一部分。

- <strong>嵌入模型</strong>:用于<strong>将网站内容转换为称为向量的数值表示(嵌入)</strong>。这些向量以计算机可比较和搜索的方式捕捉含义。向量存储于特殊数据库,用户可选择使用的嵌入模型。

- **向量数据库(检索机制)**:存储网站内容嵌入的数据库。当有人查询时,NLWeb 检查向量数据库,快速找到最相关信息,返回按相似度排序的可能答案列表。NLWeb 支持多种向量存储系统,如 Qdrant、Snowflake、Milvus、Azure AI Search 和 Elasticsearch。

### NLWeb 示例

![NLWeb](https://raw.githubusercontent.com/microsoft/ai-agents-for-beginners/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translated_images/zh-CN/nlweb-diagram.c1e2390b310e5fe4.webp)

再次考虑我们的旅游预订网站,这次由 NLWeb 驱动。

1. <strong>数据摄取</strong>:旅行网站现有产品目录(如航班列表、酒店介绍、旅游套餐)用 Schema.org 格式或通过 RSS 提供。NLWeb 工具摄取这些结构化数据,生成嵌入,并存储于本地或远程向量数据库。

2. **自然语言查询(人类)**:用户访问网站,不是通过菜单导航,而是在聊天界面中输入:“帮我找一个下周在火奴鲁鲁有游泳池的适合家庭的酒店”。

3. **NLWeb 处理**:NLWeb 应用接收查询,发送查询给 LLM 进行理解,同时在其向量数据库中搜索相关酒店列表。

4. <strong>精准结果</strong>:LLM 协助解读数据库搜索结果,根据“适合家庭”、“游泳池”和“火奴鲁鲁”条件甄别最佳匹配,并生成自然语言响应。关键是响应引用了网站目录中的真实酒店,避免虚构信息。

5. **AI 代理交互**:由于 NLWeb 充当 MCP 服务器,外部 AI 旅行代理亦可连接此网站的 NLWeb 实例。AI 代理可使用 `ask` MCP 方法直接查询网站:`ask("酒店推荐的火奴鲁鲁地区有素食友好餐厅吗?")`。NLWeb 实例将处理查询,利用其餐厅信息数据库(如果加载了),并返回结构化 JSON 响应。

### 想了解更多关于 MCP/A2A/NLWeb 吗?

加入 [Microsoft Foundry Discord](https://discord.com/invite/ATgtXmAS5D) ,与其他学习者交流,参加答疑时间,获得 AI 代理相关问题的解答。

## 资源

- [MCP 入门](https://aka.ms/mcp-for-beginners)
- [MCP 文档](https://learn.microsoft.com/python/api/overview/azure/ai-projects-readme)
- [NLWeb 仓库](https://github.com/nlweb-ai/NLWeb)
- [Microsoft 代理框架](https://aka.ms/ai-agents-beginners/agent-framework)

## 上一课

[生产环境中的 AI 代理](https://github.com/microsoft/ai-agents-for-beginners/blob/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translations/zh-CN/10-ai-agents-production/README.md)

## 下一课

[AI 代理的上下文工程](https://github.com/microsoft/ai-agents-for-beginners/blob/25b7985f3b2dc37a84f4a7387ccd3c9f0e5b1595/translations/zh-CN/12-context-engineering/README.md)

---

<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**:
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

---

## 版权与许可

```text
MIT License

Copyright (c) Microsoft Corporation.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
```