利用大模型和MCP协议实现用自然语言去查询MySQL数据库
作者:厦门大学计算机系2022级本科生 丁甜缘
指导老师:厦门大学计算机系 林子雨 副教授
配套教材:林子雨编著《数据库系统原理(微课版)》
一、大模型作业要求
利用大模型和MCP协议,使用VS Code和AI编程插件Cline,实现用自然语言去查询各种数据库(比如,输入文字“请查询学生选课成绩的平均分”来查询数据库),要求统一使用我们课堂教学中用到的选课数据库,要求使用关系数据库(比如MySQL),要求提交WORD文档,文档里要详细描述实验实现的每个细节步骤,要求给出每步截图和文字说明。排版格式要规范。
二、Cline插件安装
三、MCP-server 安装和使用
(一)配置好模型厂商API key
我们选择openrouter,主要是因为 openrouter提供部分免费和收费的模型。而且国内网络访问它也没有限制。通过它可以使用免费的google gemini.
如何获取router密钥?
(1)进入网站https://openrouter.ai
你可以用 Google 账号或 MetaMask 钱包登录
(2)创建 API 密钥
进入 Keys 菜单或直接访问 OpenRouter Keys
点击 Create Key 开始创建
在弹出对话框中为 API 密钥取一个名字,例如 “LobeChat Key”
留空 Credit limit 表示不设置金额限制
在弹出的对话框中复制 API 密钥,并妥善保存
请安全地存储密钥,因为它只会出现一次。如果您意外丢失它,您将需要创建一个新密钥。
(3)回到vscode,点击cline插件,将刚才得到的key复制进去
注意选择google/gemini-2.0-flash-exp:free, 因为这个免费
(二)下载mcp-server
(1)安装mysql-mcp-server 组件包
在vscode终端或者window的cmd窗口运行如下命令
pip install mysql-mcp-server -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装完成后,我们在终端输入
pip show mysql-mcp-server
确保这个组件安装完成。
(2)运行SQL 脚本
运行上课时老师提供的学生选课数据库脚本
DROP DATABASE test;
CREATE DATABASE test;
USE test;
DROP TABLE Student;
CREATE TABLE Student
(Sno CHAR(7) ,
Sname VARCHAR(10),
Ssex CHAR(2),
Sage INT,
Sdept CHAR(20));
INSERT INTO Student VALUES('2024001','林书凡','男',18,'MA');
INSERT INTO Student VALUES('2024002','李欣然','女',19,'IS');
INSERT INTO Student VALUES('2024003','王武义','男',20,'CS');
INSERT INTO Student VALUES('2024004','苏文甜','女',19,'CS');
DROP TABLE Course;
CREATE TABLE Course
(Cno CHAR(5),
Cname VARCHAR(20),
Cpno CHAR(5),
Ccredit INT);
INSERT INTO Course VALUES('1','大数据' ,'3',2);
INSERT INTO Course VALUES('2','操作系统',5 ,4);
INSERT INTO Course VALUES('3','数据库' ,'5',4);
INSERT INTO Course VALUES('4','编译原理' ,null,4);
INSERT INTO Course VALUES('5','编程语言' ,null,2);
INSERT INTO Course VALUES('6','数据挖掘' ,'3',2);
DROP TABLE SC;
CREATE TABLE SC
(Sno CHAR(7),
Cno CHAR(5),
Grade INT);
INSERT INTO SC VALUES('2024001','1',97);
INSERT INTO SC VALUES('2024001','2',78);
INSERT INTO SC VALUES('2024001','3',86);
INSERT INTO SC VALUES('2024002','2',85);
INSERT INTO SC VALUES('2024002','3',77);
DROP TABLE Teacher;
CREATE TABLE Teacher
(Tno CHAR(5),
Tname VARCHAR(10),
Tsex CHAR(2),
Tage INT
);
INSERT INTO Teacher VALUES('97001','林彤文','男',45);
INSERT INTO Teacher VALUES('97002','司马鹰松','男',33);
INSERT INTO Teacher VALUES('97003','王明天','男',38);
INSERT INTO Teacher VALUES('97004','马晓燕','女',36);
INSERT INTO Teacher VALUES('97005','张勇','男',51);
DROP TABLE TC;
CREATE TABLE TC
(Tno CHAR(5),
Cno CHAR(5)
);
INSERT INTO TC VALUES('97001','1');
INSERT INTO TC VALUES('97001','3');
INSERT INTO TC VALUES('97002','2');
INSERT INTO TC VALUES('97003','4');
INSERT INTO TC VALUES('97004','5');
INSERT INTO TC VALUES('97004','6');
INSERT INTO TC VALUES('97005','6');
下面是运行SQL语句的截图:
需要记录如下相关信息:
MYSQL_HOST=localhost # Database host
MYSQL_PORT=3306 # Optional: Database port (defaults to 3306 if not specified)
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
(3)cline 手工安装mysql-mcp-server 组件包
在文件中写下相关信息
代码如下,注意一定要在mcpServers的大括号里写,否则无效
"mysql": {
"command": "uv",
"args": [
"run",
"mysql_mcp_server"
],
"env": {
"MYSQL_HOST": "192.168.1.5",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "xxxxxx",
"MYSQL_DATABASE": "student_score"
},
"disabled": false,
"autoApprove": []},
(4)uv安装
pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple/
确保电脑上有uv 运行环境,这样他们就可以执行command 命令了。
以上配置完成后我们就可在cline 聊天对话形式测试它的可用性了。
安装成功后,可以看到如下界面
(三)验证测试
(1)我们在cline聊天对话中输入内容,先让大模型告诉我这个数据库有哪些表。
(2)问有多少门课,看到有七门
(3)问学生名字
(4)问林书凡选的课和成绩
(5)问有几个老师
(6)问林彤文教了什么课