利用 MCP 和数据库提高大模型知识检索精度
知识库效果不佳、模型微调困难?别担心!本文将介绍一种基于 MCP(模型上下文协议)和数据库的新思路,旨在提高大模型检索外部知识的精度。实测效果优于 REG(检索增强生成)。
引言
大家好,欢迎来到口头命运花园。我是花言老师。最近 MCP 概念非常火爆,相关教程也很多,但大多停留在概念层面。经过一段时间的体验,我深感 MCP 是一项有意义的技术标准,可以帮助我们解决许多先前难以解决的问题。
本文将从优化数据检索精度的实践出发,探讨 MCP 的应用。
学习路径
- 回顾 REG 知识检索技术的局限性。
- 学习 MCP 的基础知识,对该技术有基本认知。
- 尝试一个简单的案例,体验 MCP 的基本用法。
- 通过实际案例,实现精准的外部知识检索,并对比 REG 的效果。
- 通过案例深入理解 MCP 的核心原理。
REG 技术的局限性
REG 是目前给大模型外接智库最常用的手段,它结合了信息检索技术和生成式模型,旨在解决大模型在知识准确性、上下文理解以及对最新信息利用方面的问题。
然而,很多人对 REG 存在误解,认为只要导入额外知识,模型就能完美掌握并回答相关问题。但实际情况并非如此,REG 的精准度并不理想。
检索精度不足
REG 的核心在于将知识转换为向量,导入向量数据库,然后将用户输入信息也转换为向量,在向量数据库中匹配最相似的向量,最后由大模型总结检索到的内容。
- 大模型在此过程中仅起总结作用。
- 检索信息的精准度取决于向量相似度匹配的效果。
- 匹配结果可能包含无关内容或遗漏关键信息。
生成内容可能不完整
REG 处理的是文档切片,切片的局部性导致无法看到整篇文档的信息。例如,在回答诸如“列举查查查”和“总结查查查”等问题时,知识库的回答效果往往不完整。
缺乏大局观
REG 无法判断回答问题所需的切片数量,也无法判断文档之间的联系。例如,在法律条文中,新的解释可能覆盖旧的解释,但 REG 无法判断哪个才是最新的。
多轮检索能力较弱
REG 缺乏执行多轮多查询检索的能力,这对于复杂的推理任务至关重要。
尽管出现了一些 REG 优化技术,如 GraphREG、KAG 等,但这些技术尚不成熟,REG 技术远未达到预期效果。
MCP 概述
我们将介绍一种新的思路:通过 MCP 加数据库来提高结构化数据的检索精度,实测效果优于 REG。例如,对于一份学生列表信息,使用 MCP 加数据库的检索效果要比直接使用知识库检索的效果更好。
Function Call 的回顾
早期的 AI 大模型就像知识丰富但被困在屋子里的人,只能依靠自身知识回答问题,无法获取实时数据或与外部系统交互。
Function call 是 OpenAI 在 2023 年提出的重要概念,本质是提供了大模型与外部系统交互的能力,类似于给大模型安装了一个外挂工具箱。
- 大模型遇到无法直接回答的问题时,会主动调用预设的函数,如查询天气、计算数据、访问数据库、获取实时信息。
- code 平台的插件都是基于 Function call 的思路封装的。
Function Call 的缺点
- 实现成本高: 模型本身需要稳定支持 Function call 的调用。
- 适配问题: 不同的模型对 Function call 的实现方式不同,需要进行适配,提高了 AI Agent 的开发门槛。
Function Call 的核心特点
- 模型专属: 不同的模型调用规则可能不一样。
- 即时触发: 模型解析用户意图后可以直接调用工具。
- 简单直接: 可能适合单一的功能调用。
- 显示碎片化: 需要为很多模型单独开发适配层。
- 功能扩展困难: 新增工具时可能需要重新调整接口。
MCP:模型上下文协议
MCP(Model Context Protocol)是由 Anstropy 公司(开发 Claude 模型的公司)推出的开放标准协议,旨在解决 AI 模型与外部数据源工具交互的难题。
MCP 就像一个通用的插头或 USB 接口,制定了统一的规范,无论是连接数据库、第三方 API 还是本地文件等各种数据源,都可以通过这个通用的接口来完成,让 AI 模型与外部工具或数据源之间的交互更加标准化和可复用。
MCP 的工作模式
MCP 使用客户端和服务器的交互模式。
- MCP Host: 比如 Claude 客户端、Cursor 等工具,它们在内部实现了 MCP Client。
- MCP Client: 通过标准的协议和 MCP Server 进行交互。
- MCP Server: 由各种第三方开发者提供,负责实现各种第三方工具的交互逻辑,如访问数据库、访问浏览器、本地文件。
- 标准 MCP 协议: 将结果返回给 MCP Client,最终在 MCP Host 上展示。
在这种模式下,开发者只需要按照标准的 MCP 协议进行开发,无需为每个模型与不同资源的对接重复编写适配代码,可以大大节省开发的工作量。
MCP 的核心特点
- 协议标准化: 可以统一工具的电源格式。
- 生态兼容性: 一次开发就可以直接对接所有兼容 MCP 的模型和客户端。
- 动态扩展: 新增工具时,无需修改模型或客户端的代码,即查即用。
MCP 的核心价值
- 数据孤岛到打通本地云端数据源的交互。
- 从重复开发到工具开发者只需要适配 MCP 协议。
- 从生态割裂到形成统一的工具市场。
MCP 就像 USB 的 Type-C 接口,无论是手机、电脑还是其他外设,都可以通过统一的标准协议进行互联。
MCP 的使用
使用 MCP 需要:
- 找到一个支持 MCP 协议的客户端。
- 找到符合需求的 MCP 服务器。
- 在 MCP 客户端里调用这些服务。
MCP 客户端的能力
MCP 对支持客户端划分了五大能力:
- Tools: 服务器对外暴露的可执行工具,提供给模型调用,从而实现与外部系统的交互。
- Resources: 服务器暴露的数据和内容,提供给客户端进行读取,并作为模型的上下文。
- Promise: 服务器定义的可以复用的提示词模板,用于引导大模型的交互。
- Sampling: 能够让服务器接触客户端,向模型主动发起请求,从而实现更复杂的智能行为。
- Routes: 客户端给服务器指定一些资源和地址,用来告诉服务器应该关注哪些资源,去哪里找这些资源。
目前最常用且被支持最广泛的是 Tools 工具调用。
MCP 客户端的类型
- AI 聊天工具: 比如 Fileie、LibreTXT、CherryStudio。
- AI 编码工具: 比如 Cursor、Windsurf、Clang。
- AI 开发框架: 比如 GinKit、GinAI、Script Bai 等。
MCP 服务器
MCP 服务器的官方描述是:每个程序都通过标准化模型上限文协议来公开特定的功能。MCP 服务器通过标准化协议与客户端进行交互,能够让模型调用特定的数据源或工具和功能。
常见的 MCP 服务器
- 文件和数据访问类: 能够让大模型操作访问本地文件或者数据库,比如 File System MCP Server。
- Web 自动化类: 能够让大模型操作浏览器,比如 Peptium MCP Server。
- 三方工具集成类: 能够让大模型调用三方平台暴露的 API,比如 God 地图的 MCP Server。
查找 MCP 服务器的途径
- 官方的 MCP Server 集合 GitHub 仓库: 包含官方参考事例的 MCP Server、被官方集成的 MCP Server 以及一些第三方社区开发的 MCP Server。
- MCP.SO: 一个三方的 MCP Server 集合平台,目前已经收录了 6000 多家的 MCP Server,提供了非常友好的展示方式,每个 MCP Server 都有具体的配置实例。
- MCP Market: 防速度挺快的,还能按照工具类型进行筛选。
简单 MCP 接入实例
选择 Cherry Studio,因为它对小白用户友好,可以在客户端一键完成必备的网页安装。
- 打开 Cherry Studio 客户端。
- 到设置 MCP 服务器,完成环境安装。
- 在搜索框搜索
文件系统
,点击加号,默认创建 MCP Server 的配置。 - 补充参数,指定允许访问的文件路径。
- 点击保存,服务器绿灯亮起说明配置成功。
- 到聊天区域,选择带有扳手图标的模型(因为底层基于 Function Call 实现 MCP)。
- 打开 MCP 开关。
- 尝试让模型访问桌面上的文件。
- 让模型在目录下写入文件并检查文件内容。
实战:利用 VS Code 加 Client 实现精准的外部知识检索
在后续的实战章节,我们将使用 VS Code 加 Client 来调研 MCP。
数据库的选择:MongoDB
选择 MongoDB,一款流行且开源的文档型数据库,数据以 JSON 格式存储。
- 关系型数据库的表结构是固定的,添加新字段或修改表结构需要复杂的迁移操作。
- MongoDB 的文档数据模型允许在同一个集合里存储不同结构的文档,程序可以根据需要灵活调整,适用于构建持续补充的结构化知识库的场景。
MongoDB 的安装和配置
- 下载 MongoDB Community Server (免费开源版本)。
- 安装完成后,默认监听本地 27017 端口。
- 安装 MongoDB Compass 客户端 (MongoDB 提供的本地 GUI 可视化工具)。
- 通过 MongoDB Compass 连接到本地的 MongoDB Server。
- 通过客户端将数据导入 MongoDB 的数据库。
数据展示
使用学生信息数据进行展示。包括学生信息表、教师表、学生分数表、学生班级表等。
使用 AI 编写脚本导入数据
借助 AI 编写脚本将表格结构化数据导入 MongoDB。
Client 的安装和配置
Client 对 MCP 的建设效果不错,开源免费且国内可用。
- 在 VS Code 插件市场搜索 Client,找到下载量最大的版本并安装。
- 在左上角的工具栏找到 Client 的图标,打开设置,进行模型配置。
- 选择模型提供商(如 OpenRouter),选择免费模型。
- 在聊天窗口进行测试,如果正常输出则配置成功。
配置 MongoDB 的 MCP Server
- 找到支持 MongoDB 的 MCP Server(如
mcp-mongo-server
)。 - 点击工具栏上方的 MCP Server 图标,手动配置。
- 点击 Install Tab,点击下方的 Config MCP Servers,打开 JSON 文件。
- 将 MongoDB MCP Server 提供的配置文件复制到 Client 端口,并保存。
- 如果左侧的 MongoDB 的 MCP Server 的配置的绿灯亮起,说明配置成功。
测试效果
- 提问关于统计学生信息的问题。
- Client 自动识别问题需要调用 MCP,并询问是否允许调用 MongoDB 的 MCP。
- 点击允许。
- MCP 准确地从数据库中查询出结果并给出回答。
优化技巧:全局提示词
MCP Server 为模型提供了防数据库的能力,但是数据库的表结构对于模型来说还是完全黑盒的。模型只能靠猜或者先去获取一下现在有哪些表,这些表的结构是什么再进行操作。
解决方案:
- 在全局提示词里,把表结构相关的信息和要求明确告诉模型,可以让模型更准确更高效地响应。
- 使用 AI 帮助生成表结构的说明。
- 将生成的说明复制到 Client 的全局提示词中。
对比实验:MCP 加数据库 vs. 传统 REG
将相同的数据集导入知识库进行测试(使用 Code 进行测试)。结果显示,在这种数据的检索场景下,MCP 加数据库的效果明显优于传统的 REG 方式。
MCP 加数据库的局限性
- 不能让 AI 检索过大的数据: MCP 加数据库会真正地直流刺口,需要多少数据就查多少数据,如果一次查询的数据量过大,可能会消耗大量的 Token,甚至让 MCP 客户端卡死。
- Token 消耗量大: 很多 MCP 客户端依靠大量的系统提示词来实现与 MCP 的通信,因此使用 MCP Token 的消耗量一定会大幅增长。
总结与展望
MCP 加数据库的方式可以真正降低开发成本,甚至零代码,而且准确性非常高。相信未来一定会成为一种非常热门的产业方式,在智能客服、仓储管理、信息管理这些结构化数据的检索场景下,应该会替代掉传统的 REG 方式。
声明
本教程完全由 Code 秘密花园原创账号全网同名,都叫 Code 秘密花园,其他账号都是搬运。请大家切记上当受骗。