五、【AI】Dify自然语言生成Sql并查询数据库

1、步骤

在这里插入图片描述

  1. 输入提出的问题
  2. LLM(大语言模型)生成可执行的Sql语句
  3. 根据Sql查询出结果
  4. 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插件工具,最好指定相关表名。

<think>好的,我现在需要帮助用户找到关于Dify查询数据库的提示词或使用方法的示例。首先,用户的问题是关于如何在Dify中使用查询数据库的功能,他们可能需要具体的步骤或者示例提示词来参考。 首先,我应该回忆一下Dify的基本功能。Dify是一个用于构建和部署AI应用的平台,支持通过编排流程和工具集成来扩展大模型的能力。根据用户提供的引用内容,引用[1]提到向量数据库在RAG应用中的重要性,而引用[2]则提到工具扩展大模型能力,特别是通过配置工具如Wikipedia搜索来收集信息。因此,Dify查询数据库可能涉及到配置相应的工具或利用内置功能。 接下来,用户可能需要知道如何在提示词中调用数据库查询功能。根据引用[2],在提示词中用自然语言描述即可调用工具,比如使用wikipedia_search工具。类似的,查询数据库可能需要在提示词中明确指定要查询的数据或条件。 我需要考虑用户可能的场景,比如他们可能希望从数据库中检索特定信息,例如用户数据、产品信息等。因此,示例提示词应该涵盖这些常见用例。同时,可能需要指导用户如何在Dify中配置数据库连接,比如选择数据源、设置查询参数等。 还需要确保回答符合系统级指令,比如正确使用LaTeX格式,但在这个问题中可能涉及较少,除非有数学表达式。不过用户的问题主要涉及操作步骤和示例,所以可能不需要太多LaTeX。但要注意行内表达式用$...$,独立公式用$$...$$。 然后,用户可能需要具体的步骤说明,例如如何配置数据库工具,如何在提示词中引用该工具,以及如何测试查询是否有效。此外,示例提示词应该清晰展示如何结构化查询请求,例如“查询用户表中最近7天活跃的用户”或“检索产品库存中价格低于$100的商品”。 还需要考虑用户可能遇到的常见问题,比如权限设置、查询语法是否正确、结果处理等,但用户当前的问题可能更关注基础用法,所以先提供基本示例和步骤,再建议优化方法或高级配置作为相关问题。 最后,根据用户提供的引用,特别是引用[1]和[2],在回答中适当引用这些内容,比如提到向量数据库的重要性或工具配置的方法,以增强回答的可信度。 总结回答结构:先介绍Dify查询数据库的基本方法,然后给出配置步骤,接着提供示例提示词,最后列出相关问题。同时确保引用正确,格式符合要求,使用中文,生成相关问题。</think>以下是关于Dify查询数据库的使用方法和示例提示词的详细说明: --- ### Dify查询数据库的使用方法 1. **配置数据源** 在Diy中,需先配置数据库连接(如MySQL、PostgreSQL或内置向量数据库)。进入「数据集」模块,选择「添加数据源」,填写数据库连接信息测试连通性[^1]。 2. **定义查询工具** 在「工具配置」中创建自定义工具,例如命名为`database_query`,设置输入参数(如SQL语句或查询关键词),绑定数据库接口。 3. **在提示词中调用工具** 通过自然语言描述触发查询。例如: ``` 请查询用户表中最近注册的10个用户,总结他们的地域分布[^2]。 ``` --- ### 示例提示词 1. **基础查询** ```plaintext 使用database_query工具,检索产品库存中价格低于$100且库存量大于50的商品,按销量降序排列。 ``` 2. **结合业务场景** ```plaintext 根据用户的搜索关键词“户外帐篷”,从产品数据库提取近三个月销量前5的型号,列出详细参数。 ``` 3. **动态条件查询** ```plaintext 查询2023年Q3季度北京地区销售额超过¥50000的客户名单,分析其购买频次。 ``` --- ### 优化建议 - 对复杂查询可拆分步骤,例如先筛选时间范围再关联多表; - 在提示词中明确输出格式要求,如“以Markdown表格展示结果”; - 结合向量数据库提升非结构化数据检索效率[^1]。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值