智能体设计模式-模型上下文协议(MCP)

137 阅读17分钟

智能体设计模式-模型上下文协议(MCP)【AI大模型教程】

为了使 LLMs 能够有效地作为代理发挥作用,它们的功能必须超越多模式生成。与外部环境的交互是必要的,包括访问当前数据、利用外部软件和执行特定的操作任务。模型上下文协议(MCP)通过为LLMs提供与外部资源接口的标准化接口来解决这一需求。该协议是促进一致和可预测的集成的关键机制。

MCP模式概述

想象一下一个通用适配器,它允许任何LLM插入任何外部系统、数据库或工具,而无需为每个系统、数据库和工具定制集成。这就是模型上下文协议(MCP)的本质。这是一个开放标准,旨在标准化像Gemini、OpenAI的GPT模型、Mixtral和Claude这样的LLMs如何与外部应用程序、数据源和工具进行通信。可以将其视为一种通用连接机制,简化了LLMs获取上下文、执行操作和与各种系统交互的方式。

MCP采用客户机-服务器架构。它定义了MCP服务器如何公开不同的元素——数据(称为资源)、交互式模板(本质上是提示)和可操作函数(称为工具)。这些数据随后会被MCP客户端消耗,这个客户端可以是LM主机应用程序或AI代理本身。这种标准化的方法极大地降低了将 LLMs 集成到不同操作环境中的复杂性。

然而,MCP是“代理接口”的契约,其有效性在很大程度上取决于它所公开的基础API的设计。存在一种风险,即开发人员简单地包裹已有的遗留API而不进行修改,这对代理来说可能是次优的。例如,如果票务系统的API只允许逐个检索完整的票务详细信息,那么被要求对高优先级票务进行汇总的代理在处理大量数据时会变得缓慢且不准确。为了真正有效,底层API应该改进确定性特性,如过滤和排序,以帮助非确定性代理高效工作。这强调了代理并不能神奇地取代确定性工作流程;它们通常需要更强的确定性支持才能成功。

此外,MCP可以包裹一个API,其输入或输出本质上仍然无法被代理理解。API只有在其数据格式对代理友好时才有用,这是MCP本身不强制执行的保证。例如,如果使用代理无法解析PDF内容,那么为文档存储创建一个将文件返回为PDF的MCP服务器基本上是没有用的。更好的方法是首先创建一个API,返回文档的文本版本,例如Markdown,代理实际上可以读取和处理它。这表明开发人员不仅要考虑连接,还要考虑交换数据的性质,以确保真正的兼容性。

MCP与工具函数调用

模型上下文协议(MCP)和工具函数调用是不同的机制,使LLMs能够与外部功能(包括工具)交互并执行操作。虽然两者都将 LLM 功能扩展到文本生成之外,但它们在方法和抽象水平上有所不同。

工具函数调用可以被视为从一个LLM向特定的、预定义的工具或函数发出的直接请求。注意,在这个上下文中,我们可以互换使用“工具”和“功能”这两个词。这种交互的特点是一对一的通信模型,其中,LLM基于其对用户需要外部动作意图的理解来格式化请求。然后应用程序代码执行此请求并将结果返回给LLM。这个过程通常是专有的,并且在不同的LLM提供者之间有所不同。

相比之下,模型上下文协议(MCP)作为一个标准化接口运作,用于LLMs发现、与外部功能通信和利用外部功能。它作为一个开放协议,促进与各种工具和系统的交互,旨在建立一个生态系统,在该系统中任何合规的工具都可以被任何合规 LLM 访问。这促进了不同系统和实现之间的互操作性、组合性和可重用性。通过采用联合模型,我们显著提高了互操作性,并释放了现有资产的价值。通过这种策略,我们只需将不同且遗留的服务包裹在符合MCP的接口中,就可以将它们引入现代生态系统。这些服务继续独立运行,但现在可以组成新的应用程序和工作流,它们的协作由LLMs协调。这有助于提高敏捷性和可重用性,而无需对基础系统进行昂贵的重写。

