TDengine 基于 TDgpt 的 AI 应用实战

article/2025/8/6 7:25:36

基于 TDgpt 时序数据智能体的风力发电预测

作者: derekchen 

Demo 数据集准备

我们使用公开的UTSD数据集里面的某风场发电数据,作为预测算法的数据来源,基于历史数据预测未来一天内的每15分钟的发电量。原始数据集的采集频次为4秒,单位与时间戳未提供。为了方便演示,按照频率从2025-01-01 00:00:00开始向前倒推生成时间戳,并按照15分钟进行求和降采样后存储在数据文件中。

该数据文件,放置于https://github.com/taosdata/TDgpt-demo仓库的demo_data目录下,请参考下文的步骤导入TDengine以完成演示。数据集的统计信息如下:

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

演示环境准备

环境要求

您可基于Linux、Mac以及Windows操作系统完成Demo系统的运行。但为使用docker-compose,您计算机上需要安装有下属软件:

  1. Git
  2. Docker Engine: v20.10+
  3. Docker Compose: v2.20+

Demo中包含3个docker镜像 (TDengine, TDgpt, Grafana),以及一组用于产生预测/异常检测结果的shell脚本。组件版本的要求如下:

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

克隆Demo仓库到本地

 
  1. git clone https://github.com/taosdata/TDgpt-demo
  2. cd TDgpt-demo
  3. 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一体化演示环境:

 
  1. docker-compose up -d

首次运行时,等待10s后请执行如下命令将TDgpt的Anode节点注册到TDengine:

 
  1. docker exec -it tdengine taos -s "create anode 'tdgpt:6090'"

在宿主机执行下列命令,初始化体验测试环境的数据:

 
  1. docker cp analyse.sh tdengine:/var/lib/taos
  2. docker cp demo_data tdengine:/var/lib/taos
  3. docker exec -it tdengine taos -s "source /var/lib/taos/demo_data/init_wind_power.sql"

关闭演示环境,请使用:

 
  1. docker-compose down

进行演示

1. 打开浏览器,输入http://localhost:3000,并用默认的用户名口令admin/admin登录Grafana。

2. 登录成功后,进入路径”Home → Dashboards”页面,并且导入wind_power_forecast.json文件。

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

3. 导入后,选择“wind_power_forecast”这个面板。面板已经配置好了真实值、TDtsfm_1以及HoltWinters的预测结果。当前只有真实值的数据曲线。

4. 我们以analyze.sh脚本,来重现上述预测结果。首先完成TDtsfm_1算法的演示:

 
  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表中。执行新的预测前,脚本会新建/清空对应的结果表。执行过程中将持续在控制台上,按照天为单位推进输出如下的执行结果:

 
  1. taos> INSERT INTO tdgpt_demo.wind_power_tdtsfm_1_result SELECT _frowts, forecast(val, 'algorithm=tdtsfm_1,fc_rows=96,wncheck=0')
  2. FROM tdgpt_demo.wind_power
  3. WHERE ts >= '2024-09-04 00:00:00' AND ts < '2024-10-04 00:00:00'
  4. Insert OK, 96 row(s) affected (0.264995s)

5. Grafana的看板上,配置刷新频率为5s,将动态显示预测结果的黄色曲线,直观呈现与实际值的对比。为了展示清晰,请按住command键点击左下角的Real以及TDtsfm_1图例(Mac下,Windows下请使用win键),从而只保留这两条曲线展示。

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

6. 完成HoltWinters模型的演示:

 
  1. 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算法的最大问题是需要非常精细化的对参数进行调整评估,否则还容易出现下图中这种频繁发生的预测值奇异点。

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

基于鼠标圈选的方式,我们可以查看一段时间内的细粒度预测结果对比:

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

您也可以尝试其他算法或模型,来找到最合适自己场景的算法和模型。

Demo脚本使用详解

脚本概述

analyse.sh脚本用于在 TDengine 数据库上执行时间序列预测和异常检测分析,支持滑动窗口算法处理。主要功能包括:

  • 时间序列预测 :使用 HoltWinters 等算法进行未来值预测 。
  • 异常检测 :使用 k-Sigma 等算法识别数据异常点 。
  • 自动窗口滑动 :支持自定义窗口大小和步长进行连续分析。

参数说明

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

