从 PHM 到 AI Agent:如何用 OpenClaw 构建一个设备健康诊断智能体
摘要
PHM,Prognostics and Health Management,即故障预测与健康管理,核心目标是通过设备运行数据判断设备当前健康状态,并预测未来可能发生的故障。
传统 PHM 系统通常围绕数据采集、特征提取、模型预测和结果展示展开。但在实际工程场景中,仅有模型预测结果往往不够。运维人员真正需要的是:
- 当前设备是否异常?
- 异常可能来自哪里?
- 哪些指标最值得关注?
- 是否需要停机?
- 后续应该如何排查?
- 能否自动生成诊断报告?
这正是 AI Agent 可以发挥作用的地方。
本文尝试从 PHM 场景出发,介绍如何基于 OpenClaw 构建一个设备健康诊断智能体,让 Agent 不只是"回答问题",而是能够调用工具、分析数据、解释模型结果,并输出可读的诊断建议。
一、为什么 PHM 需要 AI Agent?
在传统 PHM 系统中,常见流程如下:
text
传感器数据 -> 数据预处理 -> 特征提取 -> 模型预测 -> 健康状态评估 -> 可视化展示
这个流程本身没有问题,但它更像一个固定的数据处理管道。实际使用时,经常会遇到几个问题。
1. 模型结果不好理解
例如模型输出:
text
bearing_fault_probability = 0.82
rul = 36h
health_score = 61
对于算法工程师来说,这些指标很清楚。但对于现场运维人员来说,他们更关心的是:
text
这个设备还能不能继续运行?
是不是轴承问题?
需要马上检修吗?
风险等级是多少?
模型给的是数值,业务需要的是解释。
2. 诊断过程依赖专家经验
设备故障诊断通常不是单看一个指标,而是结合多个信号判断,例如:
- 振动 RMS 是否升高
- 峰值因子是否异常
- 温度是否持续上升
- 电流是否波动
- 历史是否出现过类似故障
- 当前工况是否发生变化
这些判断过程往往依赖专家经验。如果没有经验沉淀,新人很难快速定位问题。
3. 数据、模型和知识库是分散的
PHM 系统中通常会有多类信息源:
text
实时传感器数据
历史故障记录
模型预测结果
维修手册
设备台账
专家规则
运维日志
传统系统通常把这些内容分散在不同模块里。AI Agent 的价值在于,它可以作为一个统一入口,把这些工具和数据源组织起来。
二、设备健康诊断智能体的目标
我们希望构建的不是一个普通问答机器人,而是一个能完成诊断任务的 Agent。
它应该具备以下能力:
text
1. 接收设备诊断请求
2. 读取设备运行数据
3. 调用异常检测模型
4. 调用 RUL 预测模型
5. 查询历史故障案例
6. 综合判断设备健康状态
7. 输出诊断结论和维修建议
8. 生成结构化诊断报告
用户可以这样提问:
text
帮我分析一下 3 号电机最近 24 小时的健康状态,判断是否存在轴承故障风险,并给出处理建议。
理想情况下,Agent 不应该直接凭语言模型猜测,而是执行如下过程:
text
查询 3 号电机最近 24 小时数据
提取振动、温度、电流等特征
调用异常检测工具
调用故障分类模型
查询历史相似案例
综合生成诊断结论
输出维修建议
三、整体架构设计
基于 OpenClaw,可以将设备健康诊断智能体设计为以下结构:
text
用户请求
|
v
OpenClaw Agent
|
|-- 数据查询工具
|-- 特征提取工具
|-- 异常检测工具
|-- 故障分类工具
|-- RUL 预测工具
|-- 知识库检索工具
|-- 报告生成工具
|
v
诊断结论 + 维修建议 + 报告
更具体一点:
text
Agent Core
负责理解用户意图、拆解诊断步骤、决定调用哪些工具。
Tools
负责执行具体任务,例如读取数据、运行模型、查询知识库。
PHM Models
包括异常检测模型、故障分类模型、剩余寿命预测模型。
Knowledge Base
存放设备说明书、维修手册、历史故障案例和专家规则。
Report Generator
将诊断过程和结果整理为结构化报告。
四、Agent 工作流设计
设备健康诊断 Agent 可以按以下流程运行。
1. 解析用户任务
用户输入:
text
分析 3 号电机最近 24 小时是否存在异常。
Agent 首先需要解析出关键信息:
json
{
"device_id": "motor_003",
"time_range": "last_24h",
"task": "health_diagnosis"
}
如果用户没有提供完整信息,Agent 可以追问:
text
请提供需要分析的设备编号,或者选择默认分析最近一次告警设备。
2. 查询设备数据
Agent 调用数据查询工具:
text
get_sensor_data(device_id="motor_003", time_range="last_24h")
返回数据可能包括:
json
{
"device_id": "motor_003",
"temperature": [62.1, 63.0, 64.8],
"vibration_rms": [1.8, 2.3, 3.7],
"current": [12.1, 12.4, 13.2],
"speed": [1480, 1481, 1479]
}
3. 特征提取
对于 PHM 来说,原始数据通常不能直接用于诊断,需要先提取特征。
常见振动特征包括:
text
均值
方差
RMS
峰值
峭度
偏度
峰值因子
频域主频
包络谱特征
Agent 调用特征提取工具:
text
extract_features(sensor_data)
返回:
json
{
"vibration_rms": 3.7,
"kurtosis": 5.8,
"peak_factor": 4.2,
"temperature_avg": 64.1,
"current_avg": 12.7
}
4. 异常检测
Agent 调用异常检测模型:
text
detect_anomaly(features)
返回:
json
{
"is_anomaly": true,
"anomaly_score": 0.86,
"main_abnormal_features": [
"vibration_rms",
"kurtosis",
"peak_factor"
]
}
这一步说明设备存在异常,而且异常主要集中在振动相关指标上。
5. 故障分类
接着调用故障分类模型:
text
classify_fault(features)
返回:
json
{
"fault_type": "bearing_outer_race_fault",
"confidence": 0.78
}
说明模型认为当前异常更接近轴承外圈故障。
6. 查询历史案例
Agent 再调用知识库或历史案例检索工具:
text
search_fault_cases(
device_type="motor",
fault_type="bearing_outer_race_fault"
)
返回:
json
{
"similar_cases": [
{
"case_id": "case_2024_017",
"symptom": "vibration_rms increased, kurtosis abnormal",
"root_cause": "bearing outer race wear",
"solution": "replace bearing and check lubrication"
}
]
}
这一步让 Agent 的判断不只来自模型,还结合了历史经验。
7. 生成诊断结论
最后 Agent 综合所有结果,生成自然语言结论:
text
3 号电机最近 24 小时存在明显异常,异常主要体现在振动 RMS、峭度和峰值因子升高。故障分类模型判断为轴承外圈故障的概率较高,置信度为 0.78。
结合历史相似案例,该类异常通常与轴承外圈磨损或润滑不良有关。建议安排近期检修,重点检查轴承状态、润滑情况和安装同轴度。
五、工具设计示例
下面给出几个工具接口示例。
1. 数据查询工具
python
def get_sensor_data(device_id: str, start_time: str, end_time: str):
"""
查询设备传感器数据。
"""
return {
"device_id": device_id,
"temperature": [62.1, 63.0, 64.8],
"vibration_rms": [1.8, 2.3, 3.7],
"current": [12.1, 12.4, 13.2],
"speed": [1480, 1481, 1479]
}
2. 特征提取工具
python
import numpy as np
from scipy.stats import kurtosis, skew
def extract_features(signal):
"""
提取振动信号时域特征。
"""
data = np.array(signal)
rms = np.sqrt(np.mean(data ** 2))
peak = np.max(np.abs(data))
mean = np.mean(data)
std = np.std(data)
return {
"mean": float(mean),
"std": float(std),
"rms": float(rms),
"peak": float(peak),
"kurtosis": float(kurtosis(data)),
"skewness": float(skew(data)),
"peak_factor": float(peak / rms) if rms != 0 else 0
}
3. 异常检测工具
python
def detect_anomaly(features):
"""
简化版异常检测规则。
实际项目中可以替换为 Isolation Forest、AutoEncoder、LSTM 等模型。
"""
anomaly_score = 0
if features["rms"] > 3.0:
anomaly_score += 0.4
if features["kurtosis"] > 4.0:
anomaly_score += 0.3
if features["peak_factor"] > 3.5:
anomaly_score += 0.3
return {
"is_anomaly": anomaly_score >= 0.6,
"anomaly_score": anomaly_score
}
4. 故障分类工具
python
def classify_fault(features):
"""
简化版故障分类。
实际项目中可以替换为 SVM、Random Forest、CNN、Transformer 等模型。
"""
if features["rms"] > 3.0 and features["kurtosis"] > 4.0:
return {
"fault_type": "bearing_fault",
"confidence": 0.78
}
return {
"fault_type": "normal",
"confidence": 0.65
}
5. 报告生成工具
python
def generate_report(device_id, anomaly_result, fault_result, suggestions):
"""
生成结构化诊断报告。
"""
return {
"device_id": device_id,
"health_status": "abnormal" if anomaly_result["is_anomaly"] else "normal",
"anomaly_score": anomaly_result["anomaly_score"],
"fault_type": fault_result["fault_type"],
"confidence": fault_result["confidence"],
"suggestions": suggestions
}
六、OpenClaw 中的 Agent 提示词设计
对于 PHM 诊断 Agent,提示词不能只写"你是一个助手",而要明确它的工作边界。
示例:
markdown
# 设备健康诊断智能体
你是一个面向工业设备的 PHM 诊断智能体,负责根据设备传感器数据、模型预测结果和历史故障案例,分析设备健康状态并给出维修建议。
## 工作原则
1. 不要在没有数据的情况下直接判断设备故障。
2. 当用户提出诊断请求时,优先调用数据查询工具。
3. 当存在传感器数据时,应先进行特征提取。
4. 当特征提取完成后,应调用异常检测工具。
5. 如果存在异常,应进一步调用故障分类工具。
6. 如果故障类型明确,应查询历史案例或维修知识库。
7. 最终输出应包括:
- 设备编号
- 分析时间范围
- 健康状态
- 异常指标
- 可能故障类型
- 置信度
- 维修建议
- 风险等级
## 输出要求
回答要面向运维人员,避免只输出模型指标。必须解释这些指标代表什么风险。
七、一次完整诊断示例
用户输入:
text
请分析 motor_003 最近 24 小时的健康状态。
Agent 执行过程:
text
1. 调用 get_sensor_data 查询 motor_003 数据
2. 调用 extract_features 提取振动特征
3. 调用 detect_anomaly 判断是否异常
4. 调用 classify_fault 判断故障类型
5. 调用 search_fault_cases 查询历史案例
6. 调用 generate_report 生成报告
Agent 输出:
text
设备健康诊断报告
设备编号:motor_003
分析时间范围:最近 24 小时
健康状态:异常
风险等级:中高风险
关键发现:
1. 振动 RMS 明显升高,说明设备振动能量增加。
2. 峭度指标异常,说明信号中可能存在冲击成分。
3. 峰值因子升高,说明设备可能出现局部冲击故障。
模型判断:
异常检测结果显示 anomaly_score = 0.86,超过异常阈值。
故障分类模型判断当前状态更接近轴承故障,置信度为 0.78。
可能原因:
结合历史案例,该类特征通常与轴承外圈磨损、润滑不足或安装偏心有关。
建议措施:
1. 安排近期点检,重点检查轴承外圈和润滑状态。
2. 检查电机安装同轴度,排除机械偏心问题。
3. 若振动 RMS 持续升高,建议降低负载或安排停机检修。
4. 持续跟踪未来 12 小时振动趋势,若异常分数继续上升,应提升为高风险告警。
八、PHM Agent 相比传统 PHM 系统的优势
1. 从"模型输出"变成"诊断解释"
传统模型输出的是分类结果和概率,Agent 可以进一步解释:
text
为什么异常?
异常来自哪个指标?
可能对应什么故障?
应该如何处理?
2. 从"单点预测"变成"多工具协同"
PHM Agent 可以同时调用:
text
数据接口
特征提取程序
机器学习模型
知识库
历史案例库
报告生成模块
这比单独运行一个模型更接近真实业务流程。
3. 从"被动展示"变成"主动分析"
传统系统通常需要用户点击页面查看图表。Agent 则可以通过自然语言完成交互:
text
帮我找出今天风险最高的 5 台设备
分析 A 产线最近一周故障趋势
比较 motor_003 和 motor_007 的健康状态
生成本周设备健康报告
这种交互方式更适合工程人员快速定位问题。
九、需要注意的问题
虽然 PHM Agent 很有价值,但实际落地时也要注意几个问题。
1. 不能完全依赖大模型判断故障
设备诊断属于高风险场景,Agent 不应该凭语言模型直接判断故障。正确方式是:
text
模型负责理解和组织
工具负责计算和预测
知识库负责提供依据
专家规则负责约束结论
2. 工具调用必须可追溯
每一次诊断都应该记录:
text
调用了哪些数据
使用了哪些模型
模型版本是什么
输入特征是什么
输出结果是什么
最终建议是什么
这对于工业场景非常重要。
3. 维修建议要分风险等级
不能所有异常都建议"立即停机"。更合理的是分级:
text
低风险:继续观察
中风险:安排点检
中高风险:降低负载并准备检修
高风险:建议停机检查
4. 知识库质量决定 Agent 上限
PHM Agent 的效果不仅取决于大模型,也取决于知识库质量。建议沉淀:
text
设备说明书
维修手册
历史故障记录
专家诊断规则
常见故障模式
FMEA 分析表
十、总结
PHM 的核心是设备健康评估和故障预测,而 AI Agent 的核心是任务理解、工具调用和多步骤执行。将两者结合,可以让传统 PHM 系统从"数据展示平台"升级为"智能诊断助手"。
基于 OpenClaw 构建设备健康诊断智能体,可以形成如下能力闭环:
text
用户提出诊断请求
Agent 理解任务
调用数据和模型工具
结合历史案例和专家规则
生成诊断结论
输出维修建议和报告
这种方式的价值不在于让大模型替代 PHM 算法,而是让大模型成为 PHM 系统的智能调度层和解释层。
未来,PHM Agent 可以进一步扩展到:
text
自动巡检
故障预警
维修工单生成
备件推荐
设备群健康评估
数字孪生系统联动
当 PHM 模型、工业知识库和 AI Agent 工作流结合起来,设备健康管理系统就不再只是一个监控面板,而是一个能够辅助工程师做决策的智能系统。