Dify+Echarts实现数据可视化
来源:互联网
时间:2026-07-21 13:28:53
在和AI对话的过程中,数据可视化越来越成为一个刚需。比如智能问数场景下,当用户问“上个月各区域的销售额对比”,如果能直接甩出一张柱状图或折线图,体验感瞬间拉满。下面这张图展示了最终效果——AI把一个Excel表格,直接变成了专业的统计报表。
那么,具体怎么在Dify里实现这个能力?以最常见的“导入一个Excel文档,让Dify输出统计报表”为例,我们只需要新建一个ChatFlow,总共走6步,就能搞定。整体流程如下:
第一步:开始节点
第二步:文档提取器节点
第三步:大模型处理节点
第四步:参数提取节点
第五步:代码执行节点
import csv
import json
def main(csv_string):
# 将CSV字符串分割成行
lines = csv_string.strip().split('\n')
# 使用csv模块读取数据
reader = csv.reader(lines)
# 将所有行转换为列表
data = [row for row in reader]
# 将数字字符串转换为浮点数
for row in data[1:]: # 跳过标题行
for i in range(1, len(row)):
try:
row[i] = float(row[i])
except ValueError:
pass
# 创建完整的ECharts配置
echarts_config = {
"legend": {},
"tooltip": {},
"dataset": {
"source": data
},
"xAxis": [
{"type": "category", "gridIndex": 0},
{"type": "category", "gridIndex": 1}
],
"yAxis": [
{"gridIndex": 0},
{"gridIndex": 1}
],
"grid": [
{"bottom": "55%"},
{"top": "55%"}
],
"series": [
# 第一个网格中的柱状图系列
{"type": "bar", "seriesLayoutBy": "row"},
{"type": "bar", "seriesLayoutBy": "row"},
{"type": "bar", "seriesLayoutBy": "row"},
{"type": "bar", "seriesLayoutBy": "row"},
# 第二个网格中的折线图系列
{"type": "line", "xAxisIndex": 1, "yAxisIndex": 1},
{"type": "line", "xAxisIndex": 1, "yAxisIndex": 1},
{"type": "line", "xAxisIndex": 1, "yAxisIndex": 1},
{"type": "line", "xAxisIndex": 1, "yAxisIndex": 1},
{"type": "line", "xAxisIndex": 1, "yAxisIndex": 1},
{"type": "line", "xAxisIndex": 1, "yAxisIndex": 1}
]
}
# 生成输出文件
output = "```echarts\n" + json.dumps(echarts_config, indent=2, ensure_ascii=False) + "\n```"
return {"output":output}
注意代码里的关键点:先把CSV字符串解析成二维数组,然后把数值型字段转成float(避免后续字符串错误),最后按照Echarts官网的多图表布局组装配置。这里的配置用了两个网格(grid),上半部分展示柱状图,下半部分展示折线图,视觉上非常清晰。
第六步:输出结果
关于Echarts的配置细节,第五步只是用了柱状图+折线图的组合示例。实际使用时,可以到Echarts官网(https://echarts.apache.org/zh/index.html)参考官方示例,替换series中的type和对应的数据绑定方式。比如改成饼图、散点图,甚至混合地图,都是可行的。
这个Demo的核心其实就两步:
用大模型把Excel转成CSV
用Python把CSV组装成Echarts配置
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名