TDengine 基于 TDgpt 的 AI 应用实战
基于 TDgpt 时序数据智能体的风力发电预测
作者: derekchen
Demo 数据集准备
我们使用公开的UTSD数据集里面的某风场发电数据,作为预测算法的数据来源,基于历史数据预测未来一天内的每15分钟的发电量。原始数据集的采集频次为4秒,单位与时间戳未提供。为了方便演示,按照频率从2025-01-01 00:00:00开始向前倒推生成时间戳,并按照15分钟进行求和降采样后存储在数据文件中。
该数据文件,放置于https://github.com/taosdata/TDgpt-demo仓库的demo_data目录下,请参考下文的步骤导入TDengine以完成演示。数据集的统计信息如下:
演示环境准备
环境要求
您可基于Linux、Mac以及Windows操作系统完成Demo系统的运行。但为使用docker-compose,您计算机上需要安装有下属软件:
- Git
- Docker Engine: v20.10+
- Docker Compose: v2.20+
Demo中包含3个docker镜像 (TDengine, TDgpt, Grafana),以及一组用于产生预测/异常检测结果的shell脚本。组件版本的要求如下:
克隆Demo仓库到本地
git clone https://github.com/taosdata/TDgpt-demo
cd TDgpt-demo
chmod 775 analyse.sh
文件夹下包含docker-compose.yml、tdengine.yml两个yml文件。docker-compose.yml 包含了所有一键启动demo所需的镜像配置信息,其引用tdengine.yml作为Grafana的数据源配置。
TDgpt-demo/demo_data下包含三个csv文件(electricity_demand.csv、wind_power.csv、ec2_failure.csv),以及三个同前缀sql脚本,分别对应电力需求预测、风力发电预测和运维监控异常检测场景。
TDgpt-demo/demo_dashboard下包含了三个json文件(electricity_demand_forecast.json、wind_power_forecast.json、ec2_failure_anomaly.json),分别对应三个场景的看板。
docker-compose.yml中已经定义了TDengine容器的持久化卷:tdengine-data,待容器启动后,使用docker cp命令将demo_data拷贝至容器内使用。
运行和关闭Demo
注意:在运行demo前,请根据您宿主机的架构(CPU类型),编辑docker-compose.yml文件,为TDengine指定对应的platform参数:linux/amd64(Intel/AMD CPU)或linux/arm64(ARM CPU)。TDgpt必须统一使用linux/amd64参数。
进入docker-compose.yml文件所在的目录执行如下命令,启动TDengine、TDgpt和Grafana一体化演示环境:
docker-compose up -d
首次运行时,等待10s后请执行如下命令将TDgpt的Anode节点注册到TDengine:
docker exec -it tdengine taos -s "create anode 'tdgpt:6090'"
在宿主机执行下列命令,初始化体验测试环境的数据:
docker cp analyse.sh tdengine:/var/lib/taos
docker cp demo_data tdengine:/var/lib/taos
docker exec -it tdengine taos -s "source /var/lib/taos/demo_data/init_wind_power.sql"
关闭演示环境,请使用:
docker-compose down
进行演示
1. 打开浏览器,输入http://localhost:3000,并用默认的用户名口令admin/admin登录Grafana。
2. 登录成功后,进入路径”Home → Dashboards”页面,并且导入wind_power_forecast.json文件。
3. 导入后,选择“wind_power_forecast”这个面板。面板已经配置好了真实值、TDtsfm_1以及HoltWinters的预测结果。当前只有真实值的数据曲线。
4. 我们以analyze.sh脚本,来重现上述预测结果。首先完成TDtsfm_1算法的演示:
docker exec -it tdengine /var/lib/taos/analyse.sh --type forecast --db tdgpt_demo --table wind_power --stable single_val --algorithm tdtsfm_1 --params "fc_rows=96,wncheck=0" --start "2024-07-12" --window 30d --step 1d
上述shell脚本,将从指定的起始时间开始(2024-07-12)以前一个月的数据为输入,使用TDtsfm_1算法预测当前下一天的每15分钟的发电量(共计96个数据点),直到达到wind_power表中最后一天的记录,并将结果写入wind_power_tdtsfm_1_result表中。执行新的预测前,脚本会新建/清空对应的结果表。执行过程中将持续在控制台上,按照天为单位推进输出如下的执行结果:
taos> INSERT INTO tdgpt_demo.wind_power_tdtsfm_1_result SELECT _frowts, forecast(val, 'algorithm=tdtsfm_1,fc_rows=96,wncheck=0')
FROM tdgpt_demo.wind_power
WHERE ts >= '2024-09-04 00:00:00' AND ts < '2024-10-04 00:00:00'
Insert OK, 96 row(s) affected (0.264995s)
5. Grafana的看板上,配置刷新频率为5s,将动态显示预测结果的黄色曲线,直观呈现与实际值的对比。为了展示清晰,请按住command键点击左下角的Real以及TDtsfm_1图例(Mac下,Windows下请使用win键),从而只保留这两条曲线展示。
6. 完成HoltWinters模型的演示:
docker exec -it tdengine /var/lib/taos/analyse.sh --type forecast --db tdgpt_demo --table wind_power --stable single_val --algorithm holtwinters --params "rows=96,period=96,wncheck=0,trend=add,seasonal=add" --start "2024-07-12" --window 30d --step 1d
与第四步类似,HoltWinters模型将动态输出预测结果并呈现在看板上。从预测结果中可以看到,TDtsfm_1对数据的预测精度优于于传统的统计学方法HoltWinters。除了预测精度外,HoltWinters算法的最大问题是需要非常精细化的对参数进行调整评估,否则还容易出现下图中这种频繁发生的预测值奇异点。
基于鼠标圈选的方式,我们可以查看一段时间内的细粒度预测结果对比:
您也可以尝试其他算法或模型,来找到最合适自己场景的算法和模型。
Demo脚本使用详解
脚本概述
analyse.sh脚本用于在 TDengine 数据库上执行时间序列预测和异常检测分析,支持滑动窗口算法处理。主要功能包括:
- 时间序列预测 :使用 HoltWinters 等算法进行未来值预测 。
- 异常检测 :使用 k-Sigma 等算法识别数据异常点 。
- 自动窗口滑动 :支持自定义窗口大小和步长进行连续分析。
参数说明
TDengine 推荐使用超级表来进行数据建模。因此,Demo中建立了一个名为single_val的超级表,包含ts (timestamp类型) 和val(float类型),以及标签定义scene (varchar (64))。现阶段TDgpt只支持单列值输入输出,因此这个超级表可以作为所有源数据表和结果表的结构定义。子表的表名与tag名称保持一致即可。
db参数指定了源数据表和结果表隶属的数据库。结果表将以【源表名称】_【算法名称】_【result】格式存储。Grafana里面通过查询结果表实现分析结果和原始数据的对比。
一般情况下,对于非必填项,用户在demo过程中只需要设置–start参数以节省运行时间。对于必填项,请参考示例值进行设置。
时间格式说明
step和window参数指定的滑动步长和分析窗口大小需符合如下参数约定:
脚本执行流程
graph TDgpt_Demo
A[开始] --> B[参数解析与验证]
B --> C{是否指定start?}
C -->|否| D[查询最小时间戳]
C -->|是| E[转换时间格式]
D --> E
E --> F[计算时间窗口]
F --> G[生成结果表]
G --> H{是否到达数据终点?}
H -->|否| I[生成并执行SQL]
I --> H
H -->|是| J[输出完成信息]
使用更多的数据
参考「运行和关闭Demo」里wind_power.sql脚本的内容,确保按照规定格式将数据准备为csv格式(逗号分隔,值需要用英文双引号括起来),即可将数据导入TDengine。然后,请使用「进行演示」章节中的方法来生成预测结果,并调整Grafana中的看板以实现和实际数据的对比。
结论
在本文中,我们展示了使用TDgpt来进行风力发电量的完整流程。从中可以看到,基于 TDgpt 来构建时序数据分析,能够以SQL方式实现与应用的便捷集成,还可以用Grafana 进行展示,大大降低开发和应用时序数据预测和异常检测的成本。
从预测效果来看,基于transformer架构的预训练模型TDtsfm_1在使用的数据集上展示出优于Holtwinters模型的效果。但相比于”基于TDgpt的电力需求预测”中的效果,整体预测准确性要低一些。这一方面是由于TDtsfm_1训练时使用的是wind_power数据集的4s精度原始数据,而非降采样数据,这会导致数据特征没有被很好的捕获,从而降低了针对降采样数据的预测效果;另一方面,风力发电量与天气预报数据高度相关。受限于数据集中只有发电量数据,无法产生良好的预测结果。
在不同的实际场景下,用户需要针对数据特点,针对模型算法进行选择和参数调优。TDgpt的企业版中,将为用户提供更多的选择:
- 模型选择器。模型选择器可以自动根据用户的历史数据集,对购买的所有模型进行准确性评估。用户可选择最适合自己场景的模型或算法进行部署和应用。
- TDtsfm_1自研模型的重训练及微调。TDtsfm_1基于海量时序数据进行了预训练,在大部分场景下相比于传统的机器学习和统计预测模型都会有显著的准确率优势。如果用户对于模型预测准确度有更高的要求,可以申请购买TDgpt企业版的预训练服务。使用用户的场景历史数据进行预训练,在特定场景下的预测效果可能更佳。
- 第三方解决方案。涛思数据联合国内外时序分析/异常检测专业厂家、研究机构,为用户提供专业的分析解决方案,包括落地过程中的实施服务等。
关于背景
新能源发电预测技术正成为保障电网稳定运行的关键。随着风电、光伏等新能源快速发展,天气变化带来的发电波动给电网调度带来挑战。通过实时预测,电网可提前调配储能设备或启动燃气电站,防止突然停电。国家还规定预测偏差过大的企业需缴纳罚款,推动企业进行预测技术升级。这项技术带来的经济效益同样显著。在西北地区,通过预测调整火电出力,可大幅减少煤炭浪费。电力市场中,发电企业能结合发电量和电价预测制定交易策略,例如在光伏发电高峰时段提前安排储能设备放电,提升收益。
技术进步正推动行业向智能化转型。当前主流技术通过分析气象数据和历史发电规律,构建动态预测模型,并借助云端系统实时优化调度策略。例如,部分企业通过融合气象云层监测和地形数据,显著提升预测精度。此外,风光互补发电系统、储能技术等协同应用,进一步增强了新能源的稳定性。
随着电力市场化改革深化,预测技术已成为新能源参与市场竞争的关键支撑。通过提前预测发电能力和市场供需,企业可优化中长期交易策略,同时提升现货市场中的灵活响应能力。这种技术革新正推动电力系统从依赖传统能源转向更智能、高效的新模式。
本文将提供基于 docker-compose 快速部署 TDgpt 体验测试环境的指引。并基于这个环境和真实的数据,展示日前预测15分钟级别的风力发电量预测的全过程,便于大家快速掌握 TDgpt,迅速让自己拥有AI驱动的时序数据预测与异常检测的能力。
关于TDgpt
TDgpt 是 TDengine 内置的时序数据分析智能体,它基于 TDengine 的时序数据查询功能,通过 SQL 提供运行时可动态扩展和切换的时序数据高级分析的能力,包括时序数据预测和时序数据异常检测。通过预置的时序大模型、大语言模型、机器学习、传统的算法,TDgpt 能帮助工程师在10分钟内完成时序预测与异常检测模型的上线,降低至少80%的时序分析模型研发和维护成本。
截止到3.3.6.0版本,TDgpt 提供Arima、HoltWinters、基于Transformer架构自研的TDtsfm (TDengine time series foundation model) v1版和其他时序模型,以及k-Sigma、Interquartile range(IQR)、Grubbs、SHESD、Local Outlier Factor(LOF)等异常检测模型。用户可以根据TDgpt开发指南自行接入自研或其他开源的时序模型或算法。
相关文章:

