六、【AI】Dify自然语言生成Sql并查询数据库(知识库)

1、步骤

  1. 表结构(含表名、字段、主外键关系)导入到知识库
  2. 输入提出的问题
  3. 知识检索(知识库)生成可执行的Sql语句
  4. 根据Sql查询出结果
  5. LLM(大语言模型)对查询结果进行分析

2、准备数据库表

我们这里使用的是Mysql
学生表:

DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '姓名',
  `age` int NOT NULL COMMENT '年龄',
  `class_id` int NOT NULL COMMENT '班级Id',
  `gender` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '性别(男/女)',
  PRIMARY KEY (`id`),
  KEY `class_id` (`class_id`),
  CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生';
INSERT INTO `students` (`id`, `name`, `age`, `class_id`, `gender`) VALUES
(1, 'Emma Li', 6, 1, '女'),
(2, 'Lucas Wang', 7, 1, '男'),
(3, 'Olivia Zhang', 6, 1, '女'),
(4, 'Noah Chen', 7, 1, '男'),
(5, 'Sophia Zhao', 6, 1, '女'),
(6, 'Liam Liu', 8, 2, '男'),
(7, 'Mia Qian', 7, 2, '女'),
(8, 'Ethan Sun', 8, 2, '男'),
(9, 'Ava Zhou', 7, 2, '女'),
(10, 'James Wu', 8, 2, '男'),
(11, 'Isabella Zheng', 9, 3, '女'),
(12, 'Benjamin Feng', 8, 3, '女'),
(13, 'Charlotte Cao', 9, 3, '女'),
(14, 'Mason Deng', 9, 3, '男'),
(15, 'Amelia Xue', 8, 3, '男'),
(16, 'Evelyn Peng', 10, 4, '男'),
(17, 'Alexander Ma', 10, 4, '女'),
(18, 'Abigail Lu', 9, 4, '男'),
(19, 'Daniel Zeng', 10, 4, '女'),
(20, 'Harper Yao', 10, 4, '男'),
(21, 'Michael Xu', 12, 5, '女'),
(22, 'Emily Huang', 11, 5, '男');

班级表:

DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='班级';
INSERT INTO `classes` (`name`) VALUES
('A'),
('B'),
('C'),
('D'),
('E');

3、安装“表结构写入知识库”插件

在这里插入图片描述

4、新建“表结构写入知识库”工作流

在这里插入图片描述
运行后知识库就会多两个文档记录
在这里插入图片描述

5、新建“根据知识库生成可执行Sql语句”工作流

1、开始
2、知识检索->引用知识库
3、校验知识库和提出问题是否有关联->返回True/False
4、条件分支->True/False
5、自然语言生成查询语句
6、检查Sql语句格式
7、执行Sql并返回Json
8、将json格式转换成string
9、对查询结果进行分析
10、直接回复
在这里插入图片描述

6、执行效果展示

在这里插入图片描述
详细DSL文件(可导入):下载