ai-agents-for-beginners

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

Agentic Protocols

(点击上方图片观看本课程视频)

随着 AI 智能体使用率的增长,对确保标准化、安全性并支持开放创新的协议的需求也随之增加。在本课程中,我们将介绍旨在满足此需求的 3 种协议——模型上下文协议 (MCP)、智能体间协议 (A2A) 和自然语言 Web (NLWeb)。

引言

在本课程中,我们将介绍

MCP 如何允许 AI 智能体访问外部工具和数据来完成用户任务。

A2A 如何实现不同 AI 智能体之间的通信和协作。

NLWeb 如何将自然语言界面引入任何网站,使 AI 智能体能够发现并与内容进行交互。

学习目标

• 在 AI 智能体环境中识别 MCP、A2A 和 NLWeb 的核心目的和优势。

解释每种协议如何促进大型语言模型 (LLM)、工具和其他智能体之间的通信和交互。

识别每种协议在构建复杂智能体系统中的独特作用。

模型上下文协议

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

让我们来看看 MCP 的组件、与直接 API 使用相比的优势,以及 AI 智能体如何使用 MCP 服务器的示例。

MCP 核心组件

MCP 采用客户端-服务器架构,其核心组件是:

主机是 LLM 应用程序(例如像 VSCode 这样的代码编辑器),它启动与 MCP 服务器的连接。

客户端是主机应用程序中的组件,它与服务器保持一对一连接。

服务器是暴露特定功能的轻量级程序。

协议中包含三个核心原语,它们是 MCP 服务器的功能:

工具:这些是 AI 智能体可以调用以执行操作的离散动作或函数。例如,天气服务可以暴露一个“获取天气”工具,或者电子商务服务器可以暴露一个“购买产品”工具。MCP 服务器在其功能列表中公布每个工具的名称、描述和输入/输出架构。

资源:这些是 MCP 服务器可以提供的只读数据项或文档,客户端可以按需检索它们。示例包括文件内容、数据库记录或日志文件。资源可以是文本(如代码或 JSON)或二进制(如图像或 PDF)。

提示:这些是提供建议提示的预定义模板,允许更复杂的工作流。

MCP 的优势

MCP 为 AI 智能体提供了显著优势:

动态工具发现:智能体可以从服务器动态接收可用工具列表及其功能描述。这与传统 API 形成对比,传统 API 通常需要静态编码进行集成,这意味着任何 API 更改都需要代码更新。MCP 提供“一次集成”方法,从而实现更大的适应性。

LLM 间的互操作性:MCP 适用于不同的 LLM,提供灵活性来切换核心模型以评估更好的性能。

标准化安全性:MCP 包含标准身份验证方法,在添加对其他 MCP 服务器的访问时提高了可扩展性。这比管理各种传统 API 的不同密钥和身份验证类型更简单。

MCP 示例

MCP Diagram

想象一个用户想使用由 MCP 提供支持的 AI 助手预订航班。

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

  2. 工具发现:客户端询问航空公司的 MCP 服务器:“您有哪些可用工具?”服务器回复了“搜索航班”和“预订航班”等工具。

  3. 工具调用:然后你询问 AI 助手:“请搜索从波特兰到檀香山的航班。”AI 助手使用其 LLM,识别出它需要调用“搜索航班”工具并将相关参数(出发地、目的地)传递给 MCP 服务器。

  4. 执行和响应:MCP 服务器作为包装器,实际调用航空公司的内部预订 API。然后它接收航班信息(例如 JSON 数据)并将其发送回 AI 助手。

  5. 进一步交互:AI 助手显示航班选项。一旦你选择了一个航班,助手可能会在同一个 MCP 服务器上调用“预订航班”工具,完成预订。

智能体间协议 (A2A)

虽然 MCP 专注于将 LLM 连接到工具,但智能体间 (A2A) 协议更进一步,实现了不同 AI 智能体之间的通信和协作。A2A 连接不同组织、环境和技术栈的 AI 智能体以完成共享任务。

我们将研究 A2A 的组件和优势,以及它如何在我们的旅行应用程序中应用的示例。

A2A 核心组件

A2A 专注于实现智能体之间的通信,并让它们协同工作以完成用户子任务。协议的每个组件都为此做出了贡献。

智能体卡片

类似于 MCP 服务器共享工具列表的方式,智能体卡片包含:

