当前位置: 首页 > news >正文

MCP + 数据库,一种比 RAG 检索效果更好的新方式!

在开始学习之前,我们先了解一下,RAG 技术目前的局限性。

资料推荐

💡MCP中转API推荐
✨中转使用教程

一、背景:RAG 的局限性
RAG,即检索增强生成(Retrieval-Augmented Generation),是目前大模型领域的一个热门方向。它将信息检索技术与生成式模型相结合,解决大模型在知识准确性、上下文理解以及对最新信息的利用等方面的难题。
在之前的教程中,如何拥有一个无限制、可联网、带本地知识库的私人 DeepSeek? 我们一起学习了如何在本地部署模型并且引入知识库。
但是很多小伙伴可能对 RAG 有点误解,觉得我们只要将一些额外的知识通过 RAG 导入,模型就能完美的掌握并且回答这些知识相关的问题。但事实和想象还是有差距的,大家在实际尝试后可能会发现,RAG 的精准度似乎没有那么好。
从 RAG 本身技术原理的角度出发,目前存在着以下问题:

检索精度不足:首先,RAG 最核心的就是先将知识转换成 “向量“ ,导入 “向量数据库“,然后在将用户输入的信息也转换成 “向量” ,然后再去向量数据库匹配出相似的 “向量“,最后再由大模型去总结检索到的内容。
在这里插入图片描述
从这个过程中我们看出,大模型仅仅起到了总结的作用,而检索到信息的精准度大部分情况下取决于向量的相似度匹配,检索结果可能包含无关内容(低精确率)或遗漏关键信息(低召回率)。

生成内容不完整:由于 RAG 处理的是文档的切片,而切片的局部性注定了它无法看到整篇文档的信息,因此在回答诸如“列举XXX”“总结XXX”等问题时,一般回答是不完整的。
缺乏大局观:RAG 无法判断需要多少个切片才能回答问题,也无法判断文档间的联系。例如,在法律条文中,新的解释可能覆盖旧的解释,但 RAG 无法判断哪个是最新的。
多轮检索能力弱:RAG 缺乏执行多轮、多查询检索的能力,而这对推理任务来说是必不可少的。

尽管近期也有些新出现的技术,如 GraphRAG、KAG 等能够在一定程度上解决这些问题,但都还不成熟,目前的 RAG 技术还远远达不到我们预期想要的效果。
下面,我们将介绍一个新的方案,通过 MCP + 数据库来提高结构化数据的检索精准度,基本上能够实现 text to SQL 的效果,实测的检索效果也要比 RAG 好很多,例如我们有这样一份学生列表的信息:
在这里插入图片描述
我们用一个稍微复杂一点问题(身高 180-190cm 之间的女生有哪些?)来测试:
在这里插入图片描述
实战:使用 MCP 调用数据库
首先,为了方便给大家进行演示,我们先来构造一个简单的数据库案例。
4.1 Mongodb
这里我们选择的数据库是 MongoDB:一款流行的开源的文档型数据库。MongoDB 使用文档型数据模型,数据以 JSON 格式存储。

在这里插入图片描述
为什么选择 MongoDB 而不是 sqlite 之类的关系型数据库呢,主要还是因为在关系型数据库中,表结构是固定的,若要添加新字段或修改表结构,往往需要进行复杂的迁移操作。而 MongoDB 的文档型数据模型,允许在同一个集合中存储不同结构的文档,应用程序可以根据需要灵活地添加或修改字段,无需事先定义严格的表结构,这对于我们想构建一个持续补充的结构化知识库的场景,是非常友好的。
大家可以直接在官方文档下载安装 MongoDB Community Server(MongoDB 的免费开源版本):


安装完成后,其会默认监听我们本地的 27017 端口
然后,为了可视化查看数据,我们还需要安装 MongoDB Compass (MongoDB 提供的本地 GUI 可视化工具)
在这里插入图片描述

安装完成后,我们通过 MongoDB Compass 客户端链接到本地的 MongoDB Server:

在这里插入图片描述
随后,大家就可以通过客户端将自己的数据导入 MongoDB 数据库,在后面的例子中,我们将使用一个学生信息的数据来进行演示,假定我们的数据是这样的:
在这里插入图片描述
如果你不知道怎么导入 MongoDB ,可以借助 AI 来帮你编写导入脚本,然后根据 AI 提示进行导入即可:

提示词:帮我编写一个脚本,可以将当前表格中的数据导入我本地的 MongoDB 数据库,数据库的名称为 studentManagement

在这里插入图片描述
然后根据 AI 提示运行脚本进行导入即可,成功导入后的效果:
在这里插入图片描述
学生信息表:

在这里插入图片描述
学生分数表:
在这里插入图片描述

http://www.xdnf.cn/news/59725.html

相关文章:

  • Python+CoppeliaSim+ZMQ remote API控制机器人跳舞
  • 【c语言】指针进阶
  • 2025年首届人形机器人半程马拉松比赛(附机器人照片)
  • [BJDCTF2020]EzPHP
  • JVM有什么调优参数?
  • RSS 2025|苏黎世提出「LLM-MPC混合架构」增强自动驾驶,推理速度提升10.5倍!
  • 阿里云人工智能大模型MCP协议
  • Node.js和js到底什么关系
  • Hyperlane:Rust Web框架的性能新标杆
  • Vue如何获取Dom
  • Oracle DBA培训一般多长时间?
  • 递归的模板 (以反转链表为例)
  • .net core 中directory , directoryinfo ,file, fileinfo区别,联系,场景
  • mindspeed-rl使用注意事项
  • unity TEngine学习4
  • 驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程
  • AIWS全链路开发与MCP框架下的高可用服务架构设计
  • AI问答Bug修改
  • 教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!
  • 数据结构——栈和队列
  • Debian GNU/Linux的新手入门介绍
  • 动态规划-零钱兑换
  • MCP 框架中,stdio 模式和 SSE(Server-Sent Events) 模式的区别是什么
  • 01_Flask快速入门教程介绍
  • 楼宇自控怎样推动能源高效利用与建筑设备的科学管理
  • 玩转Docker | 使用Docker部署nullboard任务管理工具
  • 介绍XML
  • 【C#】.net core 6.0调用MVC API接口时,提示Unsupported Media Type,状态码415
  • 多源异构网络安全数据(CAPEC、CPE、CVE、CVSS、CWE)的作用、数据内容及其相互联系的详细分析
  • 学习笔记二十二—— 并发五大常见陷阱