TDengine 推荐使用超级表来进行数据建模。因此,Demo中建立了一个名为single_val的超级表,包含ts (timestamp类型) 和val(float类型),以及标签定义scene (varchar (64))。现阶段TDgpt只支持单列值输入输出,因此这个超级表可以作为所有源数据表和结果表的结构定义。子表的表名与tag名称保持一致即可。

db参数指定了源数据表和结果表隶属的数据库。结果表将以【源表名称】_【算法名称】_【result】格式存储。Grafana里面通过查询结果表实现分析结果和原始数据的对比。

一般情况下,对于非必填项,用户在demo过程中只需要设置–start参数以节省运行时间。对于必填项,请参考示例值进行设置。

时间格式说明

step和window参数指定的滑动步长和分析窗口大小需符合如下参数约定:

基于 TDgpt 时序数据智能体的风力发电预测 - TDengine Database 时序数据库

脚本执行流程

  1. graph TDgpt_Demo
  2. A[开始] --> B[参数解析与验证]
  3. B --> C{是否指定start?}
  4. C -->|否| D[查询最小时间戳]
  5. C -->|是| E[转换时间格式]
  6. D --> E
  7. E --> F[计算时间窗口]
  8. F --> G[生成结果表]
  9. G --> H{是否到达数据终点?}
  10. H -->|否| I[生成并执行SQL]
  11. I --> H
  12. H -->|是| J[输出完成信息]

使用更多的数据

参考「运行和关闭Demo」里wind_power.sql脚本的内容,确保按照规定格式将数据准备为csv格式(逗号分隔,值需要用英文双引号括起来),即可将数据导入TDengine。然后,请使用「进行演示」章节中的方法来生成预测结果,并调整Grafana中的看板以实现和实际数据的对比。

结论

在本文中,我们展示了使用TDgpt来进行风力发电量的完整流程。从中可以看到,基于 TDgpt 来构建时序数据分析,能够以SQL方式实现与应用的便捷集成,还可以用Grafana 进行展示,大大降低开发和应用时序数据预测和异常检测的成本。

从预测效果来看,基于transformer架构的预训练模型TDtsfm_1在使用的数据集上展示出优于Holtwinters模型的效果。但相比于”基于TDgpt的电力需求预测”中的效果,整体预测准确性要低一些。这一方面是由于TDtsfm_1训练时使用的是wind_power数据集的4s精度原始数据,而非降采样数据,这会导致数据特征没有被很好的捕获,从而降低了针对降采样数据的预测效果;另一方面,风力发电量与天气预报数据高度相关。受限于数据集中只有发电量数据,无法产生良好的预测结果。

在不同的实际场景下,用户需要针对数据特点,针对模型算法进行选择和参数调优。TDgpt的企业版中,将为用户提供更多的选择:

  1. 模型选择器。模型选择器可以自动根据用户的历史数据集,对购买的所有模型进行准确性评估。用户可选择最适合自己场景的模型或算法进行部署和应用。
  2. TDtsfm_1自研模型的重训练及微调。TDtsfm_1基于海量时序数据进行了预训练,在大部分场景下相比于传统的机器学习和统计预测模型都会有显著的准确率优势。如果用户对于模型预测准确度有更高的要求,可以申请购买TDgpt企业版的预训练服务。使用用户的场景历史数据进行预训练,在特定场景下的预测效果可能更佳。
  3. 第三方解决方案。涛思数据联合国内外时序分析/异常检测专业厂家、研究机构,为用户提供专业的分析解决方案,包括落地过程中的实施服务等。

关于背景

新能源发电预测技术正成为保障电网稳定运行的关键。随着风电、光伏等新能源快速发展,天气变化带来的发电波动给电网调度带来挑战。通过实时预测,电网可提前调配储能设备或启动燃气电站,防止突然停电。国家还规定预测偏差过大的企业需缴纳罚款,推动企业进行预测技术升级。这项技术带来的经济效益同样显著。在西北地区,通过预测调整火电出力,可大幅减少煤炭浪费。电力市场中,发电企业能结合发电量和电价预测制定交易策略,例如在光伏发电高峰时段提前安排储能设备放电,提升收益。