TDengine 基于 TDgpt 的 AI 应用实战
基于 TDgpt 时序数据智能体的风力发电预测 作者: derekchen Demo 数据集准备 我们使用公开的UTSD数据集里面的某风场发电数据,作为预测算法的数据来源,基于历史数据预测未来一天内的每15分钟的发电量。原始数据集的采集频次为4秒ÿ…...

RocketMQ 消息发送核心源码解析:DefaultMQProducerImpl.send () 方法深度剖析
引言 在分布式系统中,消息队列是实现异步通信、服务解耦和流量削峰的关键组件。Apache RocketMQ 作为一款高性能、高可靠的消息中间件,被广泛应用于各类互联网场景。其中,消息发送是最基础也是最重要的功能之一。本文将深入剖析 RocketMQ 中…...

BiliNote部署实践
开源地址: https://github.com/JefferyHcool/BiliNote 🚀 快速开始 1. 克隆仓库 git clone https://github.com/JefferyHcool/BiliNote.git cd BiliNote mv .env.example .env2. 启动后端(FastAPI) cd backend pip insta…...
deepseek问答记录:请讲解一下transformers.HfArgumentParser()
1. 核心概念: transformers.HfArgumentParser 是 Hugging Face Transformers 库提供的一个命令行参数解析器。它基于 Python 内置的 argparse 模块,但进行了专门增强,目的是为了更简单、更优雅地管理机器学习(尤其是 NLP 任务&am…...

bismark OT CTOT OB CTOB 以及mapping后的bam文件中的XG,XR列的含义
首先,OT,OB,CTOT,CTOB都是描述测序reads的,而不是描述参考基因组的。 bisul-fate建库会将DNA双链文库中非甲基化的C转化成U。转化结束后,被转化的U和互补链的G并不配对。此时正链(,…...
new语法
在C中,new 是用于动态内存分配的操作符,允许在运行时请求内存空间。以下是 new 的完整语法和用法说明: 1. 基本语法 1.1 单一对象分配 type* pointer new type(initializer);作用:分配一个 type 类型的对象,并返回…...
npm、yarn幽灵依赖问题
很好!我们来专门讲讲**幽灵依赖(Phantom Dependency)**是什么,以及为什么 pnpm 对这个问题非常严格。 👻 什么是幽灵依赖? 幽灵依赖(Phantom Dependency),指的是&#x…...

Android Native 之 adbd进程分析
目录 1、adbd守护进程 2、adbd权限降级 3、adbd命令解析 1)adb shell 2)adb root 3)adb reboot 4、案例 1)案例之实现不需要执行adb root命令自动具有root权限 2)案例之实现不需要RSA认证直接能够使用adb she…...