以下是MCP和工具函数调用的基本区别:

特征工具函数调用模型上下文协议(MCP)
标准化专有和供应商特定的。不同的 LLM 提供者在格式和实现上有所不同。一个开放的、标准化的协议,促进不同LLM和工具之间的互操作性。
范围LLM请求执行特定、预定义函数的直接机制。一个更广泛的框架,用于描述LLMs和外部工具如何发现和相互通信。
体系结构LLM和应用程序的工具处理逻辑之间的一对一交互。一种客户端-服务器架构,在这种架构中,LLM支持的应用程序(客户端)可以连接并利用各种MCP服务器(工具)。
发现LLM明确地被告知在特定对话的上下文中有哪些工具可用。支持动态发现可用工具。MCP客户端可以查询服务器以查看其提供的功能。
可重用性工具集成通常与所使用的特定应用程序和LLM紧密结合在一起。促进可重用、独立的“MCP服务器”的开发,任何合规的应用程序都可以访问这些服务器。

可以将工具功能调用想象成给AI提供一套特定的定制工具,就像一把特定的扳手和螺丝刀。对于任务固定的车间来说,这样做很有效率。另一方面,MCP(模型上下文协议)就像创建一个通用的、标准化的电源插座系统。它本身并不提供工具,但它允许任何制造商的任何合规工具插入并工作,从而实现一个动态且不断扩展的车间。

简而言之,函数调用提供了对一些特定函数的直接访问,而MCP是标准化的通信框架,允许LLMs发现和使用大量的外部资源。对于简单的应用,特定的工具就足够了;而对于复杂且相互关联、需要适应性的AI系统,像MCP这样的通用标准是必不可少的。

MCP的其他注意事项

虽然MCP提供了一个强大的框架,但彻底的评估需要考虑影响其适用于特定用例的几个关键方面。让我们更详细地看看一些方面:

● 工具vs.资源vs.提示:了解这些组件的具体作用是很重要的。资源是静态数据(例如,PDF文件、数据库记录)。工具是执行操作(例如,发送电子邮件、查询API)的可执行函数。提示是一个模板,它指导LLM如何与资源或工具交互,确保交互是结构化的和有效的。

● 可探测性MCP的一个主要优点是,MCP客户端可以动态地查询服务器,以了解服务器提供哪些工具和资源。这种“准时”发现机制对于需要在无需重新部署的情况下适应新能力的代理来说非常强大。

● 安全通过任何协议公开工具和数据都需要强有力的安全措施。MCP实现必须包括身份验证和授权,以控制哪些客户端可以访问哪些服务器以及允许它们执行哪些特定操作。

● 履行虽然MCP是一个开放标准,但其实施可能很复杂。然而,提供商开始简化这一过程。例如,一些模型提供商如Anthropic或FastMCP提供SDK,这些SDK可以抽象出大部分的模板代码,使开发人员更容易创建和连接MCP客户端和服务器。

● 错误处理全面的错误处理战略至关重要。协议必须定义如何将错误(例如,工具执行失败、不可用服务器、无效请求)传回给LLM,以便它能够理解失败并可能尝试替代方法。

● 本地服务器与远程服务器MCP服务器可以在本地部署在代理的同一台机器上,也可以远程部署在不同的服务器上。可以选择本地服务器以提高处理敏感数据的速度和安全性,而远程服务器架构则允许在组织中共享、可扩展地访问通用工具。

● 按需服务与批处理MCP可以支持按需、交互式会话和更大规模的批处理。选择取决于应用程序,从需要立即访问工具的实时对话代理到批量处理记录的数据分析管道。

● 运输机制协议还定义了通信的基础传输层。对于本地交互,它使用JSON-RPC over STDIO(标准输入/输出)来实现高效的进程间通信。对于远程连接,它利用可流式HTTP和服务器发送事件(SSE)等网络友好协议来实现持久和高效的客户端-服务器通信。