技术进步正推动行业向智能化转型。当前主流技术通过分析气象数据和历史发电规律,构建动态预测模型,并借助云端系统实时优化调度策略。例如,部分企业通过融合气象云层监测和地形数据,显著提升预测精度。此外,风光互补发电系统、储能技术等协同应用,进一步增强了新能源的稳定性。

随着电力市场化改革深化,预测技术已成为新能源参与市场竞争的关键支撑。通过提前预测发电能力和市场供需,企业可优化中长期交易策略,同时提升现货市场中的灵活响应能力。这种技术革新正推动电力系统从依赖传统能源转向更智能、高效的新模式。

本文将提供基于 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开发指南自行接入自研或其他开源的时序模型或算法。


http://www.hkcw.cn/article/GsaqUjAcJy.shtml

相关文章

模拟实现线程池(线程数目为定值)和定时器

前言 昨天学习关于定时器的相关知识。今天花时间去模拟实现了一个定时器&#xff0c;同时也去模拟实现了一个线程池(线程数目为定值)。我感觉我收获了很多&#xff0c;对于线程的理解加深了。跟大家分享一下~ 线程池和定时器(这个是主要)的实现 代码 线程池 import java.ut…

JMeter 性能测试

1.定时器 1.1 同步定时器 作用&#xff1a;阻塞线程使同时达到n个线程之后再发出请求&#xff0c;模拟高并发的场景。 路径&#xff1a;右键请求--添加--定时器--Synchronizing Timer 2.2 常数吞吐量定时器 作用&#xff1a;模拟服务器负载&#xff0c;即需要服务器以一个固定…

通俗易懂的 JS DOM 操作指南:从创建到挂载

目录 &#x1f9e9; 1. 创建元素&#xff1a;document.createElement / createElementNS &#x1f4dd; 2. 创建文本&#xff1a;document.createTextNode ✏️ 3. 修改文本&#xff1a;node.nodeValue &#x1f5d1;️ 4. 移除元素&#xff1a;el.removeChild() &#x1…

串口通信技术及USART应用研究

串口通信技术及USART应用研究 # 串口通信技术及USART应用研究 摘要&#xff1a;本文深入探讨了串口通信技术的基本原理、硬件电路设计以及USART&#xff08;通用同步/异步收发器&#xff09;在STM32微控制器中的应用。首先对通信接口进行了概述&#xff0c;分析了不同通信协议…

OneRef论文精读(补充)

接上篇&#xff1a;OneRef论文精读 The five referring datasets 这些数据集应用于指代表达式理解&#xff08;REC&#xff09;、短语定位&#xff08;PG&#xff09;及指代表达式分割&#xff08;RES&#xff09;任务。表8列出了详细的统计数据。 RefCOCO/RefCOCO/RefCOCOg&…

vscode 代理模式(agent mode),简单尝试一下。

1. 起因&#xff0c; 目的: agent mode&#xff0c; 很流行&#xff0c;名气很大。简单试试效果&#xff0c;确实很强。agent mode&#xff0c; 取代人工&#xff0c;确实是前进了一大步。 2. 先看效果 效果对比&#xff0c;左边是 普通的AI 生成的&#xff0c; 右边是 代理…

Scratch节日 | 六一儿童节抓糖果

六一儿童节怎么能没有糖果&#xff1f;这款 六一儿童节抓糖果 小游戏&#xff0c;让你变身小猫&#xff0c;开启一场甜蜜大作战&#xff01; &#x1f3ae; 游戏玩法 帮助小猫收集所有丢失的糖果&#xff0c;收集越多分数越高&#xff01; 小心虫子一样的“坏糖果”&#xff…

【Linux系统】第八节—进程概念(上)—冯诺依曼体系结构+操作系统+进程及进程状态+僵尸进程—详解!

hi&#xff0c;我是云边有个稻草人 偶尔中二的博主^(*&#xffe3;(oo)&#xffe3;)^&#xff0c;与你分享专业知识&#xff0c;祝博主们端午节快乐&#xff01; Linux—本节博客所属专栏—持续更新中—欢迎订阅&#xff01; 目录 一、冯诺依曼体系结构 二、操作系统(Opera…

告别手动绘图!基于AI的Smart Mermaid自动可视化图表工具搭建与使用指南

