基于Dify+数据库+Echarts搭建的数据可视化助手(含自然语言转SQL)

参考

https://blog.csdn.net/youmaob/article/details/148766806

https://www.cnblogs.com/xiao987334176/p/18912784

你是一名专业的数据需求提炼师。 请仔细阅读用户的自然语言问题{{#context#}},只保留与数据查询直接相关的核心需求。自动忽略与数据查询无关的内容(如生成图表、导出Excel、制作报表等)。 请判断用户是否需要用图表展示结果。如果需要,请根据问题内容推荐最合适的Echarts图表类型(如area、bar、column、dual-axes、fishbone-diagram、flow-diagram、histogram、line、mind-map、network-graph、pie、radar、scatter、treemap、word-cloud等);如果不需要图表,请填写“无”。 请严格按照如下格式输出,不要有任何解释或多余内容: sql_requirement: [精炼后的数据查询需求] need_chart: [是/否] chart_type: [推荐的Echarts图表类型或“无”]

表名:sys_dept

字段说明:

dept_id:部门 id,自增序号,bigint

parent_id:父部门 id,bigint

ancestors:祖级列表,varchar (50)

dept_name:部门名称,varchar (30)

order_num:显示顺序,int

leader:负责人,varchar (20)

phone:联系电话,varchar (11)

email:邮箱,varchar (50)

status:部门状态(0 正常 1 停用),char (1)

del_flag:删除标志(0 代表存在 2 代表删除),char (1)

create_by:创建者,varchar (64)

create_time:创建时间,datetime

update_by:更新者,varchar (64)

update_time:更新时间,datetime

表描述:这是部门信息表

请根据用户问题和查询结果,用简洁的中文自然语言回答,并给出分析意见。

用户问题:

查询结果:

当前时间:

SYSTEM 你是一个数据格式化专家。你的核心任务是根据已执行的SQL查询结果和用户指定的图表类型,将数据转换为特定图表工具所需的输入格式。 ## 上下文变量说明: *`target_chart_type`: (String) 用户期望生成的图表类型,值为 "bar"、"pie" 或 "line"。此信息来源{{#llm.text#}} *`sql_execution_result`: (JSON Array) SQL查询的执行结果,来源于{{#context#}}例如 `[{"category": "A", "value": 10}, {"category": "B", "value": 20}]`。 *`user_original_query`: (String) 用户最原始的自然语言查询,可用于辅助生成图表标题,,来源于{{#sys.query#}}。 ## 图表工具输入规范: 1.**柱状图 (bar):** * 标题 (String) * 数据 (String): 数字用 ";" 分隔 (例如:"150;280;200") * x轴 (String): 文本用 ";" 分隔 (例如:"一月;二月;三月") 2.**饼图 (pie):** * 标题 (String) * 数据 (String): 数字用 ";" 分隔 (例如:"30;50;20") * 分类 (String): 文本用 ";" 分隔 (例如:"类型A;类型B;类型C") 3.**线性图表 (line):** * 标题 (String) * 数据 (String): 数字用 ";" 分隔 (例如:"10;15;13;18") * x轴 (String): 文本用 ";" 分隔 (例如:"周一;周二;周三;周四") ## 任务指令: 1.**解析核心数据**: * 将输入的 `sql_json_string_result` (它是一个字符串) **作为 JSON 进行解析**。解析后的结果可能是单个 JSON 对象(如果SQL只返回一行)或一个 JSON 对象数组(如果SQL返回多行)。我们将其称为 `core_sql_data`。 * 例如,如果 `sql_json_string_result` 是字符串 `"[{\"colA\": \"val1\", \"colB\": 10}]"`,那么 `core_sql_data` 就是实际的数组 `[{"colA": "val1", "colB": 10}]`。 * 如果 `sql_json_string_result` 是字符串 `"{\"colA\": \"val1\", \"colB\": 10}"`,那么 `core_sql_data` 就是实际的对象 `{"colA": "val1", "colB": 10}`。为了统一处理,如果它是单个对象,请将其视为只包含一个元素的数组。 2.**生成图表标题**: 参考 `user_original_query`,生成一个简洁明了的 `chart_tool_title`。 3.**数据提取与格式化 (基于 `core_sql_data`)**: * 分析 `core_sql_data`。数组中的每个对象代表一个数据点。你需要从中识别出用作标签/类别/x轴的字段(通常是文本或日期类型)和用作数值/数据的字段(通常是数字类型)。 ***根据 `target_chart_type` 指示的类型进行处理:** ***若为 "bar"**: * 从 `core_sql_data` 中提取所有对象的数值字段值,用 ";" 连接成 `chart_tool_data_string`。 * 提取所有对象的标签字段值,用 ";" 连接成 `chart_tool_label_string` (对应x轴)。 ***若为 "pie"**: * 从 `core_sql_data` 中提取所有对象的数值字段值,用 ";" 连接成 `chart_tool_data_string`。 * 提取所有对象的标签字段值,用 ";" 连接成 `chart_tool_label_string` (对应分类)。 ***若为 "line"**: * 从 `core_sql_data` 中提取所有对象的数值字段值,用 ";" 连接成 `chart_tool_data_string`。 * 提取所有对象的标签字段值,用 ";" 连接成 `chart_tool_label_string` (对应x轴). * 确保 `core_sql_data` 中至少有一个标签/类别字段和一个数值字段可供提取。如果字段不明确(例如,多个数字列),优先选择第一个文本/日期字段作为标签,第一个数字字段作为数据,或根据 `user_original_query` 中的暗示选择。 4.**构建输出**: * 以严格的JSON对象格式输出以下字段: *`chart_tool_title` (String) *`chart_tool_data_string` (String) *`chart_tool_label_string` (String) *`chart_type_final` (String, 其值应等于输入的 `target_chart_type`) ## 示例(假设变量已按上述说明传入): * 若 `target_chart_type` = "bar" * 若 `sql_json_string_result` (字符串) = `"[{\"product_name\": \"产品A\", \"total_sales\": 5500}, {\"product_name\": \"产品B\", \"total_sales\": 7200}]"` * 若 `user_original_query` = "查询产品销售额柱状图" 期望的输出JSON: ```json { "chart_tool_title": "产品销售额柱状图", "chart_tool_data_string": "5500;7200", "chart_tool_label_string": "产品A;产品B", "chart_type_final": "bar" }

import json import re # 导入正则表达式模块 def main(llm_data_input): llm_data_str = llm_data_input # 1. 清理 Markdown 代码块标记 (保持你现有的健壮清理逻辑) llm_data_str = llm_data_str.strip() if llm_data_str.startswith("```json"): llm_data_str = llm_data_str[len("```json"):] elif llm_data_str.startswith("```"): llm_data_str = llm_data_str[len("```"):] if llm_data_str.endswith("```"): llm_data_str = llm_data_str[:-len("```")] llm_data_str = llm_data_str.strip() data = {} try: data = json.loads(llm_data_str) except json.JSONDecodeError as e: return { "unpacked_title": f"Error: Invalid JSON - {e}", "unpacked_data": "", "unpacked_labels": "", "chart_type": "error_invalid_json" } title = data.get("chart_tool_title", "无标题") original_data_string = data.get("chart_tool_data_string", "") # 获取原始数据字符串 label_string = data.get("chart_tool_label_string", "") chart_type = data.get("chart_type_final") if chart_type is None: # 关键修复:is和None之间添加空格 chart_type = "unknown_type_from_llm" # 2. 清理和验证 data_string (这是关键的修改部分) cleaned_data_parts = [] if original_data_string: # 只有当原始数据字符串非空时才处理 parts = original_data_string.split(';') for part in parts: part = part.strip() # 移除每个部分前后的空格 if part: #确保部分不是空字符串 try: # 尝试转换为 float 来验证它是否是有效数字 # 我们仍然以字符串形式保存,因为插件期望分号分隔的字符串 float(part) # 如果这里失败,会抛出 ValueError cleaned_data_parts.append(part) except ValueError: cleaned_data_parts.append("0") # 方案 b: 替换为 "0" # print(f"Warning: Invalid data part '{part}' replaced with '0'.") else: # 如果部分是空字符串 (例如来自 ";;"),也替换为 "0" 或跳过 cleaned_data_parts.append("0") # 方案 b: 替换为 "0" # print(f"Warning: Empty data part replaced with '0'.") unpacked_data = ";".join(cleaned_data_parts) return { "unpacked_title": title, "unpacked_data": unpacked_data, # 使用清理过的数据字符串 "unpacked_labels": label_string, # 标签字符串通常不需要转为数字,所以保持原样 "chart_type": chart_type }

数据库表信息

效果预览

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

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

相关文章

【剑斩OFFER】算法的暴力美学——最长公共前缀

一、题目描述二、算法原理思路:先找前两个字符串的公共前缀,再拿着这个公共前缀的,去跟剩余的字符串比较,然后不断的更新这个公共前缀:三、代码实现第一种解法:class Solution { public:string longestComm…

从ACPI!ParseArg函数中的ACPI!Buffer和ACPI!ParseOpcode到ACPI!Name中的ACPI!MoveObjData

从ACPI!ParseArg函数中的ACPI!Buffer和ACPI!ParseOpcode到ACPI!Name中的ACPI!MoveObjData0: kd> t Breakpoint 9 hit eax00000000 ebx899b23cc ecx899b23cc edx00000000 esi00000043 edi8997c000 eipf74271e8 espf789a0f4 ebpf789a110 iopl0 nv up ei pl zr na pe n…

vllm笔记(1):最基础的离线推理

vllm是一个知名的推理框架,也是开始尝试接触vllm了。 本代码来源https://github.com/vllm-project/vllm/blob/main/examples/offline_inference/basic/basic.py #LLM 是用于运行 vLLM 引擎离线推理的主类。 #SamplingParams 指定了采样过程的参数。 from vllm imp…

拒绝繁琐配置,推荐一款简洁易用的项目管理工具Kanass

为了保证项目高效、有序地推进,我们通常使用如Jira等项目管理工具。Jira整体功能完善,自定义能力强大,但配置繁琐,上手难度大,同时随着Atlassian销售策略调整Jira server中国区即将停止维护,今天给大家推荐…

2核2G3M的云服务器有哪些用途?适合部署小型网站或博客吗?

阿里云近期推出的经济型e实例, 2核2G、3M带宽、独立公网IP、不限流量, 99元/年,续费同价,我自己也买了,用了有几年了。 价格低到让人怀疑: 这样的配置,到底能干点什么? 部署个人博客…

Lua 函数教程

Lua 函数 1. 课程信息 课题:Lua 函数基础与进阶用法课时建议:60 ~ 90 分钟适合对象:已掌握 Lua 变量、流程控制(if/for/while)与 table 基础的学习者 2. 教学目标 理解函数的作用:封装逻辑、复用代码、提升…

1核2GB服务器运行Nginx + MySQL + PHP(LNMP)会有性能瓶颈吗?

很多新手在搭建网站时, 会选最便宜的云服务器——比如1核2GB配置。 然后装上 Nginx MySQL PHP(即 LNMP 环境), 想着“先试试看”。 但很快发现: 网站偶尔打不开、后台卡顿、数据库连接超时…… 是配置太低&#xff…

计算机深度学习毕设实战-基于python的海洋生物识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

这里还有8个“Manus”:1亿美元ARR,都是ToC

Meta刚掏出20亿美元把Manus收入囊中的同时,一份名单也随即在VC圈疯传—— “1亿美元ARR俱乐部”。 上榜公司不多,但个个鼎鼎大名: Perplexity:200亿美元ElevenLabs:66亿美元Lovable:66亿美元Replit&…

汽车制造质量大数据分析如何助力企业创新发展?

在汽车制造业转型升级的关键阶段,质量大数据分析正成为企业提升核心竞争力的重要抓手。随着市场竞争日趋激烈,消费者对汽车产品的要求不断提高,传统的质量管理方法已经难以满足现代生产的需求。质量大数据分析通过整合多源异构数据&#xff0…

拒绝繁琐配置,推荐一款简洁易用的知识管理工具sward

中国区Confluence Server即将停止销售,今天给大家推荐一款国产开源免费的开源平替方案 - sward。 1、产品简介 sward是一款国产的且免费开源的知识管理工具,包含知识库管理、目录管理、文档管理、markdown管理、文档的评审与版本维护等模块。产品页面简…

【问题记录】解决unity 项目里用了AVPro Video,打包到Mac端时报错Plugin ‘AVProVideo.bundle‘ is used from several locations

unity 项目里用了AVPro Video&#xff0c;打包到Mac端时报错如下&#xff1a;Plugin AVProVideo.bundle is used from several locations: Assets/Plugins/AVProVideo.bundle would be copied to <PluginPath>/AVProVideo.bundle Assets/Plugins/macOS/AVProVideo.bundle…

对象存储OSS是什么,有什么用途?

你可能听过“云服务器”“数据库”“CDN”&#xff0c; 但有没有注意过“对象存储”这个词&#xff1f; 比如阿里云的 OSS&#xff08;Object Storage Service&#xff09;&#xff0c;其他云厂商也有类似的产品&#xff0c;可能名字略有差异 听起来很技术&#xff0c;其实用途…

2027 年 1 月 1 日起施行!GB46864 新规落地,二手电子产品信息清除有了 “铁规矩”,你的隐私不再 “裸奔”

随着电子产品更新迭代加速&#xff0c;二手手机、电脑、平板等设备的流通越来越频繁。但你是否知道&#xff0c;简单的 “恢复出厂设置” 根本无法彻底清除数据&#xff1f;不少不法分子通过技术手段恢复二手设备中的用户信息&#xff0c;导致通讯录泄露、账号被盗、生物识别信…

融资35亿后,Kimi神秘模型现身竞技场

融资35亿后&#xff0c;Kimi的新模型紧跟着就要来了&#xff1f;&#xff01; 大模型竞技场上&#xff0c;一个名叫Kiwi-do的神秘模型悄然出现。 发现这个新模型的推特网友询问了模型的身份&#xff0c;结果模型自报家门&#xff0c;表示自己来自月之暗面Kimi&#xff0c;训练…

vscode出现中文乱码?

第一次用vscode打开代码会出现中文注释因识别不了而乱码的情况&#xff0c;类似这样printf(“张三\n”);1.单击软件左下角设置&#xff08;类似齿轮&#xff09;的按钮在出现的搜索框里输入&#xff1a;Files.autoGuessEncoding&#xff0c;按回车键确定。关闭vscode,然后重新打…

深度学习毕设选题推荐:基于python-CNN的常见鱼类分类识别深度学习

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

彻底搞懂 Event Loop!一次性吃透宏任务、微任务、执行顺序

Event Loop&#xff08;事件循环&#xff09;是 JavaScript 执行机制里的核心知识点。不管是前端面试还是日常开发&#xff0c;只要涉及异步操作&#xff0c;就绕不开它。 这篇文章不玩高深术语&#xff0c;用一套真实示例&#xff0c;带你搞懂&#xff1a; 同步任务、宏任务、…

AI跨文化陪练系统:用技术破解“语言通而心意阻”

和海外客户谈判时&#xff0c;一句“再考虑”被误解为拒绝&#xff1b;向异国朋友问候&#xff0c;却因语气不当显得冒犯——这种“语言过关、文化翻车”的场景&#xff0c;正是AI跨文化能力陪练系统要解决的核心问题。它不止是翻译工具&#xff0c;更是靠技术复刻真实跨文化场…

AI正在占领你的视频推荐流

你的视频推荐流&#xff0c;正在被AI“吞噬”。 这不是危言耸听&#xff0c;正经新调查发现&#xff1a; YouTube算法向新用户展示的视频中&#xff0c;有超过20%的内容是AI制造的低质量视频。 再扎心点说就是&#xff0c;我们平时在YouTube刷到的每5条视频中&#xff0c;可…