模型上下文协议使用客户机-服务器模型来标准化信息流。理解组件相互作用是MCP高级代理行为的关键:

1. 大型语言模型(LLM)核心情报。它处理用户请求,制定计划,并决定何时需要访问外部信息或执行某项操作。

2. MCP客户端:这是一个围绕LLM的应用程序或包装。它充当中介,将 LLM 的意图转化为符合 MCP 标准的正式请求。它负责发现、连接和与MCP服务器通信。

3. MCP服务器:这是通往外部世界的大门。它向任何授权的MCP客户端公开一组工具、资源和提示。每台服务器通常负责一个特定的域,例如与公司内部数据库的连接、电子邮件服务或公共API。

4. 可选第三方(3P)服务:这表示MCP Server管理和公开的实际外部工具、应用程序或数据源。它是执行请求操作的最终端点,例如查询专有数据库、与SaaS平台交互或调用公共天气API。

相互作用流如下:

1. 发现MCP客户端代表LLM查询MCP服务器,询问它提供了哪些功能。服务器会通过一个清单来响应,列出其可用工具(例如,send_email)、资源(例如,customer_database)和提示。

2. 请求格式: LLM确定它需要使用已发现的工具之一。例如,它决定发送一封电子邮件。它提出请求,指定要使用的工具(send_email)和必要的参数(收件人、主题、正文)。

3. 客户沟通MCP客户端接收LLM制定的请求,并将其作为标准化调用发送到相应的MCP服务器。

4. 服务器执行MCP服务器接收请求。它认证客户端,验证请求,然后通过与底层软件接口(例如,调用电子邮件API的send()函数)执行指定的操作。

5. 响应和上下文更新执行后,MCP服务器向MCP客户端发送标准化的响应。该响应指示该操作是否成功,并包括任何相关输出(例如,发送电子邮件的确认ID)。然后,客户端将这个结果传递回LLM,更新其上下文,使其能够继续执行任务的下一步。

实际案例

MCP显著扩展了AI/LLM的能力,使其更加多才多艺且强大。以下是九个关键用例:

● 数据库集成:MCP允许LLMs和代理无缝访问数据库中的结构化数据并与之交互。例如,使用MCP数据库工具箱,代理可以查询Google BigQuery数据集以检索实时信息、生成报表或更新记录,所有这些都由自然语言命令驱动。

● 生成媒体编曲:MCP使代理能够与先进的生成媒体服务集成。通过Genmedia服务的MCP工具,代理商可以编排涉及谷歌Imagen进行图像生成、谷歌Veo进行视频创作、谷歌Chirp 3 HD进行逼真声音处理、或谷歌Lyria进行音乐创作的工作流程,从而在AI应用内实现动态内容创作。

● 外部API交互:MCP为LLMs调用和接收来自任何外部API的响应提供了一种标准化的方式。这意味着代理商可以获取实时天气数据、拉动股价、发送电子邮件或与CRM系统交互,其功能远远超出了其核心语言模型。

● 基于推理的信息提取:利用LLM强大的推理能力,MCP促进了有效的、依赖查询的信息提取,这超越了传统的搜索和检索系统。代理可以分析文本并提取直接回答用户复杂问题的精确的子句、图形或语句,而不是传统的搜索工具返回整个文档。

● 自定义工具开发:开发人员可以构建自定义工具,并通过MCP服务器(例如,使用 FastMCP)公开它们。这使得专门的内部功能或专有系统能够以标准化、易于使用的格式提供给LLMs和其他代理,而不需要直接修改LLM。

● 标准化的LLM-到应用程序通信:MCP确保LLMs和它们交互的应用程序之间有一个一致的通信层。这降低了集成开销,促进了不同LLM提供者和主机应用程序之间的互操作性,并简化了复杂代理系统的开发。

