LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师
背景
前面的文章通过 Ollama 私有化部署了 Qwen2.5 (7B) 模型,然后使用 Docker Compose 一键部署了 Dify 社区版平台。
-
LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库:在
Dify平台上,通过普通编排的方式,创建了基于Qwen2.5模型的聊天助手,并添加了个人知识库作为上下文,实现了真正的个人助手功能。 -
LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI搜索引擎:介绍了使用
Dify提供的工作流编排以及Dify自带的Tavily Search搜索工具、LLM模型Qwen2.5 (7B)模型实现自己专属的AI搜索引擎。 -
LLM大语言模型私有化部署-使用Dify的Agent与Flux.1打造专属文生图智能体:使用
Dify提供的Agent智能体功能,结合LLM模型Qwen2.5 (7B),同时利用外部工具Flux.1(文生图的“新王”)实现自己专属的文生图智能体
今天我们使用 Dify 提供的工作流编排以及 Dify 自带的 代码执行 或者 HTTP请求 模块,依托阿里百炼的 LLM 模型 qwen2.5-14b-instruct / qwen2.5-72b-instruct / qwen-plus-latest 模型(低于14B的模型效果一般。。)实现对 MySQL 中的诗词数据库进行分析,实现自己的AI数据分析师。
Note:阿里百炼平台对新用户每个模型免费调用1000000次,测试够用了。。
先上效果图

对应生成的 SQL 如下,是个单表聚合查询语句,可以看出大模型可以完全遵循自然语言指令生成 SQL 语句,并绘制合适的ECharts图表,Nice~
-- 看下宋词相同词牌名的Top10,从多到少排序
SELECT title, COUNT(*) AS COUNT
FROM poems
GROUP BY title
ORDER BY COUNT DESC
LIMIT 10
打造专属AI数据分析师
新建工作流编排聊天助手
新建一个“聊天助手”类型的应用,编排方法选择“工作流编排”。

添加LLM-生成SQL节点
先选择一个合适的模型,这里经过测试,阿里百炼的 LLM 模型 qwen2.5-14b-instruct / qwen2.5-72b-instruct / qwen-plus-latest 模型(低于14B的模型效果一般。。也可以试试 DeepSeek ~~)均可实现稳定的输出。

具体内容看以下提示词内容,需要说明的是,这里的表结构我是直接通过 MySQL 的 desc 直接得到的。

- SYSTEM提示词

# 你是数据分析专家,精通MySQL,能够根据用户的问题生成高效的SQL查询。## 数据库表结构### 1. poetry(唐诗宋诗表);+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| author_id | int(11) | YES | | 0 | |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
| yunlv_rule | text | YES | | NULL | |
| author | varchar(255) | NO | | NULL | |
| dynasty | char(1) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+### 2. poetry_author(唐诗宋诗作者表);+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| intro | text | YES | | NULL | |
| dynasty | char(1) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+### 3. poems(宋词表);+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| author_id | int(11) | YES | | 0 | |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
| author | varchar(255) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+### 4. poems_author(宋词作者表);+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| intro_l | text | YES | | NULL | |
| intro_s | text | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+注意:dynasty字段存储的是缩写:S代表宋,T代表唐
- USER提示词

