使用说明
MCP - 历史
模型上下文协议简史:
问题:2023年的“连接器混乱”
在MCP(可能是指某种中间件或平台组件)之前,连接工具与代理(或智能体)通常使用大型语言模型(LLM)路由来实现。这种方法存在的问题是,随着API和工具的变化,工具的可扩展性和可维护性会受到影响,从而破坏代理的工作流程;此外,切换到不同的大型语言模型提供商也会中断工作流程。
要将人工智能代理连接到像Jira、Notion或公司内部数据库这样的工具,就需要构建一个定制的、一次性集成方案。这导致了一个混乱且脆弱的“连接器混乱”系统。他们意识到,自己花费在构建和维护这些特定连接器上的时间,比提升核心AI能力的时间还要多。
解决方案:Anthorpic(注:此处“Anthorpic”可能为特定品牌或项目名,若无具体上下文,可保持原样或根据实际情况调整)2024年11月:
2024年末,Anthropic发布了模型上下文协议,以规范代理工作流中工具的使用方式。通过采用这一标准,工具可以大规模地被添加到代理工作流中,同时保持良好的可维护性。
MCP已成为在代理工作流程中添加工具的黄金标准。它之所以成为调用工具的首选方式,而非直接调用工具,主要基于一个原因: 标准化直接工具调用就像是为每部手机配备一个不同的专有充电器,而MCP(多工具协议/中间件组件等,具体含义根据上下文确定)则像是拥有一个像USB-C那样的通用标准。
这种标准化提供了几个关键优势,使得构建和扩展人工智能应用变得更加容易。
“专有充电器”问题 🔌
直接工具调用,如OpenAI的函数调用或Anthropic的工具使用,是特定于该提供商的。如果你为OpenAI的模型构建了一套工具,那么你定义这些工具的方式以及模型响应的方式都是OpenAI独有的。如果你想切换到另一个模型提供商,你就必须重写你的工具处理逻辑。这造成了 供应商锁定(或供应商绑定)。
MCP通过创建一个开放、通用的协议来解决这一问题,该协议将人工智能模型与其所使用的工具分离开来。
互操作性与可移植性 🔄
使用MCP(机器控制协议),您只需构建一次工具,然后通过标准的MCP服务器将其暴露出来。任何“支持”MCP的人工智能模型或代理都可以直接使用这些工具,无需进行任何修改。
- 轻松切换模型: 您可以将AI的“大脑”从使用Claude模型切换到Gemini模型,而无需重建任何工具。新模型只需指向同一个MCP服务器即可。
- 工具生态系统: 它支持创建一个通用的生态系统。任何人都可以开发一个符合MCP(机器控制协议)标准的工具(例如,用于Notion或Jira),并且该工具将立即与任何符合MCP标准的AI应用程序兼容工作。
为工具开发者提供的简洁性
当你使用直接调用方法构建工具时,你必须遵守该AI提供商API的特定要求(例如,按照特定的JSON模式定义函数)。
使用MCP,工具开发者们可以 解耦的 来自AI模型。他们无需知道或关心哪个大型语言模型(LLM)将使用他们的工具。他们只需创建一个暴露函数的标准MCP服务器。这使得开发者的任务大大简化,并使他们能够专注于构建工具的核心逻辑,而不是处理与各种AI模型的兼容性问题。
增强的安全性与控制力🛡️
将您的工具置于专用的MCP服务器后方,即可创建一个安全且受控的网关。
- 集中式权限管理: MCP服务器能够在一个集中的地方处理身份验证、授权和登录。您可以定义哪些AI代理被允许使用哪些工具。
- 明确界限: 它在(可能不可预测的)人工智能模型与您敏感的内部系统及API之间建立了一个清晰、可审计的界限。
摘要:MCP与直接工具调用的对比
| 功能 | 直接工具调用 | 模型上下文协议 (MCP) |
|---|---|---|
| 标准化 | 专有的;专利的;特定于每个模型提供商(如OpenAI、Anthropic等)。 | 开放标准与任何符合规范的模型或代理兼容。 |
| 可移植性 | 低工具与某个供应商的API紧密耦合。 | 高工具是解耦的,可以在任何符合MCP标准的AI上运行 |
| 开发者焦点 | 必须学习并遵循特定提供者的格式(例如,JSON模式)。 | 聚焦于工具逻辑;通过通用协议暴露该逻辑。 |
| 安全 | 在应用程序逻辑中处理,管理起来可能较为复杂。 | 集中在MCP服务器上,提供了一个清晰、安全的网关。 |
这看起来是怎样的:
可以将其视为一种结构化、可预测的对话。我将向你展示一个简化版的、高层次的示例,说明在我们之前使用的计算器示例中,这些消息是什么样子的。这一切都是在Python库的“内部”发生的。
对话:客户端与服务器
以下是通过像WebSockets这样的传输方式进行的逐步消息交换过程。
客户“你好,你能做什么?”
服务器“以下是我的能力。”
客户“好的,请用你的‘添加’工具处理这些数字。”
服务器“这是结果。”
让我们看看在MCP标准中它是怎样的。
步骤1:客户询问可用工具(需求发现)
AI客户端连接并发送一个 发现请求 了解服务器的功能。
{
"type": "discovery_request",
"id": "req-abc-123"
}
步骤2:服务器以其工具作出响应
服务器回复了一个 发现响应这就像一个可用工具的菜单。它描述了每个工具的功能、作用以及所需的参数(参数名)。这个“模式”对于人工智能理解如何正确使用工具至关重要。
{
"type": "discovery_response",
"id": "req-abc-123",
"tools": [
{
"name": "add",
"description": "Adds two numbers and returns the result.",
"parameters": {
"type": "object",
"properties": {
"a": { "type": "integer", "description": "The first number." },
"b": { "type": "integer", "description": "The second number." }
},
"required": ["a", "b"]
}
}
]
}
第三步:客户端调用特定工具
看过菜单后,AI决定使用 add 工具。它发送一个 工具调用请求 并附上它想要使用的具体参数。
{
"type": "tool_call_request",
"id": "req-xyz-789",
"tool_name": "add",
"parameters": {
"a": 10,
"b": 32
}
}
步骤4:服务器执行工具并返回结果
服务器接收到请求后,执行其内部的Python函数 add(10, 32)(某人)得到结果,并发送回一个 工具调用响应 包含答案。
{
"type": "tool_call_response",
"id": "req-xyz-789",
"result": 42
}
这种结构化的、来回交互的通信方式是协议的核心。通过标准化这些消息格式,任何遵循这些规则的客户端和服务器都能有效地进行通信,而无需了解彼此内部代码的具体细节。
