【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!

Echarts官网:https://echarts.apache.org/zh/index.html

ECharts 是一个由百度团队开发的、基于 JavaScript 的开源可视化图表库,它提供了丰富的图表类型和强大的交互功能,能够帮助开发者轻松创建专业级的数据可视化应用。

核心特点

  1. 丰富的图表类型
    • 支持30+种图表类型,包括折线图、柱状图、饼图、散点图、雷达图、地图、热力图、树图、旭日图等
    • 支持多维数据分析展示
  2. 强大的交互功能
    • 提供数据缩放、拖拽重计算、数据区域选择等交互功能
    • 支持图例、工具箱、数据区域缩放、视觉映射等组件

import csv
import jsondef 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": "bar", "xAxisIndex": 1, "yAxisIndex": 1},{"type": "bar", "xAxisIndex": 1, "yAxisIndex": 1},{"type": "bar", "xAxisIndex": 1, "yAxisIndex": 1},{"type": "bar", "xAxisIndex": 1, "yAxisIndex": 1},{"type": "bar", "xAxisIndex": 1, "yAxisIndex": 1},{"type": "bar", "xAxisIndex": 1, "yAxisIndex": 1}]}# 生成输出文件output = "```echarts\n" + json.dumps(echarts_config, indent=2, ensure_ascii=False) + "\n```"return {"output":output}
import * as echarts from 'echarts';var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;option = {xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [150, 230, 224, 218, 135, 147, 260],type: 'line'}]
};option && myChart.setOption(option);

完整工作流:

目录

1.安装插件

2.问题判断

3.自然语言转SQL

4.执行SQL语句

5.条件分支-是否需要图表

6.处理图表数据

7.参数提取

8.条件分支--图形判断

9.画图

10.不画图

11.测试效果


1.安装插件

2.问题判断

它负责分析用户的原始问题,判断是否需要图表,并初步确定合适的图表类型(柱状图、折线图、饼图,或不需要图表)。

模型选择: deepseek-ai/DeepSeek-V3

提示词如下: 