CAN通讯协议中各种参数解析
1.各种参数缩写 2.多帧传输时间参数解析 - Sender(左侧) 指的是 多帧数据的发送者,也就是: ECU(被测系统 / 响应方) - Receiver(右侧) 指的是 多帧数据的接收者,也就是…...

网络攻防技术三:网络脆弱性分析
文章目录 一、影响安全的因素二、计算机网络三、网络体系结构脆弱性1、因特网容易被攻击的特性 四、典型网络协议安全性分析(重要)1、IPv42、RIP(UDP)3、ICMP(UDP)4、ARP5、OSPF(IP数据报)6、BGP(TCP)7、UDP8、TCP9、DNS(UDP)10、…...

(八)登录认证与学生写作画像
本次将赵昱琨同学之前完成的学生写作画像与智能学习路径规划的后端与目前已有的后端框架进行整合。同时为了实现学生写作画像与智能学习路径规划,需要在之前简易的登录系统上进行重构,所以本次大规模重写了登录模块,同时发现很多过去冗余的代…...

Netty学习example示例
文章目录 simpleServer端NettyServerNettyServerHandler Client端NettyClientNettyClientHandler tcp(粘包和拆包)Server端NettyTcpServerNettyTcpServerHandler Client端NettyTcpClientNettyTcpClientHandler protocolcodecCustomMessageDecoderCustomM…...
几种常用的Agent的Prompt格式
一、基础框架范式(Google推荐标准) 1. 角色与职能定义 <Role_Definition> 你是“项目专家”(Project Pro),作为家居园艺零售商的首席AI助手,专注于家装改造领域。你的核心使命: 1. 协助…...
数据库运维管理系统在AI方向的实践
引言 关系型数据库(如MySQL、PostgreSQL、SQL Server、Oracle等)作为核心数据存储平台,承载着关键业务系统的运行。数据库的运维管理(DBA)工作变得愈发复杂和重要,涉及性能监控、故障诊断、容量规划、安全审计、自动化运维等多个方面。传统的数据库运维依赖人工经验,效…...

