分类 :18.TDgpt | 篇章:02 TDgpt 使用

本文讲解 TDgpt 的部署、SQL 函数(FORECAST、ANOMALY_WINDOW)的用法、算法配置和实战案例。
速查表
| 函数 | 作用 |
|---|---|
| FORECAST | 时序预测 |
| ANOMALY_WINDOW | 异常窗口 |
| INTERP | 插值填充 |
| SHOW ANODES | 列出算法节点 |
| CREATE ANODE | 注册节点 |
详细解析
1. 部署 Anode
bash
# Anode 是 TDgpt 的算法服务进程
# 通常作为单独包安装
# 1. 安装(Linux)
wget https://www.taosdata.com/assets-download/3.0/TDengine-tdgpt-3.x.x-Linux-x64.tar.gz
tar xzf TDengine-tdgpt-3.x.x-Linux-x64.tar.gz
cd TDengine-tdgpt-3.x.x/
sudo ./install.sh
# 2. 配置(/etc/taos/taosanode.cfg)
# 端口、算法路径、日志等
# 3. 启动
systemctl start taosanoded
systemctl enable taosanoded
# 4. 注册到 TDengine
taos -s "CREATE ANODE '<anode_host>:6090'"
# 5. 验证
taos -s "SHOW ANODES"
taos -s "SHOW ANODES FULL"
sql
-- 查看注册的算法节点
SHOW ANODES;
SHOW ANODES FULL;
-- 查看节点提供的算法
SELECT * FROM information_schema.ins_anodes;
-- 删除节点
DROP ANODE 1;
-- 更新(重新加载算法)
UPDATE ANODE 1;
2. FORECAST 函数
sql
-- 基本语法
SELECT _wstart, FORECAST(column, count, options)
FROM table
WHERE ts > start AND ts <= end
INTERVAL(window);
-- 示例 1: 默认算法预测未来 12 个点
SELECT _wstart,
FORECAST(temp, 12) AS pred
FROM sensors
WHERE device = 'd1' AND ts > NOW - 7d
INTERVAL(1h);
-- 示例 2: 指定算法
SELECT _wstart,
FORECAST(temp, 24, "algo=holtwinters") AS pred
FROM sensors
WHERE ts > NOW - 30d
INTERVAL(1d);
-- 示例 3: 带参数
SELECT _wstart,
FORECAST(load_kw, 24, "algo=arima,p=2,d=1,q=2") AS pred
FROM substations
WHERE id = 'S001' AND ts > NOW - 7d
INTERVAL(1h);
-- 支持算法(可能因版本变化):
-- algo=holtwinters 季节性
-- algo=arima 自回归
-- algo=prophet 通用
-- algo=lstm 深度学习(需 GPU/CPU)
-- algo=auto 自动选择
3. ANOMALY_WINDOW 函数
sql
-- 基本语法(窗口子句)
SELECT _wstart, _wend, aggregations
FROM table
WHERE ts > start
ANOMALY_WINDOW(column, options);
-- 示例 1: 默认 IQR 异常检测
SELECT _wstart, _wend,
AVG(temp) AS avg_temp,
MAX(temp) AS max_temp
FROM sensors
WHERE device = 'd1' AND ts > NOW - 1d
ANOMALY_WINDOW(temp);
-- 示例 2: 指定算法和阈值
SELECT _wstart, _wend, COUNT(*) AS anomaly_points
FROM sensors
WHERE ts > NOW - 7d
ANOMALY_WINDOW(temp, "algo=zscore,threshold=3");
-- 示例 3: 多设备
SELECT _wstart, _wend, device, AVG(temp)
FROM sensors
WHERE ts > NOW - 1d
PARTITION BY device
ANOMALY_WINDOW(temp, "algo=iqr");
-- 支持算法:
-- algo=iqr 四分位距
-- algo=zscore 标准差倍数
-- algo=lof 局部离群因子
-- algo=isolation 孤立森林
4. INTERP 智能填充
sql
-- 在范围内每秒生成插值
SELECT _wstart,
INTERP(temp) AS smooth_temp
FROM sensors
WHERE device = 'd1'
AND ts >= '2026-06-04 00:00:00'
AND ts < '2026-06-04 01:00:00'
RANGE('2026-06-04 00:00:00', '2026-06-04 01:00:00', 1s)
FILL(LINEAR);
-- 插值方法(FILL):
-- NONE 不填
-- VALUE x 固定值
-- PREV 前值
-- NEXT 后值
-- LINEAR 线性
-- NULL 空值
-- 与 FORECAST 结合
WITH historical AS (
SELECT _wstart AS t, AVG(temp) AS temp
FROM sensors WHERE ts > NOW - 7d
INTERVAL(1h)
),
predicted AS (
SELECT _wstart AS t, FORECAST(temp, 24) AS temp
FROM historical
)
SELECT * FROM historical
UNION ALL
SELECT * FROM predicted;
5. 流计算中使用
sql
-- 实时异常告警流
CREATE STREAM anomaly_stream
INTO anomaly_log AS
SELECT _wstart, _wend, device, COUNT(*) AS pts
FROM sensors
PARTITION BY device
ANOMALY_WINDOW(temp, "algo=iqr");
-- 实时滚动预测
CREATE STREAM forecast_stream
TRIGGER WINDOW_CLOSE
INTO forecast_log AS
SELECT _wstart, device,
FORECAST(temp, 6, "algo=holtwinters") AS pred
FROM sensors
WHERE ts > NOW - 24h
PARTITION BY device
INTERVAL(1h);
-- 注意:流计算中 AI 函数有性能开销
-- 控制 partition 数量
-- 控制窗口大小
6. 实战案例
sql
-- 案例 1: 电力负荷预测
-- 历史 30 天,预测未来 24 小时
SELECT
_wstart,
substation_id,
AVG(load_kw) AS hist_load,
FORECAST(load_kw, 24, "algo=holtwinters,period=24") AS pred_24h
FROM grid
WHERE ts > NOW - 30d
PARTITION BY substation_id
INTERVAL(1h);
-- 案例 2: 设备异常检测告警
CREATE STREAM motor_anomaly
INTO alerts AS
SELECT
_wstart, _wend, motor_id,
AVG(vibration) AS vib_avg,
MAX(vibration) AS vib_max,
'anomaly_detected' AS alert_type
FROM motors
WHERE ts > NOW - 1m
PARTITION BY motor_id
ANOMALY_WINDOW(vibration, "algo=zscore,threshold=3");
-- 案例 3: 风电场出力预测
SELECT
_wstart, turbine_id,
AVG(wind_speed) AS avg_ws,
FORECAST(power_kw, 4, "algo=prophet") AS pred_power
FROM wind_farm
WHERE ts > NOW - 7d
PARTITION BY turbine_id
INTERVAL(15m);
-- 案例 4: 服务器性能异常
SELECT _wstart, _wend, host, AVG(cpu) AS avg_cpu
FROM servers
WHERE ts > NOW - 1h
PARTITION BY host
ANOMALY_WINDOW(cpu, "algo=iqr");
7. 算法调优
算法选择:
① 数据有强季节性 → Holt-Winters / Prophet
例:日/周/月模式
② 数据平稳 + 自相关 → ARIMA
例:传感器小幅波动
③ 复杂非线性 → LSTM
例:长期依赖
④ 不确定 → auto
参数调优:
Holt-Winters:
period: 季节周期(关键)
- 小时数据日周期:24
- 小时数据周周期:168
- 天数据周周期:7
ARIMA:
p, d, q: 模型阶数
- 默认 auto 可
- 大量历史数据时手动可优化
Prophet:
- 自动检测季节性
- 支持节假日
LSTM:
- 训练时间长
- 推理较慢
- 适合复杂时序
异常检测调参:
IQR:
factor: 四分位间距倍数(默认 1.5)
- 严格:1.0
- 宽松:2.0
Z-Score:
threshold: 标准差倍数(默认 3)
- 严格:2
- 宽松:4
8. 性能与最佳实践
性能优化:
① 控制输入数据量
- 充足历史(够拟合)但不过多
- 通常几百到几千点
② 选轻量算法
- 实时场景:IQR / Z-Score / Holt-Winters
- 离线分析:可用 LSTM
③ 缓存预训练模型(视实现)
- 减少重复训练
④ 流计算并发控制
- PARTITION BY 数量适中
- 避免每秒大量调用
最佳实践:
✓ 先用简单算法(IQR/Holt-Winters)
✓ 评估精度后再升级到 ML
✓ 大规模并发用 Anode 集群
✓ 关键业务做 A/B 验证
✓ 监控算法执行时长
注意事项:
✗ 不要把 AI 当万能
- 数据质量影响结果
- 业务规则更可靠的优先用规则
✗ 不要每个 SQL 都用 FORECAST
- 预测开销不小
- 用流计算定期算一次
✗ 不要忽略数据预处理
- 缺失值
- 异常值(用 INTERP 处理后再预测)
代码示例
综合应用
python
import taosws
import json
conn = taosws.connect("...")
# 1. 预测 + 告警
def predict_and_alert(substation_id):
result = conn.query(f"""
SELECT FORECAST(load_kw, 24, "algo=holtwinters,period=24") AS pred
FROM substations
WHERE id = '{substation_id}' AND ts > NOW - 7d
INTERVAL(1h)
""")
for ts, pred in result:
if pred > 1000:
send_alert({
"substation": substation_id,
"timestamp": ts,
"predicted_load": pred,
"threshold": 1000
})
# 2. 异常分析报告
def daily_anomaly_report():
result = conn.query("""
SELECT _wstart, _wend, device, COUNT(*) AS pts
FROM sensors
WHERE ts > NOW - 1d
PARTITION BY device
ANOMALY_WINDOW(temp, "algo=iqr")
""")
return [
{"start": s, "end": e, "device": d, "anomaly_count": c}
for s, e, d, c in result
]
# 3. 数据补全
def fill_gaps(device_id, start, end):
conn.execute(f"""
INSERT INTO sensors_filled
SELECT _wstart, '{device_id}', INTERP(temp)
FROM sensors
WHERE device = '{device_id}' AND ts >= '{start}' AND ts < '{end}'
RANGE('{start}', '{end}', 1m)
FILL(LINEAR)
""")
性能考量
调用开销
| 操作 | 延迟 |
|---|---|
| FORECAST 简单 | 100ms~1s |
| FORECAST LSTM | 1s~10s |
| ANOMALY_WINDOW IQR | < 100ms |
| ANOMALY_WINDOW ML | 500ms+ |
资源规划
| 并发预测/秒 | Anode 数 |
|---|---|
| < 10 | 1 |
| 10~100 | 2~3 |
| 100~1000 | 多个 + GPU |
FAQ
Q1: 不部署 Anode 能用吗?
部分简单功能(INTERP)原生支持,FORECAST/ANOMALY_WINDOW 需 Anode。
Q2: 算法不准怎么办?
- 检查数据质量
- 尝试其他算法
- 调整算法参数
- 增加历史数据
- 考虑业务规则补充
Q3: 能定时执行预测吗?
- 用流计算(CREATE STREAM)
- 或外部调度(cron)调 SQL
Q4: GPU 必需吗?
不必需。统计算法 CPU 即可。LSTM 等深度模型用 GPU 更快。
Q5: 自定义算法?
支持。开发算法插件,部署到 Anode。详见官方算法插件文档。
参考
系统构架篇
- 01-《TDengine 整体架构全景》
- 02-《集群拓扑深度解析》
- 03-《MNode 内部机制深度解析》
- 04-《RPC 通信层深度解析》
- 05-《VNode 生命周期》
- 06-《RAFT 共识协议》
- 07-《端到端的消息流》
数据模型
- 01-《数据库创建与参数详解》
- 02-《超级表/子表/普通表》
- 03-《支持数据类型深度解析》
- 04-《TDengine Tag 设计哲学与 Schema 变更机制》
- 05-《TDengine 虚拟表实现原理》
存储引擎
- 01-《TDengine 存储引擎概览》
- 02-《TDengine MemTable 深度解析》
- 03-《TDengine WAL 预写日志机制》
- 04-《TDengine 数据文件格式》
- 05-《TDengine Commit 与 Flush 机制 》
- 06-《TDengine Compaction 合并策略 》
- 07-《TDengine 数据保留与 TTL》
- 08-《TDengine 压缩编码机制》
- 09-《TDengine Cache 与 Last 查询加速》
- 10-《TDengine 逻辑计划生成》
查询引擎
- 01-《TDengine 查询引擎概览》
- 02-《TDengine SQL 解析与词法分析》
- 03-《TDengine 语义分析与 AST 重写》
- 04-《TDengine 逻辑计划生成》
- 05-《TDengine 物理计划生成》
- 06-《TDengine 扫描算子》
- 07-《TDengine 聚合算子》
- 08-《TDengine 连接算子》
- 09-《TDengine 排序、填充与投影》
- 10-《TDengine 分布式查询执行》
- 11-《TDengine EXPLAIN 与查询优化》
数据写入
- 01-《TDengine SQL INSERT》
- 02-《TDengine 无模式写入》
- 03-《TDengine STMT 写入》
- 04-《TDengine 写入内部流程》
- 05-《TDengine 数据更新删除》
数据订阅
- 01-《TDengine 数据订阅》
- 02-《TDengine 订阅 vs Kafka》
- 03-《TDengine TMQ 消费流程》
- 04-《TDengine 内部机制》
- 05-《TDengine TMQ 最佳实践》
预聚合
索引
SQL 语句
- 01-《TDengine DDL》
- 02-《TDengine DML SELECT》
- 03-《TDengine DML 函数完整参考》
- 04-《TDengine JOIN 完整语法》
- 05-《TDengine 窗口完整语法》
- 06-《TDengine 操作符与表达式》
- 07-《TDengine 系统表》
- 08-《TDengine SQL 与标准 SQL 差异》
客户端与连接器
- 01-《TDengine 的连接方式》
- 02-《TDengine C/C++ 连接器》
- 03-《TDengine java 连接器》
- 04-《TDengine Python 连接器》
- 05-《TDengine Go 与 Rust 连接器》
- 06-《TDengine Node.js 与 C# 连接器》
运维
- 01-《TDengine 部署指南》
- 02-《TDengine 配置详解》
- 03-《TDengine 监控系统》
- 04-《TDengine 备份与恢复》
- 05-《TDengine 版本升级》
- 06-《TDengine 加密使用指南》
安全
生态
- 01-《TDengine taosAdapter》
- 02-《TDengine taosX 与 Explorer》
- 03-《TDengine Grafana 集成》
- 04-《TDengine 第三方工具》
应用案例
- 01-《TDengine IoT 设备监控》
- 02-《TDengine 工业大数据与智能制造》
- 03-《TDengine 车联网与新能源汽车》
- 04-《TDengine 能源与电力监控》
- 05-《TDengine IT 运维与可观测性》
产品对比
内部机制
- 01-《TDengine 内存管理》
- 02-《TDengine 线程模型》
- 03-《TDengine 错误处理》
- 04-《TDengine Catalog 与元数据缓存》
- 05-《TDengine 序列化协议》
- 06-《TDengine UDF 引擎》
TDgpt
- 01-《TDgpt 概述》
- 02-《TDgpt 使用》
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。