支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


dify案例分享-ECharts打造上证综指5日K线可视化,超详细教程来袭

发布日期:2025-03-03 06:43:31 浏览次数: 2144 作者:wwzhouhui
推荐语

掌握ECharts,提升数据可视化技能,快速上手金融数据展示。

核心内容:
1. ECharts介绍及其在金融领域的应用
2. 上证综指5日K线可视化组件构建流程
3. Dify.AI Workflow引擎在数据可视化中的应用

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

1.前言

ECharts是百度开源的可视化解决方案,基于ZRender矢量渲染引擎构建,提供跨平台、多端适配的交互式数据可视化能力。该库凭借其模块化架构与API设计,支持20余种主流图表类型及多维数据分析功能,在金融、物联网、商业智能等领域实现日均千万级调用。

作为当前国内应用最广的前端可视化工具链,ECharts 7.x版本通过以下技术特性持续领跑市场:

  1. WebGL加速渲染引擎,可承载百万级数据点实时渲染

  2. 声明式配置语法,支持JSON Schema校验与智能提示

  3. 动态数据驱动机制,实现毫秒级增量更新

  4. 完善的响应式设计,适配从4K大屏到移动H5的全场景需求

本次我们将基于Dify.AI的Workflow引擎,构建上证综指5日K线可视化组件。话不多说我们先看一下实现效果。

image-20250225232400870

工作流展示

image-20250225232437523

2.echarts展示工作流制作

2.1 开始

首选我们先定义一个开始节点,这个开始节点需要设置1个文本上传输入参数,目前这个主要使用excel。所以我们设置文件类型。

image-20250225232756221

按照上图设置一个file作为开始节点的输入参数。

2.2 文档提取器

这个地方我们需要接受开始节点上传的excel 文件,通过这个文档提取器提取文档里面的内容。输入变量是file

image-20250225232942483

2.3 LLM大语言模型

这个地方我们需要设置一个大语言模型,通过这个大语言模型提取 excel文本内容信息。这里模型我们选择deepseekv2.5的模型,使用硅基流动提供的deepseek模型,有的小伙伴可以问为什么不用v3 和R1模型呢?这里我们只提取文本内容,所以不需要非常厉害的模型。另外硅基最近流量比较大我们选个小模型这样反而速度更快点。

系统提示词

你是一个文档提取专家,请根据用户上传文档内容{{#1740472111460.text#}}提取该表格里面的数据返回json格式数据。
其中内容格式‘上证指数日线行情’、‘open’、‘high’、‘low’、‘close’、‘volume’字段返回信息,返回的结果信息以json格式返回
 返回数据格式如下:
{
"上证指数日线行情": [
{
"date""2025-02-19 00:00:00",
"open"3320.78,
"high"3352.09,
"low"3320.58,
"close"3351.54,
"volume"50291300000
},
{
"date""2025-02-20 00:00:00",
"open"3347.59,
"high"3355.56,
"low"3338.03,
"close"3350.78,
"volume"50435700000
}
]
}

模型的其他设置这里没有过多讲解的地方。

image-20250225233635289

2.4 echarts代码转换生成

 这个地方是本次工作流的一个难点,主要的作用就是通过上个节点的大语言模型提取输出的json格式的数据通过python 代码和echarts来实现数据组装。

代码如下:

import json
import os
import re

def main(json_strstr-> dict:
    try:
        # 预处理:清理非 JSON 部分
        json_match = re.search(r'\{.*\}'json_strre.DOTALL)
        if not json_match:
            return {"result""Error: Invalid JSON format"}
        
        # 提取合法的 JSON 部分
        cleaned_json_str = json_match.group(0)
        
        # 解析JSON数据
        data = json.loads(cleaned_json_str)
        filename = data.get("filename""stock_chart.html")
        stock_data = data.get("上证指数日线行情", [])
        
        # 准备数据格式
        dates = [item['date'].split(' ')[0for item in stock_data]  # 提取日期部分(去掉时间)
        open_prices = [item['open'for item in stock_data]
        close_prices = [item['close'for item in stock_data]
        low_prices = [item['low'for item in stock_data]
        high_prices = [item['high'for item in stock_data]
        volumes = [item['volume'/ 1e8 for item in stock_data]  # 转换为亿单位
        
        # 构建ECharts配置
        echarts_config = {
            "title": {
                "text""上证指数日线行情"
            },
            "legend": {
                "data": ["开盘价""最高价""最低价""收盘价""成交量"]
            },
            "tooltip": {},
            "dataset": {
                "source": [
                    ["日期""开盘价""最高价""最低价""收盘价""成交量"],
                    *[[dates[i], open_prices[i], high_prices[i], low_prices[i], close_prices[i], volumes[i]] 
                      for i in range(len(dates))]
                ]
            },
            "xAxis": [
                {"type""category""gridIndex"0},
                {"type""category""gridIndex"1}
            ],
            "yAxis": [
                {
                    "gridIndex"0,
                    "name""价格趋势(单位:点)"
                },
                {
                    "gridIndex"1,
                    "name""成交量(单位:亿)"
                }
            ],
            "grid": [
                {"bottom""55%"},
                {"top""55%"}
            ],
            "series": [
                # 第一个网格中的折线图系列
                {"type""line""seriesLayoutBy""row""name""开盘价"},
                {"type""line""seriesLayoutBy""row""name""最高价"},
                {"type""line""seriesLayoutBy""row""name""最低价"},
                {"type""line""seriesLayoutBy""row""name""收盘价"},
                # 第二个网格中的柱状图系列
                {"type""bar""xAxisIndex"1"yAxisIndex"1"name""成交量"}
            ]
        }
        
        # 生成输出文件
        output = "```echarts\n" + json.dumps(echarts_configindent=2ensure_ascii=False+ "\n```"
        
        # 返回结果
        return {
            "result"output
        }
    
    except Exception as e:
        return {
            "result"f"Error: {str(e)}"
        }

   输入参数 json_str    输入值是大语言模型llm string值

  输出变量 result  数据类型是字符串string

  image-20250225234020723

2.5 直接回复

这个地方就比较简单,因为上个节点把数据拼装好后,这里就直接显示就可以了。

image-20250225234139046

以上我们就完成工作流的搭建。

3.验证及测试

上面制作好的工作流(chatflow) 就可以发布出去了

image-20250225234304561

image-20250225234553929

项目体验地址:http://dify.duckcloud.fun/chat/HesevIZjlbSYd4NM

为了方便演示我这里上传我的excel 测试数据。地址https://mypicture-1258720957.cos.ap-nanjing.myqcloud.com/Obsidian/%E8%82%A1%E7%A5%A8%E8%A1%A8%E6%A0%BC%E6%95%B0%E6%8D%AE.xls

相关资料和文档可以看我开源的项目 https://github.com/wwwzhouhui/dify-for-dsl

总结

今天主要带大家了解了如何基于 Dify 的 Workflow 引擎构建上证综指 5 日 K 线可视化组件,详细介绍了使用 ECharts 实现股票价格趋势显示的工作流制作过程。介绍了 ECharts 作为百度开源的可视化解决方案的强大功能及技术特性。通过定义开始节点、使用文档提取器、配置 LLM 大语言模型、进行 echarts 代码转换生成以及直接回复等步骤,完成了工作流的搭建,并进行了验证和测试。还给出了项目体验地址及相关资料文档的开源项目地址。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询