● 复杂工作流编排:通过结合各种MCP公开的工具和数据源,代理可以协调高度复杂的多步骤工作流程。例如,代理可以通过与不同的MCP服务交互,从数据库中检索客户数据,生成个性化的营销图像,起草定制的电子邮件,然后发送。

● 物联网设备控制:MCP可以促进LLM与物联网(IoT)设备的交互。代理可以使用MCP向智能家电、工业传感器或机器人发送命令,从而实现自然语言控制和物理系统的自动化。

● 金融服务自动化:在金融服务中,MCP可以使LLMs与各种金融数据源、交易平台或合规系统交互。代理可以分析市场数据、执行交易、生成个性化的财务建议或自动化监管报告,同时保持安全和标准化的通信。

简而言之,模型上下文协议(MCP)使代理能够从数据库、API和Web资源访问实时信息。它还允许代理执行诸如发送电子邮件、更新记录、控制设备以及通过集成和处理来自不同来源的数据来执行复杂任务等操作。此外,MCP还支持用于AI应用的媒体生成工具。

小结

定义:要发挥有效代理的作用,LLMs必须超越简单的文本生成。它们需要与外部环境交互的能力,以访问当前数据和利用外部软件。如果没有标准化的通信方法,LLM与外部工具或数据源之间的每次集成都将成为自定义的、复杂的和不可重复的努力。这种临时性的方法阻碍了可扩展性,使得构建复杂且相互关联的人工智能系统变得困难且效率低下。

原理:模型上下文协议(MCP)通过充当LLMs和外部系统之间的通用接口,提供了一个标准化的解决方案。它建立了一个开放的、标准化的协议,定义了如何发现和使用外部功能。在客户机-服务器模型上运行,MCP允许服务器向任何合规的客户机公开工具、数据资源和交互式提示。LLM支持的应用程序充当这些客户端,以可预测的方式动态地发现可用资源并与之交互。这种标准化的方法促进了一个由可互操作和可重用的组件组成的生态系统,极大地简化了复杂代理工作流的开发。

规则:在构建复杂、可扩展或企业级代理系统时,可以使用模型上下文协议(MCP),这些系统需要与各种不断变化的外部工具、数据源和API进行交互。当优先考虑不同 LLMs 和工具之间的互操作性时,以及当代理需要在不重新部署的情况下动态发现新功能时,它是理想的选择。对于具有固定且预定义函数数量有限的简单应用程序,直接调用工具函数可能就足够了。

关键要点

以下是关键的收获:

● 模型上下文协议(MCP)是一个开放标准,促进了LLMs与外部应用程序、数据源和工具之间的标准化通信。

● 它采用客户机-服务器架构,定义了公开和使用资源、提示和工具的方法。

● 代理开发工具包(ADK)既支持使用现有的MCP服务器,也支持通过MCP服务器公开ADK工具。

● FastMCP 简化了MCP服务器的开发和管理,特别是在公开用Python实现的工具方面。

● 用于生成媒体服务的MCP工具允许代理与Google Cloud的生成媒体功能(Imagen、Veo、Chirp 3 HD、Lyria)集成。

● MCP使LLMs和代理能够与现实世界系统交互,访问动态信息,并执行文本生成以外的操作。

结论

模型上下文协议(MCP)是一个开放标准,它促进了大型语言模型(LLMs)和外部系统之间的通信。它采用了客户端-服务器架构,使LLMs能够访问资源、利用提示和通过标准化工具执行操作。MCP允许LLMs与数据库交互,管理生成媒体工作流,控制物联网设备,并使金融服务自动化。实际例子演示了如何设置代理与MCP服务器(包括文件系统服务器和用 FastMCP构建的服务器)通信,并说明了其与Agent Development Kit(ADK)的集成。MCP是开发具有交互性的人工智能代理的关键组成部分,这些代理的能力超越了基本的语言功能。