【人工智能-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.pswp.cn/news/906302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906302.shtml
英文地址,請注明出處:http://en.pswp.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的安裝、本地倉庫的創建與配置,以及工作區、暫存區和版本庫的區分。詳細講解了版本回退、撤銷修改等操作,并深入探討了分支管理,包括分支的創建、切換、合并、刪除及沖突解決。此外,還介紹了遠程操作…