# 使用智能代理协议（MCP、A2A 和 NLWeb）

[![智能代理协议](../../../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](../../../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](../../../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](../../../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 代理](../10-ai-agents-production/README.md)

## 下一课

[AI 代理的上下文工程](../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 -->