以下是对Smart Mermaid的简单介绍&#xff1a; 一款基于 AI 技术的 Web 应用程序&#xff0c;可将文本内容智能转换为 Mermaid 格式的代码&#xff0c;并将其渲染成可视化图表可以智能制作流程图、序列图、甘特图、状态图等等&#xff0c;并且支持在线调整、图片导出可以Docke…

PCB设计教程【强化篇】——USB拓展坞PCB布局

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 一、前期准备与板框…

EC11旋转编码器,Versatile_RotaryEncoder库详解

旋转编码器与电位器 旋转编码器是电位器的现代数字等效物&#xff0c;并且用途更广泛。 旋转编码器可以不停地旋转360&#xff0c;而电位器只能旋转3/4圈。 电位器用于需要知道旋钮准确位置的情况。另一方面&#xff0c;旋转编码器用于需要知道位置变化而不是确切位置的情况…

【金融基础学习】债券回购方式

债券回购作为货币市场的重要工具&#xff0c;本质上是一种以债券为抵押的短期资金借贷行为。在银行间市场&#xff0c;质押式回购与**买断式回购*是两种主要形式。 1. 质押式回购(Pledged Repo, RP) – 所有权不转移的短期融资工具 1.1 质押式回购概述 质押式回购是交易双方…

助力高校AI教学与科研:GpuGeek推出618算力支持活动

618期间&#xff0c;GpuGeek推出面向高校师生的专属算力支持计划&#xff0c;6月5日至25日活动期间&#xff0c;完成学生认证的用户充值即可获得"学霸礼包"&#xff0c;同时平台算力嘉年华活动还将为用户提供额外算力赠送&#xff0c;有效降低了AI学习与研究的资源门…

多线程( Thread)

线程&#xff1a;是一个程序内部的一条执行流程。 多线程&#xff1a;是指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09;。 创建线程&#xff1a; 多线程的创建方式之一&#xff1a;继承Thread类 1.定义一个子类MyThread继承线程类…

Vue-2-前端框架Vue基础入门之二

文章目录 1 计算属性1.1 计算属性简介1.2 计算属性示例 2 侦听器2.1 简单的侦听器2.2 深度监听2.3 监听对象单个属性 3 vue-cli3.1 工程化的Vue项目3.2 Vue项目的运行流程 4 vue组件4.1 Vue组件的三个部分4.1.1 template4.1.2 script4.1.3 style 4.2 组件之间的关系4.2.1 使用组…

LTSPICE仿真电路:(三十二)差动放大器电流源

1.差动放大器电流源 本来是和HOWLAND电流源在一起的&#xff0c;后面想着以后不一定好查找&#xff0c;不如重新另起一篇算了&#xff0c;和前一章的电流源有比较接近的地方&#xff0c;四个电阻直接变成差动放大器内部的东西。 方框中的就是差动放大器&#xff0c;也是负反馈…

Redis 缓存穿透、缓存击穿、缓存雪崩详解与解决方案

在分布式系统中&#xff0c;Redis 凭借高性能和高并发处理能力&#xff0c;成为常用的缓存组件。然而&#xff0c;在实际应用中&#xff0c;缓存穿透、缓存击穿、缓存雪崩这三大问题会严重影响系统的性能与稳定性。本文将详细解析这三个问题的成因&#xff0c;并提供对应的解决…

论文阅读笔记——Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

I3D 论文 UCF-101&#xff08;13000多个视频&#xff09;和 HMDB-51&#xff08;7000多个视频&#xff09;数据集过小&#xff0c;提出了 Kinetics 数据集&#xff0c;并且在其之上预训练之后能够迁移到其他小的数据集。 2DLSTM&#xff1a;使用2D CNN的好处是可以直接从 Ima…

Azure devops 系统之五-部署ASP.NET web app

今天介绍如何通过vscode 来创建一个asp.net web app,并部署到azure 上。 创建 ASP.NET Web 应用 在您的计算机上打开一个终端窗口并进入工作目录。使用 dotnet new webapp 命令创建一个新的 .NET Web 应用,然后将目录切换到新创建的应用。 dotnet new webapp -n MyFirstAzu…

slider滑块async await

isselectionrangeenabled 特色属性 实际场景 视频缓存进度和观看进度 scrollbar 也可以 <StackPanel> <!-- 选择范围头尾相同&#xff0c;但 Slider 仍可操作 --> <Slider IsSelectionRangeEnabled"True" SelectionStart"30" SelectionEn…