[RoarCTF 2019]Easy Calc
查看源代码 <!--Ive set up WAF to ensure security.--> <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div …...

[Windows]在Win上安装bash和zsh - 一个脚本搞定
目录 前言安装步骤配置要求下载安装脚本启动程序 前言 Windows是一个很流行的系统, 但是在Windows上安装bash和zsh一直是一个让人头疼的问题. 本蛙特意打包了一个程序, 用于一站式解决这一类的问题. 安装步骤 配置要求 系统: Windows软件: Powershell 5.1或以上 下载安装…...
ubuntu系统上运行jar程序输出时间时区不对
springboot项目打包jar文件在ubuntu系统上运行,发现在系统和日志里面,显示和打印的当前时间时区都是UTC0,通过timedatectl命令设置系统时区为Asia/Shanghai,命令date -R发现系统已经修改成功,但是发现springboot仍然输…...
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
视频版 🎙 欢迎回到《前端达人 React播客书单》第 18 期。 今天,我们将对第二阶段的内容进行系统复盘,重点是两个关键词:样式 与 Hooks。 样式,决定组件“长什么样”Hooks,决定组件“怎么动起来” 我们不但…...
从认识AI开始-----解密LSTM:RNN的进化之路
前言 我在上一篇文章中介绍了 RNN,它是一个隐变量模型,主要通过隐藏状态连接时间序列,实现了序列信息的记忆与建模。然而,RNN在实践中面临严重的“梯度消失”与“长期依赖建模困难”问题: 难以捕捉相隔很远的时间步之…...

