当前位置: 首页 > news >正文

dify工作流之text-2-e-sql,大模型写sql并执行

市面上有太多的text-to-sql工具,但是我这次突发灵感,为什么不做一个可以执行sql得text2sql呢。

dify的安装我不再赘述,我采用的是win10本地docker部署的方式。

mysql的安装也不再介绍,如有需要还请移步其他博主。

1.dify创建工作流,选择创建空白应用既即可。

2.大概看下整体的处理逻辑,分为5部分

1)第一部分为开始,入参部分。

2)第二部分为大模型处理sql

提示词参考如下:

## 角色
你是一名数据分析师
## 工作内容
你需要实现将用户输入的内容转换为SQL查询语句去MySql数据库中查找数据
## 被查询的数据表的结构
CREATE TABLE `sys_dept`  (xxxxxx
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;CREATE TABLE `sys_log`  (xxxxx
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '日志表' ROW_FORMAT = Dynamic;## 你可以使用的其他方法
用户输入类似于“求和”或“总和”时,则在sql语句中使用SUM()。
用户输入类似于“平均数”或“平均”时,在在sql语句中使用AVG()。
## 要求
1.如果用户输入的内容无法生成为sql语句,请直接说“抱歉,该命令无法形成数据库查询操作”。
2.当可以生成sql语句时,请确保输出的内容为完整正确的sql语句,不要输出此外的其他任何字符,确保你生成的内容用户可以直接执行查询操作。
3.对于字符串内容的查询请使用LIKE操作而不是等于操作。
4.请不要在回复中包括除sql语句之外的任何内容。

记得在提示词后面,加上开始模块输入的content和表名

3)构建http请求,进行查库操作。

我使用java连接本地的数据库,并使用Springboot暴露http服务,您可以根据自己的实际需要编写代理服务。


import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MySQLConnector {private static final String JDBC_URL = "jdbc:mysql://localhost:3306/";private static final String USERNAME = "root";private static final String PASSWORD = "Root";public static List<Map<String, Object>> executeQuery(String database, String table, String todoSql) {String sql = SqlExtractorUtils.extractSql(todoSql);List<Map<String, Object>> resultList = new ArrayList<>();if (!sql.startsWith("select") && !sql.startsWith("SELECT")){// 仅允许查询return resultList;}try (Connection connection = DriverManager.getConnection(JDBC_URL + database, USERNAME, PASSWORD);Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery(sql)) {ResultSetMetaData metaData = resultSet.getMetaData();int columnCount = metaData.getColumnCount();while (resultSet.next()) {Map<String, Object> row = new HashMap<>();for (int i = 1; i <= columnCount; i++) {row.put(metaData.getColumnName(i), resultSet.getObject(i));}resultList.add(row);}} catch (SQLException e) {e.printStackTrace();}return resultList;}
}

4)根据返回的结果集,调用大模型进行清洗,将返回的json数组,转换成markdown格式,便于输出。

5)输出步骤4的结果。

相关文章:

  • 《 C++ 点滴漫谈: 三十四 》从重复到泛型,C++ 函数模板的诞生之路
  • 【C++】vector<bool>特化
  • [二叉树]关于前序、中序、后序、层序序列
  • 【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析
  • w~视觉~3D~合集2
  • C# foreach 循环中获取索引的完整方案
  • VIN解析API开发指南:从年检报告构建智能定损系统
  • [创业之路-377]:企业法务 - 有限责任公司与股份有限公司的优缺点对比
  • 【KWDB 创作者计划】KWDB 2.2.0深度解析:架构设计、性能优化与企业级实践全指南
  • Python 爬虫如何伪装 Referer?从随机生成到动态匹配
  • Kotlin集合全解析:List和Map高频操作手册
  • 01-STM32基本知识点和keil5的安装
  • Cyber SpaceGuidance网安学习指南见解
  • GraphQL接口采集:自动化发现和提取隐藏数据字段
  • C#抽象类和虚方法的作用是什么?
  • [数据结构]树和二叉树
  • 来啦,烫,查询达梦表占用空间
  • 鸣潮赞妮技能机制解析 鸣潮赞妮配队推荐
  • Docker 部署 MySQL 数据库
  • LeetCode 第 262 题全解析:从 SQL 到 Swift 的数据分析实战
  • 港股5月迎开门红,恒生科指涨3%,欧股开盘全线上扬
  • 美法官裁定特朗普援引战时法律驱逐黑帮违法,系首次永久性驳回
  • 苏迪曼杯八强战,中国队横扫马来西亚队晋级四强
  • 旭辉控股集团:去年收入477.89亿元,长远计划逐步向轻资产业务模式转型
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 中方拟解除对5名欧洲议会议员制裁?外交部:望中欧立法机构相向而行