1.1
你可能听说过模型上下文协议(MCP),这是一种让人工智能系统更容易链接到外部工具和数据的协议,下面就深入了解一下它是什么以及它是如何工作的。
1.2 MxN的集成问题
相信你已经对API很熟悉并且知道如何使用它们连接到第三方应用程序。如果你使用过不止一个API,你可能已经注意到每个API都是不同的。要发出请求,就需要阅读API的文档弄清楚它是如何工作的,然后构建一个特定于该API的请求。
现在,把它带入到人工智能代理的世界,AI Agent需要工具来完成其任务。 工具允许AI Agent使用第三方应用程序的服务,使它可以自动执行特定操作。人工智能代理通过API向这些工具发送请求。但由于每个API都有自己的文档,规则和输出,因此你必须逐一集成每个工具。
想象一下,如果你有不止一个AI agent 会有多么头疼,这甚至不包括API更改时所需的额外工作:保持更新,处理新功能或端点,以及管理身份验证。
这就是著名的MxN集成问题
++定义 :集成意味着连接不同的工具或系统,以便它们可以协同工作并共享信息。++
如果你有M个AI代理和N个工具,你需要单独设置每个连接,因为这种方法没有标准化。它是可行的,但是效率低,成本高,开放人员难以维护。
想象一下,在一个世界里你可以为所有应用程序使用相同的协议和标准为人工智能应用程序和工具去共享信息。再也不用熬夜阅读API文档,不用为错误的传参而烦恼,或为失败的GET请求而哭泣了。
MCP提供了一种标准的连接方式,而不是每个AI应用程序都需要与每个工具或数据源进行自定义连接。每个AI代理只需要实现一次MCP,就知道如何使用提供MCP的任何工具。每个工具只需要实现MCP服务器,从而任何AI代理都可以访问它。这使得集成更容易构建,也更容易维护。
1.3 MCP
它是AI连接和使用外部工具及数据源的开源标准。
++定义:开源标准是一组公开可用的规则,任何人都可以使用和实现。++
MCP通过对每个工具使用相同的方法从而使交互变得简单一致。
如果你读过MCP的相关内容,就会发现这样的类比,MCP通常被称为人工智能应用的USB-C。基本上它的工作与API相同,只是方式更标准化。
| 相似点 | 不同点 |
|---|---|
| 客户端/服务器架构。它们都使用客户端/服务器的设置,再这种C/S设置中,客户端发送请求,服务器回复请求。 | 目的。MCP用于将AI应用程序与外部工具连接起来,而API则更通用,不是专门为AI设计的。 |
| 抽象层。它们都隐藏了每个系统如何工作的技术细节。客户端不需要知道服务器是如何工作的,它只需要知道如何发送请求以及预期的响应类型是什么样的。 | 动态自我发现。MCP使LLM和AI Agent能够自动找到可用的工具及其功能,而这是API所不能提供的。 |
| 简化集成。它们都让不同系统之间的连接变得更加容易,因此开发人员可以将工具集成在一起,而不必每次从头开始构建所有东西。 | 标准化接口。每个MCP服务器都遵循相同的规则,因此您可以设置一次并使用许多工具。API各不相同,通常需要为每个API单独设置。 |
| [MCP与API的相似与不同] |
一些MCP服务器在后台使用现有的API,将MCP请求转换为API需要的任何格式。然后,他们将API的响应转换回MCP,这样人工智能代理就可以轻松使用它们了。
1.4 MCP架构
MCP使用的是 客户端 / 服务器 架构。
++定义:架构是系统不同部分如何组织和协调工作的总体结构和设计。++
1.4.1 MCP组成部分
1.主机 2.客户端 3. 服务器
主机:
主机是用户交互的AI应用程序,它还协调和管理MCP客户端。主机的一些示例包括 人工智能聊天应用程序,如ChatGPT,Gemini,Claude等。用于自动化的编排工具,如dify, SIM, Make等。
主机的主要职责包括:
用户交互:MCP主机是用户与之通信的主要AI应用程序或界面,它作为接收用户请求和传递响应的入口点。
权限管理:确保只有授权用户或工具才能执行某些操作。
mcp客户端管理:MCP主机确保每个MCP客户端都正确连接到所需的MCP服务器,它跟踪哪些客户端处于活动状态,并确保它们能够与MCP服务器正确通信。
mcp服务连接:MCP主机启动并保持与服务器的连接,从而使AI可以使用它需要的工具和服务。
请求流协调:MCP主机将每个用户请求定向到正确的MCP客户端和工具。它确保流程按照正确的顺序从输入到人工智能处理再到工具执行,最后到响应。
上下文管理:MCP主机跟踪用户的要求以及MCP与工具共享的数据。这有助于AI调用具有正确参数的正确工具,并在不丢失对话轨迹的情况下做出适当的响应。
结果展示:MCP主机收集MCP客户端或工具的输出,并以清晰易懂的方式向用户显示。
MCP客户端:
客户端是MCP主机的一部分,它连接到MCP服务器,发送对工具或数据的请求,并接收响应再传递回主机。
MCP客户端的主要职责包括:
连接服务器:MCP客户端建立并维护与MCP服务器的通信。每个MCP客户端一次只能连接到一个MCP服务器。
沟通管理:MCP客户端发送请求并接收响应,遵循MCP规则,并处理中断或超时。
请求与响应处理:MCP客户端接收主机的请求,将其转换为MCP服务器可以理解的格式,然后发送,当服务器回复时,客户端会检查响应,处理错误,并确保信息正确且有意义,然后再将其传递回主机。
动态发现:MCP客户端查询服务器以找出可用的工具/资源和提示。
MCP服务器:
服务器是一个程序,它作为特定工具或服务,通过标准化的通信方式让人工智能应用程序访问第三方应用程序。
服务器的一些示例:PostgreSQL用于查询和管理数据库记录。Slack用于阅读消息,发送通知和管理频道。Google Drive 用于访问,读取和管理云存储中的文件。
MCP服务器的主要职责包括:
提供工具和服务:MCP服务器以标准化的方式为AI应用程序提供特定的功能或操作。
请求处理:
MCP服务器接收来自MCP客户端的请求,并将其从MCP协议转换为第三方应用程序可以理解的格式。然后,它执行所请求的操作,在将结果发送给客户端之前将其转换回MCP格式。
身份验证和权限处理:MCP服务器确保只有授权的客户端才能访问工具和数据。
动态发现:MCP服务器为客户端提供可用工具,资源和提示的最新列表。
请求流协调:MCP主机将每个请求定向到正确的MCP客户端或工具。它确保流程的顺序正确,从输入到AI处理再到工具执行,最后到响应。
工具定义维护:MCP服务器保持可用工具的描述,输入和输出准确且最新。
|------------------------------------------------|------------------------------------------------------------------------------|----------------------------------------------|
| 工具 | 资源 | 提示模板 |
| AI可以触发以执行特定任务的动作或功能。 每个工具都包括其名称,描述,输入和输出等详细信息。 | 服务器提供的只读数据或内容,如文档,文件或数据库条目。 它们使人工智能能够获取可靠的信息。AI可以使用这些信息做出更好的决策,而无需运行工具或执行操作。 | 预先制作的文本示例,指导人工智能如何响应或执行任务。 它们帮助AI正确格式化请求和命令。 |
| 例如:在项目管理应用程序中创建新任务的工具。 | 例如:一家公司的产品目录或知识库。 | 例如:引导AI填写任务名称,描述,负责人和截止日期。 |
[三种类型的原语]
不是每个MCP服务器都提供所有三种类型的原语,大多主要侧重于工具。
1.4.2 MCP结构
主机可以通过客户端连接到多个MCP服务器,每个客户端与其各自的服务器保持1:1的连接。
这种结构是模块化和灵活的。
MCP客户端允许主机同时连接到多个服务器,如果您需要访问其他工具或数据源,添加另一个客户端可以轻松连接到更多的服务器。这种设置简化了不同工具的组合,并允许系统根据需求的变化进行调整,因此人工智能应用程序可以顺利增长和使用新功能。
1.5 MCP协议
MCP协议是一组规则,定义了所有组件(主机,客户端和服务器)如何相互通信。它规范了请求,响应和消息,因此AI应用程序可以以一致的方式与MCP服务器交互,从本质上讲,它使整个系统使用相同的语言,因此AI可以顺利的访问工具,数据和服务。
1.5.1 消息协议
MCP协议使用JSON-RPC 2.0发送和接收消息。
++定义:消息协议是一组规则,定义了系统如何格式化,发送和理解消息。++
RPC代表远程过程调用。MCP客户端使用它来请求服务器执行任务,然后将结果发送回去,客户端和服务器之间的所有消息都是JSON格式的。RPC允许程序相互通信并调用彼此的函数,对于MCP服务器,这些功能是服务器为AI提供的工具,资源和提示。
MCP客户端向服务器发送请求,使用工具执行特定操作。每个请求都包括一个唯一的标识符,方法名称以及操作所需的任何参数。
服务器执行该操作并返回一个包含结果的响应,或者在出现问题时发送一个错误,响应与请求id匹配,并包含结果或错误。
通知是不需要回复的单向消息。服务器经常使用它们来提供更新或向客户端通知事件。
1.5.2 传送方式
JSON-RPC 2.0不依赖于特定的传输方法,因此它可以通过不同的方式发送消息。
++定义:传输方式是系统发送和接收消息的方式。++
|-------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| HTTP streaming | Server-Sent Events(SSE) |
| HTTP流是服务器通过单个连接逐位向客户端发送数据的一种方式。连接保持打开状态,服务器在信息块可用时发送这些信息块。当需要持续的实时更新时(如日志,视频等),很有用。 | SSE是服务器通过http向客户端推送实时更新的一种简单方法,只能在一个方向上,客户端打开连接,服务器在有更新可用时发送新消息。SSE在通知,实时评分或状态更改等方面表现良好。 |
1.5.3 授权
当MCP服务器发送或接收信息时,它不会自动知道是谁在发出请求。
当MCP需要访问远程或受限服务时,它必须通过授权证明其身份,确保只有经过批准的客户端才能访问敏感数据或工具。
|-----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| API keys | OAuth 2.0 |
| API密钥绑定到特定的账户或项目,MCP服务器将其包含在每个请求中,以表明该请求是允许的。 API密钥使用起来既快捷又容易,但它们可能有风险,因为任何获得密钥的人都可用不受限制的使用它。 | OAuth 2.0是一种更安全,基于用户的访问方式。用户必须允许MCP访问某些数据或执行操作,如果他们同意,服务将向MCP提供临时访问令牌。然后,MCP服务器使用此令牌发送授权请求,OAuth 2.0在用户同意和不同访问级别很重要时效果最好。 |
[两种授权方式]
1.5.4 动态发现
动态发现允许MCP客户端自动实时了解MCP服务器可用做什么,包括它提供的工具,资源和功能,而无需手动设置。
AI Agent 可用自动发现MCP服务器提供的工具和功能,并了解如何使用它们,然后,他们可以选择正确的操作来解决任务或实时响应请求。
|----------------------------------------|
| 没有静态列表:客户端不需要保留固定的工具目录。 |
| 更简单的更新:你可以添加,删除或更改工具,而无需重新进行集成。 |
| 更智能的代理:AI客户端可以根据可用的工具列表决定使用哪些工具以及何时使用。 |
[动态发现的好处]
动态发现使AI系统能够自动查看服务器提供的工具,并为每个任务选择合适的工具,这使得AI Agent更加灵活,能够实时智能的行动,而不依赖于固定的列表或手动设置。
1.6 MCP生命周期
MCP生命周期包括3个阶段:初始化,操作和关闭。是从客户端连接到服务器,使用其工具到连接结束的完成阶段。
1.6.1 初始化
初始化阶段是MCP生命周期的第一个阶段。
在此阶段,服务器会告知客户端执行所谓的握手流程:服务器会告知客户端其提供的工具和资源,客户端则确认已准备好协同工作。这一切会在你启动应用程序时自动在后台完成,实际工作开始之前即已完成。
它具体是如何工作的?
1,连接。MCP主机启动后,其MCP客户端连接到配置的MCP服务器。
2,发现。MCP客户端向服务器询问其提供的功能,服务器则共享可用的工具,资源和提示。
3,注册。客户端注册这些功能,以便人工智能在需要时能够访问和使用它们。
1.6.2 运行
运行阶段是实际工作开展的时期。主机建立连接后,客户端与服务器开始交换请求和响应。
它又是如何工作的呢?
1,用户提示。用户向AI发送消息或定义AI Agent的用户提示。
2,工具选择。AI分析用户的请求,并确定需要用哪些MCP工具去正确应答。(如果有的话)
3,权限请求。MCP主机在得到用户许可后使用特定的工具。
4,请求发送。MCP客户端在JSON-RPC 2.0中格式化请求并将其发送到服务器。
5,处理。服务器处理请求并执行请求的操作。
6,结果返回。服务器在JSON-RPC 2.0中将响应发送回客户端。
7,上下文集成。AI接收结果,并将其与自身知识相结合,为用户创建完整的答案。
8,响应生成。AI为用户生成答案。
1.6.3 关闭
关闭阶段是MCP生命周期的最后一步。
在此阶段,客户端和服务器关闭连接,停止交换信息,并删除他们正在使用的任何资源。这确保了一切安全结束,系统为下一次会话做好准备。