你是一个智能助手,需要根据用户的问题判断是否需要用图表展示数据,并判断适合的图表类型。  请严格按照如下JSON格式输出,不要输出多余内容:
{"need_chart": true/false,  // 是否需要图表"chart_type": "bar/line/pie/none"  // 推荐的图表类型,bar=柱状图,line=折线图,pie=饼图,none=不需要图表
}判断标准:
1.如果用户问题中包含“趋势”、“变化”、“对比”、“分布”、“比例”、“占比”、“增长”等词,通常需要图表。
2.如果用户问题中有“每年”、“历年”、“随时间”、“随年份”等,推荐折线图(line)。
3. 如果用户问题中有“对比”、“排行”、“最多”、“最少”等,推荐柱状图(bar)。
4. 如果用户问题中有“占比”、“比例”、“分布”等,推荐饼图(pie)。
5. 如果用户只是问具体数值、详情、描述,不需要图表,chart_type 填 none。示例:
用户问题:“请用图表展示历年票房变化”  
输出:{"need_chart": true, "chart_type": "line"}用户问题:“各导演的票房占比是多少?”  
输出:{"need_chart": true, "chart_type": "pie"}用户问题:“哪吒之魔童降世的票房是多少?”  
输出:{"need_chart": false, "chart_type": "none"}现在请判断下面这个问题:
{{#1746791066048.input#}}

3.自然语言转SQL

这个节点是实现“自然语言对话数据库”的核心。它会将用户的原始问题(sys.query)和我们预设的数据库表结构信息结合,智能地生成可执行的SQL语句。

输入变量:

  • 数据表名称: ****
  • 查询语句: {{sys.query}} (引用开始节点的用户输入)

数据库配置: 正确填写数据库类型、IP、端口、库名、用户名、密码。

可以根据实际情况自定义提示词:

你是一位精通SQL语言的数据库专家,熟悉MySQL数据库。你的的任务是检查该Sql语句是否有错。如果有错请更正,没有错则输出Sql语句。回答要求:
1.不能包含任何多余的信息。
2.必须是可以执行的SQL语句。
3.删除掉Sql中的\n,用空格替换。
4.只需要查询本日价格,不需要多余信息.注意:实体为‘类型’,需要在大类和小类中间加上‘-’

4.执行SQL语句

此节点负责连接数据库,并执行上一步生成的SQL语句。

  • 输入变量:
    • 待执行的SQL语句: {{rookie_text2data.text}} (引用上一个节点的输出,即生成的SQL语句)
  • 数据库配置: 正确填写数据库类型、IP、端口、库名、用户名、密码。
  • 返回数据格式: TEXT。

5.条件分支-是否需要图表

这是一个逻辑判断节点,它会根据第一个LLM节点【判断用户问题】的输出,决定工作流是走向“生成图表”的分支,还是走向“无需图表,直接文字回答”的分支。

6.处理图表数据

上一个条件分支走到需要图表,工作流会进入这个LLM节点。

它的核心任务是将SQL查询结果(目前是TEXT格式)和第一个LLM判断出的图表类型(target_chart_type),转换为后续代码节点或图表插件所需的格式化数据。

SYSTEM
你是一个数据格式化专家。你的核心任务是根据已执行的SQL查询结果和用户指定的图表类型,将数据转换为特定图表工具所需的输入格式。## 输出变量说明:
1.根据{{#1746791092689.text#}}的数据,进行抽取,我要2个数据,data是y轴的数据,x-axis是x轴的数据,以便我后续生成柱状图、折线图、条形图等图形;
2.根据用户最原始的自然语言查询{{#1746791066048.input#}},生成表的标题title标准输出格式:
'''
title:
data:
x-axis:
'''
其中每个“data与x-axis”,每个文本之间用 ";" 分隔示例输出:
title:"产品销售额柱状图",
data: "5500;7200",
x-axis: "产品A;产品B",

7.参数提取

因为数据是一个文本格式text,需要具体提取出参数,大家可以也去试试大模型结构化输出

这里使用简单的参数提取节点

title:
data:
x-axis:

8.条件分支--图形判断

判断代码节点的chart_type类型,给到不同的图表插件。

9.画图

这些是你预设的、能够接收格式化数据并(理想情况下)输出可渲染Echarts图表的工具。

  • 输入变量 (以饼图为例):
    • 标题: {{转换数据节点输出.unpacked_title}}
    • 数据: {{转换数据节点输出.unpacked_data}}
    • 分类: {{转换数据节点输出.unpacked_labels}}
  • 输出: 这些插件的输出应该是Dify可以直接渲染的图表格式(例如,包含 ```echarts ... ``` 的文本)。

10.不画图

如果最初判断用户问题不需要图表,工作流会进入这个分支。

这里我们用一个LLM节点,根据用户的问题和“执行SQL”节点返回的(TEXT格式)查询结果,用自然语言生成一段简洁的文字回答。

你是数据分析专家,分析并输出sql查询结果.数据是:{{#1746791092689.text#}}
问题是:{{#1746791066048.input#}}
Sql语句:{{#1747016584129.text#}}回答要求:
1.列出详细数据,优先以表格方式列出数据。
2.如果数据超过10行,就只列出前十行和最后3行,中间可以使用省略号.

11.测试效果

"请查询普钢综合指数,时间范围是2025.1.1-5.6,并把指数信息按照折线图绘制",

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android设备 显示充电速度流程

整体逻辑:设备充电速度的判断 系统通过读取充电器的最大电流(Current)与最大电压(Voltage),计算最大充电功率(Wattage),以此判断当前是慢充、普通充还是快充&#xff1a…

十一、Hive JOIN 连接查询

作者:IvanCodes 日期:2025年5月16日 专栏:Hive教程 在数据分析的江湖中,数据往往分散在不同的“门派”(表)之中。要洞察数据间的深层联系,就需要JOIN这把利器,将相关联的数据串联起来…

Excel在每行下面插入数量不等的空行

1、在B列输入要添加的空行数量(如果加7行,则写6,也可以插入数量不等的空行) 2、在C1单元格输入1 3、在C2输入公式:SUM($B$1:B1)1,下拉填充 4、在C9单元格输入1 5、选中C9单元格-->选择菜单栏“开始”…

iOS热更新技术要点与风险分析

iOS的热更新技术允许开发者在无需重新提交App Store审核的情况下,动态修复Bug或更新功能,但需注意苹果的审核政策限制。以下是iOS热更新的主要技术方案及要点: 一、主流热更新技术方案 JavaScript动态化框架 React Native & Weex 通过Jav…

服务器多用户共享Conda环境操作指南——Ubuntu24.02

1. 使用阿里云镜像下载 Anaconda 最新版本 wget https://mirrors.aliyun.com/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh bug解决方案 若出现:使用wget在清华镜像站下载Anaconda报错ERROR 403: Forbidden. 解决方案:wget --user-agent“M…

基于YOLO算法的目标检测系统实现指南

YOLO(You Only Look Once)作为计算机视觉领域最具影响力的实时目标检测算法之一,其最新版本YOLOv8在速度与精度之间达到了新的平衡。本文将从技术实现角度,详细介绍如何使用YOLO算法构建高效的目标检测系统。 一、算法原理与技术架构 1.1 YOLO核心思想…

C++ asio网络编程(6)利用C11模拟伪闭包实现连接的安全回收

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、智能指针管理Session二、用智能指针来实现Server的函数1.start_accept()1.引用计数注意点2.std::bind 与异步回调函数的执行顺序分析 2.handle_accept1.异步…

AI与产品架构设计(2):Agent系统的应用架构与落地实

什么是AI Agent?其在架构中的独特定位 AI Agent(人工智能代理)是一种模拟人类智能行为的自主系统,通常以大型语言模型(LLM)作为核心引擎。简单来说,Agent能够像人一样感知环境信息、规划行动方…

Rust 数据结构:String

Rust 数据结构:String Rust 数据结构:String什么是字符串?创建新字符串更新字符串将 push_str 和 push 附加到 String 对象后使用 运算符和 format! 宏 索引到字符串字符串在内存中的表示字节、标量值和字形簇 分割字符串遍历字符串的方法 R…

Java卡与SSE技术融合实现企业级安全实时通讯

简介 在数字化转型浪潮中,安全与实时数据传输已成为金融、物联网等高安全性领域的核心需求。本文将深入剖析东信和平的Java卡权限分级控制技术与浪潮云基于SSE的大模型数据推送技术,探索如何将这两项创新技术进行融合,构建企业级安全实时通讯系统。通过从零到一的开发步骤,…

继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元

第一章:AI交互的进化与挑战 1.1 从命令行到智能交互 人工智能的发展历程中,人机交互的方式经历了多次变革。早期的AI系统依赖命令行输入,用户需通过特定指令与机器沟通。随着自然语言处理技术的进步,语音助手和聊天机器人逐渐普…

MySQL刷题相关简单语法集合

去重 distinct 关键字 eg. :select distinct university from user_profile 返回行数限制: limit关键字 eg. :select device_id from user_profile limit 2 返回列重命名:as 关键字 eg.:select device_id as user_in…

Kubernetes MCP服务器(K8s MCP):如何使用?

#作者:曹付江 文章目录 1、什么是 Kubernetes MCP 服务器?1.1、K8s MCP 服务器 2、开始前的准备工作2.1. Kubernetes集群2.2. 安装并运行 kubectl2.3. Node.js 和 Bun2.4. (可选)Helm v3 3、如何设置 K8s MCP 服务器3.1. 克隆存储…

计算机网络-HTTP与HTTPS

文章目录 计算机网络网络模型网络OSITCP/IP 应用层常用协议HTTP报文HTTP状态码HTTP请求类型HTTP握手过程HTTP连接HTTP断点续传HTTPSHTTPS握手过程 计算机网络 网络模型 为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。 网络模型是计算机网络中用于…

Springboot 跨域拦截器配置说明

错误代码 跨域设置 Configuration public class WebConfig implements WebMvcConfigurer {/*** cors 跨域配置*/Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedMethods("GET", "HEAD", &qu…

受不了github的网络限制了,我开源了一个图床工具 gitee-spring-boot-starter

嗨嗨嗨~ 我老马又又来了!!!上次写了一篇我开源了一款阿里云OSS的spring-boot-starter,然后买的资源包到期了,后面又想白(开)嫖(源)的路子,首先想到了使用gith…

基于labview的声音采集、存储、处理

程序1:基于声卡的数据采集 程序2:基于声卡的双声道模拟输出 程序3:声音信号的采集与存储 程序4:声音信号的功率谱分析 程序5:基于labview的DTMF

第一次经历项目上线

这几天没写csdn,因为忙着项目上线的问题,我这阶段改了非常多的前端bug哈哈哈哈,说几个比较好的bug思想! 这个页面算是我遇到的比较大的bug,因为我一开始的逻辑都写好了,询价就是在点击快递公司弹出弹框的时…

基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案‌

(国产化替代J1900的应急救援智能化解决方案) 一、硬件架构设计‌ ‌极端环境防护系统‌ ‌防爆耐高温设计‌: 采用陶瓷纤维复合装甲(耐温1200℃持续1小时),通过GB 26784-2023消防设备防爆认证IP68防护等级…

企业开发工具git的使用:从入门到高效团队协作

前言:本文介绍了Git的安装、本地仓库的创建与配置,以及工作区、暂存区和版本库的区分。详细讲解了版本回退、撤销修改等操作,并深入探讨了分支管理,包括分支的创建、切换、合并、删除及冲突解决。此外,还介绍了远程操作…