利用大模型和MCP协议实现用自然语言去查询MongoDB数据库
作者:厦门大学计算机系2022级本科生 赵家宇
指导老师:厦门大学计算机系 林子雨 副教授
配套教材:林子雨编著《数据库系统原理(微课版)》
【大模型作业要求】
利用大模型和MCP协议,使用VS Code和AI编程插件Cline,实现用自然语言去查询各种数据库(比如,输入文字“请查询学生选课成绩的平均分”来查询数据库),要求统一使用我们课堂教学中用到的选课数据库,要求使用文档数据库MongoDB,要求提交WORD文档,文档里要详细描述实验实现的每个细节步骤,要求给出每步截图和文字说明。排版格式要规范。
目标和流程
本实践作业目标为:利用大模型和MCP协议,使用VSCode及其扩展插件Cline,实现用自然语言进行文档数据库MongoDB的访问和控制。其技术流程图如下:
因此,为了完成如上任务,我们将分别通过安装和配置MongoDB文档数据库、MCP Server和VSCode+Cline的开发环境来完成。
1. 安装MongoDB
MongoDB提供了平台MongoDB Atlas,其免费提供最高 512MB 存储空间的云数据库(以及配套的RAM和共享算力);但为了更好与本地服务器配合,在本实验中我们将使用本地运行的MongoDB进行。
MongoDB支持.msi和.zip格式的安装。.zip格式的好处是配置灵活,但是需要配置的地方很多,容易出错;如果没有特殊需求,建议使用.msi格式安装,其好处是简单快捷且自带可视化组件。下面为使用.msi格式安装的方法。
1.1 登录官网,下载.msi安装文件
1.2 调整安装路径,进行相关配置
在安装界面中可以选择Complete和Custom安装方式,前者将全部采用默认方式(包括安装路径和基础配置),为了防止数据库安装在C盘占用过多磁盘空间,此处选择Custom进行配置。
在安装过程中,注意修改安装软件的目录(可以放到磁盘空间充足的目录下),此处我们选择安装MongoDB Compass,这是一个MongoDB官方提供的可视化管理软件,对于我们调试和维护MongoDB数据库有着很大作用。当然,也可以选择直接安装MongoDB Shell来控制,但Compass中已经内置了Shell,因此此处不再重复安装。
1.3 打开Compass,配置本地数据库
在完成上述安装后,桌面上应自动出现MongoDB Compass的图标,双击即可打开Compass可视化管理界面。此处可以选择添加到已经运行的网络数据库,我们这里选择Add new connection来创建一个本地数据库。电机Add new connection,软件会帮我们自动配置好一个连接的基本信息,可以手动修改连接的名称方便辨别。需要注意MongoDB服务一般运行在27017端口。
完成各配置选项的选择后,点击Save&Connect,将开始运行刚刚配置好的本地端口数据库服务。点击右上角的Open MangoDB shell,即可进入MangoDB shell的界面,其使用方式与独立安装的版本基本相同,且还带有自动补全和联想搜索等功能,方便新手入门。可以先输入一些简单指令(如db或show dbs)来测试数据库服务是否正常运行。在任务管理器中查找后台进程MongoDB Server或在浏览器中输入http://localhost:27017都能检查数据库服务是否正常开启。
1.4 导入选课数据库的数据
本实验中我们需要导入原关系数据库SSMS中的数据到文件数据库MongoDB,这个过程涉及到数据库格式之间的转换。一种办法是编写一个转换的脚本或使用市面上一些工具(如Navicat),但这些方法较为繁琐且容易出错。考虑到本实验涉及的数据不会过于复杂,因此此处我们采取一种较为取巧的方式,即先将SSMS中数据库的数据导出为某种特定平面文件(如.csv或.txt),在通过MongoDB自带的导入数据功能实现导入。平面文件(flat file)去除了所有特定应用(程序)格式的电子记录,从而使数据元素可以迁移到其他的应用上进行处理。
1.4.1 从SSMS中导出数据到.csv文件
因此,我们需要首先导出SSMS中的数据,此处可以使用SSMS自带的SQL Server导入和导出向导进行。其入口为在对象资源管理器中右键需要导出的数据库(不是表或服务器),选择“任务-导出数据”唤出窗口。
接下来按照如下过程依次选择数据源、导出源、导出文件路径、导出规则等配置要求,其中大部分选择默认选项即可。如果SSMS配置过OLE DB,需要将输入源选择为“Microsoft OLE DB Provider for SQL Server”,否则一般为“SQL Server Native Client”。导出源(目标)选择为“Flat File Destination”(或“平面文件目标”),并将文件路径选为一个.csv文件;在导出时,一个表导出为一个.csv文件(建议.csv命名为与源数据库中表相同的文件名方便比对)。其他选项全部按默认即可。
此处需要注意,为了保证部分中文内容的正确输出,我们的代码页设定为936 GBK而非UTF-8,这会导致在后续MongoDB的导入过程中产生问题,因为MongoDB默认接受UTF-8编码的数据文件。可以选择将代码页设定为UTF-8并检查输出的内容是否准确。或者直接选择GBK,在下文中会有解决这个问题的办法。
其余选项均按默认配置,由于我们后面会使用MongoDB Compass中的可视化导入方式,因此此处也不需要编辑映射。一直向下运行直到有如下成功的提示即可。
1.4.2 调整.csv文件的编码格式
接下来,我们需要解决在1.4.1中遇到的编码格式问题。我们可以使用各种文本编辑工具打开导出的.csv,并将其按UTF-8的编码格式保存即可。这里使用VSCode作演示。
使用VSCode打开导出的.csv文件,点击右下角“GBK”,在上方菜单栏中选择“通过编码保存”,选择“UTF-8”,即可把.csv文件转换为UTF-8编码格式。依次将每个.csv文件都转换成UTF-9编码。
1.4.3 向MongoDB中导入数据并设置格式
接下来向MongoDB中导入数据,可以在Mongo Shell中使用mongoimport命令来传入数据,但是这种方法不仅传入参数较为繁杂,而且很难方便的调整各个数据字段的数据类型。这里我们使用完成安装的可视化工具MongoDB Compass来导入数据。进入连接后,新建一个数据库和集合(Collection),在集合的控制界面里点击ADD DATA,选择Import JSON or CSV file,分别选择经过格式转换的.csv文件,并依次调整各个输入字段的数据类型。由于此处的默认数据类型是根据内容自动判断的,因此可能会有一些字段从字符串类型被分析成整数类型,需要根据实际的情况进行调整。
确认每一个数据字段的类型和内容都正确后,点击Import,就完成了一个.csv文件的导入。可以在对应的集合中看到传入的每一条数据都以Json格式被保存,这样就实现了关系数据库中的关系向文件数据库中的文件的转换;在关系数据库中的每张表都可以转换成文件数据库中的集合。
2. 安装Cline和MCP Server
本实验中我们将通过VSCode的扩展Cline通过调用MCP Server来访问本地数据库MongoDB,这个流程在于通过引入Deepseek API,实现将自然语言处理转换为数据库查询语言再直接运行并输出结果,能够帮助大幅度简化编程流程,降低数据查询难度。
2.1 选择与MongoDB适配的MCP Server
MCP(Model Context Protocol,模型上下文协议)是一种由Anthropic公司推出的一个开放标准协议,目的就是为了解决 AI 模型与外部数据源、工具交互的难题。本实验中,我们将使用MCP Server作为大模型和MongoDB数据库链接交互的桥梁;因此,我们需要自己开发或安装市面上已有的与MongoDB适配的MCP Server。
MCP Server列表可以参照https://glama.ai/mcp/servers或https://github.com/modelcontextprotocol/servers?tab=readme-ov-file,在这些列表中寻找到与MongoDB适配的MCP Server,此处我们使用一个已经开发好的MCP Server(项目地址:https://github.com/kiliczsh/mcp-mongo-server)进行安装。该MCP Server已经提供了如下的配置列表。
我们可以直接参照如上流程在Cline中使用;但其需要的npx指令在Cline中可能出现无法识别的情况。因此,我们可以采取完整安装的方式,即把该MCP Server直接安装在本地机器上来运行,这样可以避免通过调用npx指令而产生问题。
首先,需要保证自己的电脑环境配置好了Node.js,可以在命令行中输入npm --version和node --version来确认是否安装完成。如果没有完成安装,可以到Node.js 官方网站(中文网站:https://nodejs.org/zh-cn)下载一键完成安装。在安装完成后,重试上面的指令,确保能够得到类似下方的结果。
接下来,我们直接通过npm安装MCP Server的完整包。在命令行环境中运行指令npm install -g mcp-mongo-server,等待安装完成。安装的MCP Server全局包需要通过一个批处理文件.cmd进行运行。使用指令npm root -g可以查找npm安装的全局包路径,而该路径的上一层目录就是全局可执行文件所在的目录。如该指令返回结果为“C:\Users...\Roaming\npm\node_modules”,从而我们需要打开“C:\Users...\Roaming\npm”这个目录。在其中可以看到以下两个文件。
其中的mongodb.cmd批处理文件就是我们需要的全局包可执行文件入口。
2.2 安装Cline并配置大模型API
打开VSCode,单击左侧的扩展按钮(或使用Ctrl+Shift+X)唤出扩展界面,在上方的搜索框中搜索“Cline”,安装下面搜索结果中的同名扩展。安装好后,在左侧的图标栏中应该会出现Cline图标,点击即可进入Cline界面,界面如下所示。
Cline是一款专为 VSCode设计的AI编程助手,具有其强大的功能和灵活的配置。结合了 DeepSeek-V3和DeepSeek-R1等高性能模型,Cline 不仅能够提供智能代码生成,还能执行复杂的推理任务。因此,如果想要使用Cline,就需要配置好相应的大模型。本实验中我们将使用DeepSeek的API。点击Cline右上角的齿轮图标进入设置界面。
如上图所示,将API Provider设定为DeepSeek,Model设置为deepseek-chat(或者按照需要设置成自己需要的模型即可)。使用这些大模型的API需要获得相应的API Key,这里我们需要通过DeepSeek官方申请自己的API Key。
进入DeepSeek开放平台(https://platform.deepseek.com/api_keys),完成账号注册和登录,在API Keys界面中申请自己的API Key。点击“创建API Key”并自行设定API Key的名称。完成创建后,立即保存生成的Key序列(仅在刚创建完是可以查看和复制)。在界面中也能看到刚刚创建好的API Key项。
将复制好的生成的Key序列填入Cline设置界面中的DeepSeek API Key项目,计科调用自己申请的API接口向DeepSeek调用数据。需要注意DeepSeek账户中余额为0时可能无法正常调用该API,可以适当充值(可以一次充值1-2元)来保证API调试能够正常使用。当然,根据实际需要也可以使用其他一些免费的API来完成类似操作。
在完成了Cline设置界面中模型相关的设置后点击右上角的Done节课回到主界面。在下方输入框中输入一些内容来测试API是否能够正常响应。例如输入“你好,你是谁?”后,应该能够获得类似下面的结果。
2.3 在Cline中配置MCP Server
接下来,我们需要让Cline拥有可以调用本地安装好的MCP Server程序文件。点击Cline界面上方的图标(可以让光标在图标上悬浮查看图标指向的内容)进入MCP Server的配置界面。
进入MCP Server的配置界面后点击Installed,然后点击下方的 Configure MCP Servers,然后发现打开了一个 JSON 文件,这就是 Cline 用于存放 MCP 配置的地方,初始安装时淫荡为一个空对象,我们需要在这里面增加我们安装的MCP Server的调用方式。在该json文件中按照如下方式进行修改,由于我们需要调用.cmd批处理文件,因此我们使用cmd命令,并在参数中传递在2.1中找到的文件路径,并附加MongoDB的访问链接(本地数据库默认为27017端口,后面加上使用的数据库即可)。
{
"mcpServers": {
"mongodb": {
"command": "cmd",
"args": [
"/c",
"你的mongodb.cmd路径,注意Windows环境需要用\\作为分隔",
"mongodb://localhost:27017/你的数据库名称?authSource=admin"
]
}
}
}
保存该json文件后观察左侧的 mongodb 绿灯亮起,说明配置成功。如果为红灯,则检查npm安装是否完成、路径是否正确,然后重复上述步骤。
2.4 测试通过Cline连接和访问数据库
依次完成上述的所有步骤后,理论上已经可以通过Cline调用大模型API来将自然语言请求转为MongoDB查询代码进行数据库内容的访问。下面我们简单测试这个过程是否正确。
回到Cline主界面,将右下角的模式选为Act,然后点击文本输入框上方的Auto-approve,将其中的各个权限全部勾选,包括文件和目录的读写权限、使用浏览器的权限和调用MCP servers的权限等。完成这些准备后,在输入框中输入一些问题来测试数据库是否能够正常访问,如输入“目前一共有多少门课?哪门课选的人数最多?哪门课的平均分最高?”,在回答期间需要点击一部分Approve来允许模型进行下一步调用和相应的文件操作。
如果得到了类似上方的回答,那么全流程已跑通,已经成功完成了使用VSCode + Cline调用MCP Server来连接和查询MongoDB文件数据库的全部配置工作,开始使用这些工具来提高编程效率、简化数据操作。