1、步骤
- 输入提出的问题
- LLM(大语言模型)生成可执行的Sql语句
- 根据Sql查询出结果
- 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、安装rookie_text2data插件
GitHub地址:https://github.com/jaguarliuu/rookie_text2data
该插件功能是:自然语言查询 MySQL 数据、Sql的执行。目前支持Mysql、PostgreSQL,后续会逐步增加多个数据库类型。
4、新建工作流
1、开始节点中添加变量名称以及显示名称
变量名称:issue
显示名称:问题
2、第二个节点选择添加节点->工具->rookie_text2data,输入的变量就“/issue”
按照抽屉中的必填项把对应的值填上
数据库连接失败的把 127.0.01或者localhost改为 host.docker.internal 即可
3、第三个节点选择添加节点->模板转换,输入的变量就是第二个节点输出的**/Json**
4、第四个节点选择添加节点->LLM(大语言模型),并提供System信息指导
文本内容:
你是一位精通SQL语言的数据库专家,熟悉MySQL数据库。你的的任务是检查该Sql语句是否有错,如果有错请更正,没有错则输出Sql语句。
回答要求:
1.不能包含任何多余的信息。
2.必须是可以执行的SQL语句。
3.删除掉Sql中的\n,用空格替换。
Json数据:/output
5、第五个节点选择添加节点->工具->rookie_excute_sql,输入的变量“/test”
按照抽屉中的必填项把对应的值填上
6、第六个节点同第三个节点操作
7、第七个节点选择添加节点->LLM(大语言模型),并提供System信息指导,以及User模型指令
文本内容:
你是数据分析专家,分析JSON格式的sql查询结
果,回答用户问题。
关键规则:
1.所有数据已符合用户问题中的条件
2.直接使用提供的数据分析,不质疑数据是否符合条件
3.不需要再次筛选或确认数据类别/时间范围
4.数据为[或空或者None时直接回复"没有查询到相关数
据",不得编造数据
5、提供的结构是Json
数据是:/output
题是:/issue
Sql语句:/text
回答要求:
1.列出详细数据,优先以表格方式列出数据。
2.识别趋势、异常,并提供分析和建议。
3.提供查询的Sql语句。
8、第七个节点选择添加节点->结束,输入的变量“/test”
5、执行效果展示
视频:查看
我们去数据库验证一下:
SELECT COUNT(*) FROM `students` WHERE `age` = 6 AND `gender` = '女';
我们去数据库验证一下:
SELECT `students`.`name`
FROM `students`
INNER JOIN `classes` ON `students`.`class_id` = `classes`.`id`
WHERE `classes`.`name` = 'B' AND `students`.`gender` = '女';
如果涉及的数据库表较多可以采用如下方式:
1、把表结构(含表名、字段、主外键关系)导入到知识库,用知识库来检索生成可执行Sql语句,执行Sql语句,生成数据结果。
2、如果用rookie_text2data插件工具,最好指定相关表名。