问题:{{#sys.query#}}
请严格按照以下要求回答:
1. 仅使用提供的表和字段
2. 输出内容直接给完整SQL,不要任何Markdown格式,不要有注释,不要有换行
添加HTTP请求执行SQL查询节点
在 Dify 中执行 SQL 查询可以有两种方式:
- 通过代码执行节点的方式,直接完成从数据库中查询工作(由于
Docker部署方式的Dify里的Sandbox沙箱安全机制,导致无法连接外部的MySQL数据库,这种方式没有成功,下一篇专门来介绍下如何在Sandbox沙箱中安装Python依赖以及如何配置Sandbox沙箱网络); - 通过HTTP请求的方式,请求一个部署好的
API服务,本文采用这种方式。
执行SQL查询的API
先介绍下这个执行 SQL 查询的 API 服务,代码格式如下,核心是 execute_query.py 文件,并将其构建为一个 Docker 镜像进行容器化部署。
└── fastapi/├── execute_query.py├── requirements.txt├── Dockerfile└── README.md
- execute_query.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import pymysql
import uvicorn
from contextlib import contextmanagerapp = FastAPI()class SQLQuery(BaseModel):sql_query: str@contextmanager
def get_db_connection(config):# 数据库连接的上下文管理器conn = Nonetry:conn = pymysql.connect(**config)yield connfinally:if conn:conn.close()@app.post("/execute_query")
async def execute_query(query: SQLQuery
):# 处理POST请求以执行SQL查询try:sql_queries = query.sql_query.strip()if not sql_queries:raise HTTPException(status_code=400, detail="Missing sql_query parameter")with get_db_connection(app.db_config) as conn:results = []with conn.cursor(pymysql.cursors.DictCursor) as cursor:for sql_query in sql_queries.split(';'):if sql_query.strip():cursor.execute(sql_query)result = cursor.fetchall()if result:results.extend(result)conn.commit()return resultsexcept pymysql.Error as e:raise HTTPException(status_code=500, detail=f"数据库错误: {str(e)}")except Exception as e:raise HTTPException(status_code=500, detail=f"服务器错误: {str(e)}")if __name__ == '__main__':# 数据库配置app.db_config = {"host": "192.168.44.171","user": "root","password": "root","database": "poetry","port": 3306,"charset": 'utf8mb4'}uvicorn.run(app, host='0.0.0.0', port=35005)
- requirements.txt
fastapi==0.115.8
pydantic==2.10.6
pymysql==1.1.1
uvicorn==0.34.0
- Dockerfile
# 使用官方的 Python 基础镜像
FROM python:3.10-slim# 设置工作目录
WORKDIR /app# 复制 requirements.txt 文件并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt# 复制应用程序代码
COPY . .# 暴露应用程序的端口(如果需要)
EXPOSE 35005# 定义启动命令
CMD ["python", "execute_query.py"]
- README.md
1. 使用pipreqs第三方库生成requirements.txtpip install pipreqs
pipreqs ./ --encoding=utf8 --force2. 安装依赖pip install -r requirements.txt3. 构建镜像docker build -t poetry-image .4. 运行容器docker run -p 35005:35005 -d --name poetry poetry-image5. 验证接口curl -X POST http://192.168.44.171:35005/execute_query -H "Content-Type: application/json" -d '{"sql_query":"select * from poetry limit 1;"}'
配置HTTP请求节点-执行SQL查询
配置 POST 接口的API地址、Headers信息与参数信息。
Note:参数可以通过输入 / 进行快捷选择。

添加LLM-数据分析节点
在LLM-数据分析节点,编辑SYSTEM系统提示词如下 :
# 数据分析专家工作指南## 角色定位专业的SQL数据分析专家,负责解读MySQL poetry数据库的查询结果:{{#1740285905752.body#}}## 核心规则1. 直接分析已提供数据,默认数据已满足查询条件2. 接受数据原貌,不质疑数据有效性3. 无需二次筛选或验证数据范围4. 空数据集统一回复"没有查询到相关数据"5. 避免使用提示性语言6. 分析结果以markdown格式输出7. 整理sql查询结果,以markdown表格格式输出放置输出开头8. 整理sql查询结果, 以echarts图表格式输出放最后,图表配置需要尽量简洁,不要有太多冗余的配置项输出格式如下:``echarts
{"title": {"text": "示例图表","subtext": "ECharts 示例"},"tooltip": {"trigger": "item","formatter": "{a} <br/>{b}: {c} ({d}%)"},"legend": {"orient": "vertical","left": "left","data": ["A", "B", "C", "D"]},"series": [{"name": "示例数据","type": "pie","radius": "50%","data": [{ "value": 335, "name": "A" },{ "value": 310, "name": "B" },{ "value": 234, "name": "C" },{ "value": 135, "name": "D" }],"emphasis": {"itemStyle": {"shadowBlur": 10,"shadowOffsetX": 0,"shadowColor": "rgba(0, 0, 0, 0.5)"}}}]
}
``9. 注意:如果sql查询结果为标量或者仅有一个结果,就取消Echarts图表。另外,根据结果自行决定使用不同的ECharts类型,eg: 柱状图、饼图、折线图、雷达图等。## 分析报告规范### 数据处理原则1. 严格基于JSON数据集2. 数据已预筛选,直接进行统计分析3. 不进行数据条件的二次确认### 报告结构要求1. 数据概览2. 详细分析3. 结论部分
Note: 上述 ECharts 格式的代码应该用三个反引号,我这里是因为跟文章里的代码片段格式冲突改成了两个反引号。。

测试预览试一下

数据分析结果
随便运行几个分析查询试下:
- 单表聚合查询
-- 统计创作唐诗最多的作者的Top10,仅列出超过500首的作者,从多到少排序
SELECT p.author, COUNT(*) AS poem_count
FROM poetry p
WHERE p.dynasty = 'T'
GROUP BY p.author
HAVING poem_count > 500
ORDER BY poem_count DESC
LIMIT 10

- 单表条件查询
-- 统计分别包含风、花、雪、月、山、水的唐诗数量
SELECT SUM(CASE WHEN content LIKE '%风%' THEN 1 ELSE 0 END) AS wind_count, SUM(CASE WHEN content LIKE '%花%' THEN 1 ELSE 0 END) AS flower_count, SUM(CASE WHEN content LIKE '%雪%' THEN 1 ELSE 0 END) AS snow_count, SUM(CASE WHEN content LIKE '%月%' THEN 1 ELSE 0 END) AS moon_count, SUM(CASE WHEN content LIKE '%山%' THEN 1 ELSE 0 END) AS mountain_count, SUM(CASE WHEN content LIKE '%水%' THEN 1 ELSE 0 END) AS water_count
FROM poetry
WHERE dynasty = 'T'

- 多表联合查询
-- 谁写的唐诗最多,给出作者详细信息
SELECT pa.name, pa.intro, COUNT(p.id) AS poem_count
FROM poetry p
JOIN poetry_author pa ON p.author_id = pa.id
WHERE p.dynasty = 'T'
GROUP BY p.author_id
ORDER BY poem_count DESC
LIMIT 1

小总结
本文通过使用 Dify 平台的工作流编排功能,结合阿里百炼的大型语言模型(如 qwen2.5-14b-instruct 等),成功打造了一个专属的AI数据分析师。能够根据用户提供的自然语言问题生成对应的 SQL 查询语句,并通过部署好的 API 服务执行这些查询,最终由另一个 LLM 节点对查询结果进行专业的数据分析和可视化展示。
整个过程不仅展示了大模型在理解和生成 SQL 方面的能力,还体现了通过集成不同工具和服务来构建复杂应用的可能性。例如,可以统计创作唐诗最多的作者、分析唐诗中特定元素的出现频率,以及联合查询作者信息与作品数量等,今后面对领导的取数需求,你可以直接替换数据源,轻松实现各种数据分析和可视化需求。
Reference
- http://difyai.com/
- https://github.com/langgenius/dify
- https://docs.dify.ai/zh-hans
- https://docs.dify.ai/v/zh-hans/guides/workflow/node/http-request
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!
相关文章:
LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师
背景 前面的文章通过 Ollama 私有化部署了 Qwen2.5 (7B) 模型,然后使用 Docker Compose 一键部署了 Dify 社区版平台。 LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库:在 Dify 平台上,通过普通编排的方式,创建了基于…...
Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(二)
在 GPU0 和 GPU1 之间共享数据 在某些情况下,也许可以在某些时候带来更好的用户体验: GPU0 和 GPU1 来自同一个 IHV。GPU0 可以将操作系统无法解读的显示配置相关信息传递给 GPU1。 数据 Blob 由 GUID 描述,如果 GPU1 的驱动程序能理解数据…...
基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
一、修改所有节点主机名 主节点就修改成master hostnamectl set-hostname master 然后输入bash刷新当前主机名 工作节点1就修改成node1 hostnamectl set-hostname node1 然后输入bash刷新当前主机名 二、全部节点安装依赖并同步时间 yum -y install socat conntrack ebta…...
软考教材重点内容 信息安全工程师 第17章 网络安全应急响应技术原理与应用
17.1 网络安全应急响应概述 网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。 17.1.1 网络安全应急响应概念 网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。 17.2.3 网络安…...
使用 DeepSeek + OmniParser v2 + UIAutomation 实现 GUI 应用自动化测试的探索
一、背景 UI 自动化测试一直是软件开发中的难点之一。尽管有许多工具和技术(如 Selenium、Appium 等)可以帮助我们实现自动化测试,但这些工具在面对复杂的 UI 变化时,往往需要大量的维护工作。随着人工智能技术的进步,尤其是自然语言处理(NLP)和计算机视觉(CV)技术的…...
Spring Security面试题
Spring Security面试题 基础概念 Q1: Spring Security的核心功能有哪些? public class SecurityBasicDemo {// 1. 基本配置public class SecurityConfigExample {public void configDemo() {ConfigurationEnableWebSecuritypublic class SecurityConfig extends …...
从零开始构建基于DeepSeek的智能客服系统
在当今的数字化时代,智能客服系统已经成为企业与客户沟通的重要桥梁。它不仅能够提升客户体验,还能大幅降低企业的运营成本。本文将带领你从零开始,使用PHP和DeepSeek技术构建一个功能强大的智能客服系统。我们将通过具体的案例和代码示例,深入探讨如何实现这一目标。 1. …...
Linux故障排查和性能优化面试题及参考答案
目录 如何查看 Linux 系统中的 CPU、内存、磁盘等资源使用情况? 什么是 Linux 中的负载(Load Average)?如何解读它? 如何通过 top 和 htop 命令监控系统性能? 如何使用 mpstat 命令来查看 CPU 的利用情况? 如何分析系统 CPU 瓶颈? 如何分析 CPU 瓶颈?如何优化 CP…...
【无人集群系列---大疆无人集群技术进展、技术路线与未来发展方向】
大疆无人集群技术进展、技术路线与未来发展方向 一、技术进展1. 核心技术创新(1)集群协同控制技术(2)感知与能源系统升级 2. 行业应用落地(1)智慧城市与安防(2)应急救援(…...
【亲测有效】百度Ueditor富文本编辑器添加插入视频、视频不显示、和插入视频后二次编辑视频标签不显示,显示成img标签,二次保存视频被替换问题,解决方案
【亲测有效】项目使用百度Ueditor富文本编辑器上传视频相关操作问题 1.百度Ueditor富文本编辑器添加插入视频、视频不显示 2.百度Ueditor富文本编辑器插入视频后二次编辑视频标签不显示,在编辑器内显示成img标签,二次保存视频被替换问题 问题1࿱…...
ubuntu windows双系统踩坑
我有个台式机,先安装的ubuntu,本来想专门用来做开发,后面儿子长大了,给他看了一下星际争霸、魔兽争霸,立马就迷上了。还有一台windows的笔记本,想着可以和他联局域网一起玩,在ubuntu上用wine跑魔…...
嵌入式八股文(五)硬件电路篇
一、名词概念 1. 整流和逆变 (1)整流:整流是将交流电(AC)转变为直流电(DC)。常见的整流电路包括单向整流(二极管)、桥式整流等。 半波整流:只使用交流电的正…...
flink使用demo
1、添加不同数据源 package com.baidu.keyue.deepsight.memory.test;import com.baidu.keyue.deepsight.memory.WordCount; import com.baidu.keyue.deepsight.memory.WordCountData; import org.apache.flink.api.common.RuntimeExecutionMode; import org.apache.flink.api.…...
OpenCV(8):图像直方图
在图像处理中,直方图是一种非常重要的工具,它可以帮助我们了解图像的像素分布情况。通过分析图像的直方图,我们可以进行图像增强、对比度调整、图像分割等操作。 1 什么是图像直方图? 图像直方图是图像像素强度分布的图形表示&am…...
力扣LeetCode:1656 设计有序流
题目: 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序…...
NGINX配置TCP负载均衡
前言 之前本人做项目需要用到nginx的tcp负载均衡,这里是当时配置做的笔记;欢迎收藏 关注,本人将会持续更新 文章目录 配置Nginx的负载均衡 配置Nginx的负载均衡 nginx编译安装需要先安装pcre、openssl、zlib等库,也可以直接编译…...
vm和centos
安装 VMware Workstation Pro 1. 下载 VMware Workstation Pro 访问 VMware 官方网站(https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html ),在该页面中点击 “立即下载” 按钮,选择适合你操作…...
c#丰田PLC ToyoPuc TCP协议快速读写 to c# Toyota PLC ToyoPuc读写
源代码下载 <------下载地址 历史背景与发展 TOYOPUC协议源于丰田工机(TOYODA)的自动化技术积累。丰田工机成立于1941年,最初是丰田汽车的机床部门,后独立为专注于工业机械与控制系统的公司。2006年与光洋精工(Ko…...
量子计算的数学基础:复数、矩阵和线性代数
量子计算是基于量子力学原理的一种新型计算模式,它与经典计算机在信息处理的方式上有着根本性的区别。在量子计算中,信息的最小单位是量子比特(qubit),而不是传统计算中的比特。量子比特的状态是通过量子力学中的数学工具来描述的,因此,理解量子计算的数学基础对于深入学…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter22-处理 XML
二十二、处理 XML 处理 XML XML 曾一度是在互联网上存储和传输结构化数据的标准。XML 的发展反映了 Web 的发展,因为DOM 标准不仅是为了在浏览器中使用,而且还为了在桌面和服务器应用程序中处理 XML 数据结构。在没有 DOM 标准的时候,很多开发…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
