dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流本文介绍基于 Text2SQL 的
1 前言
Text2SQL(或称NL2SQL)是一种自然语言处理技术,旨在将自然语言(Natural Language)问题转化为关系型数据库中可执行的结构化查询语言(Structured Query Language,SQL),从而实现对数据库的查询和交互。这项技术的核心目标是通过自然语言描述,无需用户具备SQL语法知识,即可完成复杂的数据库查询任务
具体来说,Text2SQL的任务包括以下步骤:
- 输入分析:用户以自然语言形式输入问题,例如“查找平均工资高于整体平均工资的部门名称”。
- 语义解析:系统将输入的自然语言问题解析为数据库中的结构化查询语句。
- SQL生成:根据解析结果生成对应的SQL语句,如“SELECT department_name FROM departments WHERE average_salary > (SELECT AVG(salary) FROM employees)”。
- 执行与反馈:系统执行SQL查询并返回结果,同时可能对结果进行进一步的解释或分析。
Text2SQL的应用领域广泛,包括智能客服、数据分析、金融、医疗、教育等,能够显著提高用户与数据库交互的效率和便利性。此外,随着大型语言模型(LLMs)的发展,Text2SQL技术在处理复杂查询和多轮对话方面也取得了显著进展。
前期也给大家介绍过关于dify整合数据库实现图表生成的案例,dify 1.0 之后插件市场上出现类多类似数据库工具插件,今天就带大家实现基于Text2SQL dify工作流。话不多说我们看一下生产的效果:
工作流也给大家截图看一下
2.工作流的制作
本次工作流涉及到的流程节点比较多。这里每个节点我就一一介绍了。之前也给大家介绍过很多工作流的制作,本次重点是介绍一下工作流中的重点工具的使用以及实现思路。
本次工作流是基于dify1.0+版本制作,有基于0.15 版本的小伙伴建议大家升级,不然不能使用。先检查一下自己dify的版本
本次工作流用到了几个工具。 时间工具、ECharts图表生成、database
关于上述3个组件安装,这里就不做详细展开。有小伙伴需要纯内网使用的安装不了上述组件 可以参考我之前的文章Dify 实战:纯内网1.0+版本,攻克模型工具插件离线安装难题
开始
考虑到多轮对话我们这里使用chatflow 工作流。 点击预览按钮,右下角功能开启中 我们增加对话开场白
为了方便用户的使用我们做了2个引导对话的开场白,这里我们配置三个问题。
这样我们打开预览页面就会出现3个开场白对话,用户就不需要输入点击开场白 就直接对话了。
获取当前系统时间
这个地方主要是方便后面查询使用。
这里我们设置一下时区我们选择中国上海。
LLM
这个地方我们定义了一个LLM大语言,模型这里我们选择了火山引擎deepseek V3模型
系统提示词
|
|
用户提示词 (主要给一下大模型一个用户提示词样例)
<span data-line-num="1">查询全校各科目平均分情况</span>
assistant 提示词 我们定义了一个上面开场白对应的SQL 语句
|
|
整个llm配置截图如下
有的小伙伴可能会问,这个SQL 我不会,怎么办。 可以把创建SQL 语句发给trae,让它帮我生成。
关于SQL 语句的创建 后面也会给大家用trae 来创建和生成。
SQL Execute
因为考虑到用实现text2SQL 所以我们免不了使用到 这个SQL Execute 工具。
我们可以在marketplace.dify.ai/plugins/hjl… 市场上找到这个项目
目前这个项目支持的数据库有mysql, postgresql, sqlite, sqlserver, oracle
|
|
我们在插件市场把它安装好后,就需要对它配置。
我们用的是mysql参考上述链接字符串
|
|
这里还有一个小技巧,就是如果数据库密码是带有@符号的,我们需要转义一下。否自会出现错误。
上述因为密码也带有特殊符号“@” 和后面的数据链接符号@产生了歧义 这样程序连接就会报错
如何解决
若要借助转义的方式来处理包含特殊字符 @ 的连接字符串,在标准的数据库连接字符串里,一般没有通用转义符号能直接用在字符串里。不过可以对特殊字符 @ 进行 URL 编码,@ 对应的 URL 编码是 %40。
最后的变成
|
|
这样修改后在连接就OK 了
看到已授权完成配置。
回到工作流我们设置一下 需要查询的SQL 语句(前面步骤我们简化)
LLM汇总返回
这个地方也用到了LLM大语言模型,我们这里同样使用火山引擎提供的deepseek V3模型。
上下文中我们填写代码处理返回结果
系统提示词
|
|
这个步骤主要是对查询结果进行汇总分析,另外把查询的结果ECHarts 图表组装需要的需要的JSON格式数据。
代码执行生成echart
上面llm大语言模型处理的结果我们这里用代码执行生成echart,代码如下
|
|
条件分支
这个条件分支是考虑用户输入的信息 返回结果有线性图表、柱状图、饼图的输出,所以我们需要通过这个条件分支进行判断
ECharts图表
这个地方就是主要是使用ECharts图表对线性图表、柱状图、饼图的输出,这里输入的参数有3个分别是:
1.标题
2.数据
3.x 轴
其中 线性图表、柱状图一样的,饼图有点区别 它不是x 轴 而是换成分类,数据格式都是一样的。
直接输出
这个就是把结果返回。分别对应线性图表、柱状图、饼图。
以上步骤我们就完成了工作流的制作。
3.验证及测试
我们点开工作流的预览按钮,点击系统给出的3个开场白。
体验地址difyhs.duckcloud.fun/chat/ukN4Xh… 备用地址(http://14.103.204.132/chat/ukN4XhnVKLFN2wqw)
相关资料和文档可以看我开源的项目 github.com/wwwzhouhui/…
4.其它类资料
前面给大家介绍了工作流制作,其实这个工作流还是需要依赖数据库,所以我们需要把数据库和创建表创建完成才能使用。
有的小伙伴可能问,这个SQL 语句建表语句和初始化数据我不会怎么办?没关系 我也不会,我们发给trae帮我们搞定
建表语句生成
需求:
我们的问题
|
|
呵呵它帮我把数据表建好了。 建好后,我们发现我还要造一下数据,接下来我在让它帮我把初始化数据SQL 也搞定
初始化数据
我的问题
|
|
这2个语句是分开的,我想让它一次搞定。 我接下来又提出问题。
我的问题
|
|
生成好的SQL 语句如下
student_scores.sql ( 这个数据库脚本支持MYSQL8+版本,这个要注意哦)
|
|
创建数据库导入SQL脚本
这个地方我们需要增加创建数据库,把SQl语句导入。
我们使用数据库工具 dbeaver.exe
创建一个test数据库
创建好后,如下
然后导入我们student_scores.sql 脚本。 当然你也可以使用Navicat Premium Lite 这种数据库 导入脚本。
导入完成后我们看到创建好的表和SQL
以上数据都是AI帮我们生成的,看起来还挺真实的,省了我不少时间造数据。
5.总结
今天主要带大家实现了基于 Text2SQL 的 Dify 工作流,借助 Dify 平台实现自然语言到 SQL 查询的转换,并进行数据库查询与图表生成。详细介绍了整个工作流的实现步骤,包括工作流的制作,如添加对话开场白、获取当前系统时间、配置 LLM 大语言模型以及使用 SQL Execute 工具执行 SQL 查询等。本次工作流涉及到 Dify 1.0+ 版本的使用、相关工具(时间工具、ECharts 图表生成、database)的安装与配置,以及 SQL 语句的生成与执行等知识。虽然步骤较多,但只要按照文章的指引逐步操作,相信大家都能够掌握。感兴趣的小伙伴可以关注支持,今天的分享就到这里结束了,我们下个文章见。
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek002/post/202510/dify%E6%A1%88%E4%BE%8B%E5%88%86%E4%BA%AB-%E5%9F%BA%E4%BA%8Edatabase%E6%8F%92%E4%BB%B6%E5%AE%9E%E7%8E%B0Text2sql%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9F%A5%E8%AF%A2%E5%9B%BE%E8%A1%A8%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%9C%AC%E6%96%87%E4%BB%8B%E7%BB%8D%E5%9F%BA%E4%BA%8E-Text2SQL-%E7%9A%84/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com