一、Echarts简介
Echarts是一个基于 JavaScript 的开源可视化图表库,由百度开源,主要用于生成各种类型的图表,以直观地展示数据。Echarts支持折线图、柱状图、饼图、散点图、K线图等常规图表,支持地图、热力图、关系图、树图等特殊图表,支持图表组合展示。
二、实现过程
本案例可实现数据和图表合并输出,用户通过自然语言询问,通过大模型转换为sql语言,然后查询数据库并返回数据,再通过大模型将数据转换为标准Echarts格式数据,最终实现从用户自然语言提问到生成图文并茂可视化报告的全流程自动化。
1、创建知识库
本案例将数据库表保存到知识库,大模型根据知识库中的表结构进行SQL编写。
(1)进入Dify管理界面,点击“知识库”按钮,选择“创建知识库”。选择数据源:上传本地数据库文档。
(2)数据预处理
清洗和分段:对数据进行清洗、分段等预处理,确保数据质量。选择Embedding模型:在Dify中配置合适的Embedding模型(如bge-m3),用于将文档内容转换为向量。
(3) 知识库配置与优化
设置召回策略:为知识库配置召回策略,调整召回参数以优化问答效果。
2、创建工作流
(1)点击dify工作室选择”创建空白应用“,应用类型选择“chatflow”,工作流节点如下图所示:
3、节点解释
(1)大模型SQL生成节点
将知识检索的结果作为大模型的上下文,利用大模型的能力结合用户的提问编写SQL语句,注意Qwen3是混合模型,需要通过/no_think切换大模型为非深度思考模式。提示词如下:
/no_think
# 角色
你是SQL大师,擅长写SQL语句。
# 任务
1.你可以根据用户的问题
结合数据库结构文档
,写出合理的SQL语句。
2.如果用户问最新的数据,请根据获取当前时间。
3.输出的字段名称转为中文。
# 输出
只输出SQL语句,不要带任何除SQL语句之外的内容
# 格式参考
SELECT customer_name as 客户姓名,product_name AS 产品名称,quantity as 数量 FROM sales_order
不要带有
```sql\n
**
**
\n```
"等markdown标记
(2)SQL查询节点
SQL查询节点的作用是接收SQL语句,然后执行查询数据库操作**并返回数据,这里使用rookie_text2data插件,可以在插件市场安装。
(3)图表转换节点
通过大模型的能力将数据库返回的数据转换为Echarts支持的标准数据格式,提示词如下:
/no_think
#角色
你是一个数据整理和echarts的专家,能够根据源数据智能整理并筛选计算出符合用户数据的echarts图表类型、标题及数据,确保echarts的配置项为一个标准且可解析的JSON格式,
#技能
1.根据用户问题和源数据自行判断哪种图表类型合适,从以下图表类型中选择一个输出:bar,line,pie,scatter,radar,category,tree。
2.需严格按照以下示例生成内容。
格式示例:
```echarts
{
"title": {
"text": "产品总销量”
},
"xAxis": {
"type": "category",
"data": ["平板电脑", "智能手机", "智能手环", "笔记本电脑"]
},
"yAxis": {
"type": "value"
},
"series": [
{
"name": "总销量",
"type": "bar",
"data": [117, 119, 95, 183]
}
]
}
```
#数据
源数据:/上下文
#任务
输出结果仅保留acharts相关结构,严格按照示例格式。
三、效果展示
本案例详细介绍了如何利用Dify+Qwen3+Echarts+Mysql实现数据库数据的可视化。你可以结合自己的数据库表结构,将表结构元数据作为知识库供大模型学习,而无须更改工作流。图表类型也由大模型根据数据和用户提问智能生成。在实际应用中,我们只需针对不同的数据结构,多尝试几种大模型,从中挑选出效果最佳的方案即可。在我的测试中,Qwen3模型能够很好地满足需求。