【Dify应用】连接数据库生成Echarts图表

需求

甲方要求。根据自然语言生成对应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-柱状图工具输出的内容直接回复,就会展示柱状图了。

优化建议

  • 本次提问使用的原表名,实际场景可能用户会提问中文名,可以将数据库名称列表作为知识库导入,然后做知识检索获取对应的英文名称。

  • 本次主要使用的是柱状图,若场景有多种视图要做,可以用意图识别来判断,从而增加图表的多样性。

愿做时代的基石,虽然是星火,如果能助你燎原,也算实现人生价值。
希望各位看官看完后点赞 谢谢大家

### 使用 Dify 实现 ECharts 图表功能 在使用 Dify 实现 ECharts 图表功能时,主要分为以下几个部分:数据获取、数据处理、图表基础信息提取以及最终的图表生成。以下是详细的实现方法: #### 数据获取 在生成图表前,需要通过数据库接口或插件获取数据结果集。这可以通过配置 Dify 的数据源连接器来完成。例如,可以连接 MySQL、PostgreSQL 或其他支持的数据库,从中提取所需的数据 [^1]。 ```python # 示例代码:通过 SQL 查询获取数据 import pymysql def fetch_data_from_db(): connection = pymysql.connect( host='localhost', user='user', password='passwd', database='db_name' ) try: with connection.cursor() as cursor: sql = "SELECT x_column, y_column FROM table_name" cursor.execute(sql) result = cursor.fetchall() return result finally: connection.close() ``` #### 数据处理 获取到的数据需要进行处理,以便后续生成图表。通常需要将数据转换为适合 ECharts 的格式,例如 X 轴和 Y 轴的数据分离 [^2]。 ```python # 示例代码:数据处理 def process_data(data): xdata = [item[0] for item in data] ydata = [item[1] for item in data] return xdata, ydata data = fetch_data_from_db() xdata, ydata = process_data(data) ``` #### 图表基础信息提取 利用 LLM 提取创建图表的基础信息,如标题、X 轴数据 (`xdata`)、Y 轴数据 (`ydata`) 和图表类型。可以使用提示词引导模型生成所需的参数值 [^2]。 ```python # 示例代码:通过 LLM 提取图表信息 from dify import llm def extract_chart_info(xdata, ydata): prompt = f"你是一位数据抽取专家;请根据以下数据,进行抽取:\nX轴数据: {';'.join(map(str, xdata))}\nY轴数据: {';'.join(map(str, ydata))}\n将标题赋值给 title,Y轴的数据赋值给 ydata,X轴的数据赋值给 xdate。" response = llm(prompt) chart_info = { 'title': response.get('title'), 'xdata': response.get('xdata').split(';'), 'ydata': list(map(float, response.get('ydata').split(';'))) } return chart_info chart_info = extract_chart_info(xdata, ydata) ``` #### 图表生成 最后,使用提取到的信息生成 ECharts 图表。可以通过嵌入式 JavaScript 或 Python 的 ECharts 库(如 `pyecharts`)来实现 [^1]。 ```python # 示例代码:使用 pyecharts 生成图表 from pyecharts.charts import Line from pyecharts import options as opts def create_echarts(chart_info): line = ( Line() .add_xaxis(chart_info['xdata']) .add_yaxis("示例数据", chart_info['ydata']) .set_global_opts(title_opts=opts.TitleOpts(title=chart_info['title'])) ) return line.render_embed() chart_html = create_echarts(chart_info) print(chart_html) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值