智能体执行器

智能体执行器负责将用户聊天的上下文传递给远程智能体,远程智能体需要这些信息才能理解需要完成的任务。在 A2A 服务器中,智能体使用其自身的大型语言模型 (LLM) 来解析传入请求并使用其内部工具执行任务。

工件

一旦远程智能体完成了请求的任务,其工作产品就会作为工件创建。工件包含智能体工作的结果对已完成内容的描述以及通过协议发送的文本上下文。发送工件后,与远程智能体的连接将关闭,直到再次需要它为止。

事件队列

此组件用于处理更新和传递消息。它在生产中对于智能体系统尤其重要,可以防止智能体之间的连接在任务完成之前关闭,尤其是在任务完成时间可能较长的情况下。

A2A 的优势

增强协作:它使来自不同供应商和平台的智能体能够交互、共享上下文并协同工作,促进传统上不连接的系统之间的无缝自动化。

模型选择灵活性:每个 A2A 智能体都可以决定使用哪个 LLM 来服务其请求,从而允许每个智能体使用优化或微调的模型,这与某些 MCP 场景中的单个 LLM 连接不同。

内置身份验证:身份验证直接集成到 A2A 协议中,为智能体交互提供了强大的安全框架。

A2A 示例

A2A Diagram

让我们扩展我们的旅行预订场景,但这次使用 A2A。

  1. 用户请求多智能体:用户与“旅行智能体”A2A 客户端/智能体交互,例如说:“请预订下周前往檀香山的整个行程,包括航班、酒店和租车”。

  2. 旅行智能体的协调:旅行智能体收到此复杂请求。它使用其 LLM 来推断任务并确定它需要与其他专业智能体交互。

  3. 智能体间通信:旅行智能体然后使用 A2A 协议连接到下游智能体,例如由不同公司创建的“航空公司智能体”、“酒店智能体”和“租车智能体”。

  4. 委托任务执行:旅行智能体向这些专业智能体发送特定任务(例如,“查找前往檀香山的航班”、“预订酒店”、“租车”)。这些专业智能体中的每一个,都运行自己的 LLM 并利用自己的工具(它们本身可以是 MCP 服务器),执行其预订的特定部分。

  5. 整合响应:一旦所有下游智能体完成任务,旅行智能体就会编译结果(航班详细信息、酒店确认、租车预订)并向用户发送全面的聊天式响应。

自然语言 Web (NLWeb)

长期以来,网站一直是用户访问互联网上信息和数据的主要方式。

让我们看看 NLWeb 的不同组件、NLWeb 的优势以及如何通过查看我们的旅行应用程序来了解 NLWeb 的示例。

NLWeb 的组件

NLWeb 示例

NLWeb

再次考虑我们的旅行预订网站,但这次它由 NLWeb 提供支持。

  1. 数据摄取:旅行网站现有的产品目录(例如,航班列表、酒店描述、旅行套餐)使用 Schema.org 格式化或通过 RSS 源加载。NLWeb 的工具摄取这些结构化数据,创建嵌入,并将它们存储在本地或远程向量数据库中。

  2. 自然语言查询(人类):用户访问网站,不是导航菜单,而是在聊天界面中输入:“为我找到下周檀香山一家带游泳池的家庭友好型酒店”。

  3. NLWeb 处理:NLWeb 应用程序接收此查询。它将查询发送到 LLM 以进行理解,并同时在其向量数据库中搜索相关的酒店列表。

  4. 准确结果:LLM 有助于解释数据库中的搜索结果,根据“家庭友好”、“游泳池”和“檀香山”标准识别最佳匹配,然后格式化自然语言响应。至关重要的是,响应引用了网站目录中的实际酒店,避免了虚构信息。

  5. AI 智能体交互:由于 NLWeb 充当 MCP 服务器,外部 AI 旅行智能体也可以连接到此网站的 NLWeb 实例。AI 智能体然后可以使用 ask MCP 方法直接查询网站:ask("酒店推荐的檀香山地区是否有素食餐厅?")。NLWeb 实例将处理此请求,利用其餐厅信息数据库(如果已加载),并返回结构化的 JSON 响应。

关于 MCP/A2A/NLWeb 还有更多问题吗?

加入 Azure AI Foundry Discord,与其他学习者交流,参加办公时间,并获得您的 AI Agent 问题解答。

资源