支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Dify结合MCP查询数据库

发布日期:2025-04-23 07:50:29 浏览次数: 1723 作者:PM墨者
推荐语

深入探索Dify结合MCP查询数据库的实践应用,掌握更灵活的数据库查询技术。

核心内容:
1. MCP服务DbHub的介绍与选择理由
2. DbHub服务的四种部署方案及Docker部署步骤
3. Dify中MCP_SSE插件的使用与数据库脚本示例

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家
最近比较忙,有段时间没有更新,其实这个demo之前就在做,但是一直没时间写这篇,刚好今天稍微空闲一点,就带大家一起聊聊。
今天介绍的demo就如题目所说,是一个查询数据库的MCP服务,其实之前我们也有一篇讲text2sql的案例《DeepSeek+dify查询数据库" data-itemshowtype="0" target="_blank" linktype="text" data-linktype="2">DeepSeek+Dify查询数据库》,但是因为我们表结构作为知识库,需要我们把这个表结构做的很丰富,确保能够更精准的生成相应的SQL语句,今天介绍的MCP查询数据库会更灵活一些。
一、MCP服务

我们今天介绍的MCP服务是DbHub,我们可以在mcp.so网站找到相应的服务介绍,可以直接通过下列链接进入:

https://mcp.so/zh/server/dbhub/bytebase?tab=content
当然数据库的MCP还是有很多的,我只是当时选择了这个MCP服务,所以用这个做举例,有兴趣的可以自行去查看选择,部分数据库相关的MCP服务如下:
DbHub的Github仓库如下:
https://github.com/bytebase/dbhub
因为没有线上的服务,只能我们自己去部署启动一个DbHub的MCP服务供我们使用,下面先讲下如何部署DbHub。
安装部署DbHub服务有四种方案,可以用Docker,NPM,Claude Desktop,Cursor这四种方式,我对Docker比较熟悉一些,也有相关环境,就用Docker部署启动的,其余方式没有试过,有兴趣的可以试试。
上面就是其他三种方式,下面我们按照Docker的方式去执行,命令如下:
docker run  --init --name dbhub --publish 8080:8080 bytebase/dbhub --transport sse --port 8080 --dsn "mysql://<用户名>:<密码>@127.0.0.1:3306/<数据库名称>?sslmode=disable"
上面命令需要替换一下用户名,密码和数据库名,不需要带<>,按照你们实际的一个参数去填写。
我是windows,所以在docker desktop中可以看到container
启动后我们可以看到相关的日志:
到这儿我们算启动了MCP服务,下面我们就要去Dify中去使用。

 

二、Dify内使用MCP服务

之前一篇文章《Dify插件本地无法安装解决方案》其实需要安装的插件就是我们这里需要用到的:MCP_SSE插件