leetcode0513. 找树左下角的值-meidum
1 题目:找树左下角的值 官方标定难度:中 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]…...

命令行式本地与服务器互传文件
文章目录 1. 背景2. 传输方式2.1 SCP 协议传输2.2 SFTP 协议传输 3. 注意 命令行式本地与服务器互传文件 1. 背景 多设备协同工作中,因操作系统的不同,我们经常需要将另外一个系统中的文件传输到本地PC进行浏览、编译。多设备文件互传,在嵌入…...
MPTCP 聚合吞吐
只破不立假把式,前面连续喷 MPTCP 是个错误,今天说说如何克服。 到底谁在阻碍 MPTCP 聚合吞吐一定要搞清楚,是算法硬伤,是数据不足。前文说过,将一个窗口内的数据多路径 spray 有损吞吐,想要聚合吞吐&…...
JavaScript性能优化实战技术文章大纲
代码层面优化 避免全局变量污染,使用let和const替代var,减少作用域链查找开销。 // 反例:全局变量 var globalVar 低效;// 正例:局部变量 function optimized() {const localVar 高效; }减少DOM操作,合并多次操作或…...

LabelImg: 开源图像标注工具指南
LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具,使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一,支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费,并且跨平台支持 Windows、Lin…...

计算机网络 TCP篇常见面试题总结
目录 TCP 的三次握手与四次挥手详解 1. 三次握手(Three-Way Handshake) 2. 四次挥手(Four-Way Handshake) TCP 为什么可靠? 1. 序列号与确认应答(ACK) 2. 超时重传(Retransmis…...

树欲静而风不止,子欲养而亲不待
2025年6月2日,13~26℃,一般 待办: 物理2 、物理 学生重修 职称材料的最后检查 教学技能大赛PPT 遇见:使用通义创作了一副照片,很好看!都有想用来创作自己的头像了! 提示词如下: A b…...

Kotlin中的::操作符详解
Kotlin提供了::操作符,用于创建对类或对象的成员(函数、属性)的引用。这种机制叫做成员引用(Member Reference)。这是Kotlin高阶函数和函数式编程的重要组成部分。 简化函数传递 在Java中,我们这样传方法: list.forEach(item -> System.…...
【Linux】(1)—进程概念-③Linux进程概念与PCB
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux进程概念与PCB 前言 提示:以下是本篇文章正文内容,下面案例可供参考 什么是进程? 进程可以理解为"正在执行的…...
神经网络中的梯度消失与梯度爆炸
在深层次的神经网络中很容易出现梯度消失与梯度爆炸的问题。这篇博客就详细介绍一下为什么会产生梯度消失与梯度爆炸的问题,以及如何解决。 首先梯度是什么 类比快递员送包裹: 神经网络训练时,需要根据预测错误(损失函数&#…...

深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
目录 一、翻译环境和运行环境 二、翻译环境:预编译编译汇编链接 (一)预处理(预编译) (二)编译 1、词法分析 2、语法分析 3、语义分析 (三)汇编 (四&…...