这里写自定义目录标题
- 需求
- 文档内容
- 测试环境
- 实际效果
- 工作流内容
- 工具安装
- B工作流详解
- A工作流详解
- 优化建议
需求
甲方要求。根据自然语言生成对应Echarts图表,并且数据来源于私有数据库。
文档内容
本文档内容主要展示使用Dify(本地源码)进行完成甲方需求。
测试环境
CPU:11th Gen Intel® Core™ i7-1165G7 @ 2.80GHz 2.80 GHz
内寸:RAM 32.0 GB (31.7 GB 可用)
显卡 Intel® Iris® Xe Graphics (128 MB)
Dify:本地源码方式部署
由于本机是商务笔记本,所以模型都是使用的API的方式进行使用,请各位自行准备。
实际效果
工作流内容
本功能分别使用了两个工作流
A:主工作流,主要是将数据转换成对应的图表
B:辅助工作流,将自然语言转换SQL,并在数据库中执行查询出对应数据,并将本工作流转成工具提供给A工作流调用。
A示例图:
B示例图:
工具安装
本次功能主要使用到了两个工具,分别是
rookie_text2data
ECharts图表生成
其中需要注意的是,rookie_text2data工具中自然语言转SQL所需要的模型不能是深度思考模型,这块需要注意
B工作流详解
首先讲一下B工作流,我们先在开始处增加一个变量(后续文章使用问题作为代替),用于接收用户发送的自然语言。
然后将添加rookie_text2data工具中的rookie_text2data节点并且进行配置相关信息,以及将问题信息传入到工具中。这里的模型我使用的是硅基流动中的internlm/internlm2_5-7b-chat,能达到预期效果。
后续使用模板转换工具进行转换变量类型,将JSON转换成String。
然后我这边使用的是LLM将SQL格式化的方式,如果有Python基础的同学也可以使用Python去处理输出的SQL内容,可能会更方便。
提示词:
你是一个SQL生成器,请根据{{#context#}}提取出SQL内容,请严格按以下要求输出:
1.仅返回标准SQL语句;
2.不要换行、缩进或格式化;
3.SQL必须要检验是否可以执行
请再次注意:只需返回纯SQL!不要开头、不要结尾、不要解释、不要代码块标记!
随后将LLM输出的SQL进行执行,这里用到了rookie_text2data工具中的rookie_excute_sql。
然后将rookie_excute_sql的结果输出,B工作流就结束了。
A工作流详解
A工作流相对就比较简单了,先将用户提出的问题作为输入给B工作流。
然后交给LLM将返回的数据按照自己希望的格式进行转换,此处有Python基础的同学也可以直接通过代码进行转换,但是想要做通用转换比较麻烦。
此处以订单数据-柱状图作为示例,想要通用的话,可以优化提示词以及将字段名称统一。
提示词
#角色
你是一个数据整理助手
#工作内容
根据{{#context#}}JSON数据总结出每个月的订单数量,其中创建时间是订单创建时间,每条数据为一条订单数量
#输出格式
月份:
订单数量:
后续使用参数提取器将对应参数进行提取出来,提前给ECharts组件做准备。此处演示的是柱状图,需要提供的数据有三个,标题,业务数据,以及X轴的数据。
然后使用Echarts-柱状图工具生成对应echarts参数。
最后将Echarts-柱状图工具输出的内容直接回复,就会展示柱状图了。
优化建议
-
本次提问使用的原表名,实际场景可能用户会提问中文名,可以将数据库名称列表作为知识库导入,然后做知识检索获取对应的英文名称。
-
本次主要使用的是柱状图,若场景有多种视图要做,可以用意图识别来判断,从而增加图表的多样性。
愿做时代的基石,虽然是星火,如果能助你燎原,也算实现人生价值。
希望各位看官看完后点赞 谢谢大家