下面先看看这次Demo的整体界面,其实很简单,就是一个开始一个结束再加上一个知识库和一个Agent节点,
开始节点没有做任何设置,都是默认,不再做过多讲解:
知识检索节点
我的数据库脚本如下:
学生表:
CREATE TABLE `students` ( `student_id` int NOT NULL AUTO_INCREMENT COMMENT '学生唯一标识', `student_number` char(12) COLLATE utf8mb4_bin NOT NULL COMMENT '学号(规则:入学年份+院系代码+序号)', `name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '学生姓名', `gender` enum('男','女','其他') COLLATE utf8mb4_bin DEFAULT NULL COMMENT '性别', `birth_date` date DEFAULT NULL COMMENT '出生日期', `class_id` int NOT NULL COMMENT '所属班级ID', `enrollment_date` date NOT NULL COMMENT '入学日期', `contact_phone` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '联系电话', PRIMARY KEY (`student_id`), UNIQUE KEY `student_number` (`student_number`), KEY `idx_student_name` (`name`), KEY `fk_student_class` (`class_id`), CONSTRAINT `fk_student_class` FOREIGN KEY (`class_id`) REFERENCES `classes` (`class_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='学生基本信息表';
教师表:
CREATE TABLE `teachers` (  `teacher_id` int NOT NULL AUTO_INCREMENT COMMENT '教师唯一标识',  `name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '教师姓名',  `gender` enum('男','女','其他') COLLATE utf8mb4_bin DEFAULT NULL COMMENT '性别',  `contact_phone` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '联系电话',  `email` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '电子邮箱',  `hire_date` date NOT NULL COMMENT '入职日期',  PRIMARY KEY (`teacher_id`),  KEY `idx_teacher_name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='教师基本信息表';
班级表:
CREATE TABLE `classes` (  `class_id` int NOT NULL AUTO_INCREMENT COMMENT '班级唯一标识',  `class_name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '班级名称(例:2023级1班)',  `head_teacher_id` int NOT NULL COMMENT '班主任ID',  `create_year` year NOT NULL COMMENT '创建年份',  PRIMARY KEY (`class_id`),  KEY `fk_head_teacher` (`head_teacher_id`),  CONSTRAINT `fk_head_teacher` FOREIGN KEY (`head_teacher_id`) REFERENCES `teachers` (`teacher_id`)) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='班级信息表';
课程信息表:
CREATE TABLE `courses` (  `course_id` int NOT NULL AUTO_INCREMENT COMMENT '课程唯一标识',  `course_code` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '课程代码(例:MATH101)',  `course_name` varchar(100) COLLATE utf8mb4_bin NOT NULL COMMENT '课程名称',  `credit` decimal(3,1) NOT NULL COMMENT '学分',  `teacher_id` int NOT NULL COMMENT '负责教师ID',  `course_hours` smallint DEFAULT NULL COMMENT '课时数',  PRIMARY KEY (`course_id`),  UNIQUE KEY `course_code` (`course_code`),  KEY `fk_course_teacher` (`teacher_id`),  CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teachers` (`teacher_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='课程信息表';
学生考试成绩表:
CREATE TABLE `exam_results` (  `result_id` int NOT NULL AUTO_INCREMENT COMMENT '成绩记录唯一标识',  `student_id` int NOT NULL COMMENT '学生ID',  `course_id` int NOT NULL COMMENT '课程ID',  `exam_date` date NOT NULL COMMENT '考试日期',  `score` decimal(5,2) DEFAULT NULL COMMENT '考试成绩',  `exam_type` enum('期中','期末','补考','测验') COLLATE utf8mb4_bin NOT NULL COMMENT '考试类型',  `recorder_id` int NOT NULL COMMENT '录入教师ID',  `record_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '录入时间',  PRIMARY KEY (`result_id`),  UNIQUE KEY `unique_exam_record` (`student_id`,`course_id`,`exam_date`,`exam_type`),  KEY `fk_result_course` (`course_id`),  KEY `fk_result_recorder` (`recorder_id`),  CONSTRAINT `fk_result_course` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`),  CONSTRAINT `fk_result_recorder` FOREIGN KEY (`recorder_id`) REFERENCES `teachers` (`teacher_id`),  CONSTRAINT `fk_result_student` FOREIGN KEY (`student_id`) REFERENCES `students` (`student_id`),  CONSTRAINT `exam_results_chk_1` CHECK ((`score` between 0 and 100))) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='学生考试成绩表';
AGENT节点
首先是需要选择AGENT策略,我这里选择的是Dify Agent策略插件,选择的是FunctionCalling:
选择完成后会需要选择模型,这里我使用的是火山的V3模型,这里选择能够支持工具调用的模型即可:
下面就是工具列表,也就是我们之前说的MCP_SSE插件,它有两个工具,一个是获取MCP工具列表,一个是调用MCP工具,这里我们需要两个都选择:
MCP服务器地址可以不用填写,因为MCP_SSE插件授权时候已经填写了。
下面就是指令和查询,这两部分根据实际情况进行prompt提示词的输入,我这就是个简单的demo,就写的很简单,根据用户输入进行查询:
直接回复节点也很简单,就是把AGENT节点的输出作为参数进行回复
最大迭代次数就是调用工具后的一个迭代次数,默认是3次,简单的使用是够了,如果使用过程中发现不够可以调整。
好了,上面都配置好之后我们开始看看效果了。
我的数据库里面有有学生表,班级表等数据,下面我们的提问都是围绕这些内容进行:
首先我们可以看看,能够使用哪些工具:
可以看到,工作流是走了MCP服务的。
在Agent策略中,进行了两次迭代,
第一次是调用工具mcp_sse_list_tools然后获取了对应的工具信息:
第二次迭代把英文的内容进行中文转换:
下面我们来问问,可以查询哪个数据库的数据:
可以看到DbHub这个MCP服务可以连接四种数据库,我们现在用的是MySQL数据库,状态是已激活。
下面我们看看查询功能,我们查询一下所有学生信息:
可以看到,查询语句就是
select * from students
我们再来看看查询陈小明的成绩能不能实现:
通过上面截图可以看到,给出的查询语句是有问题的,字段名称不一致,然后会在后面调整校正,最后也给出了正确的数据。
剩下的我就不在多做演示,有兴趣的小伙伴可以自行去搭建测试。
MCP服务其实在现阶段,Dify的支持还是欠缺了点,使用的感受还是不如其他的一些客户端,比如我用的cherry studio,这个给我感觉会更兼容一些,使用起来会更方便一些,剩余的就是cursor也很好用,有空我也会去介绍一下这些工具的使用。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询