每个维修班组都有一块“大家说好每天早上要看”的仪表盘。没人看。
大多数早晨这没什么问题,因为大多数早晨什么都没动。问题出在某个早晨——某个轴承正悄悄把自己烤到临界点,而恰好也是没人看的那天早上。于是作者在国际树懒日,用最懒的方式把它修了:不是做一块更大的仪表盘,而是让一只“树懒”替他读夜班数据,只交回两行字。
Edge Sensor Sloth 的定位很具体:作者做工业物联网网关,工厂地板上一个小 ESP32 盒子,通过 Modbus 读泵或电机,再用 MQTT 把数字发出去。一个班次下来就是几千行温度、电流、振动、功率、流量。没人想读这些,包括他自己。
树懒替他读,然后给回一份人能真正照着行动的摘要。这是真实输出,来自开放权重模型 gpt-oss-120b,跑在一天包含两个故障的遥测数据上:一个是缓慢的轴承磨损漂移,一个是已经自行恢复的热异常。树懒把要紧的那个排在前面,并告诉他那个热异常什么都不是。
这就是全部工作,也正是他从来没做过的工作。当替代方案是人顶着没喝咖啡的脑袋盯五条趋势线时,懒是一种特性,不是缺陷。
两个活动部件
整条链路拆开只有两段:检测器读传感器 CSV,用 EWMA 基线加稳健 z 分数抓尖峰,再用长窗口电平检查抓缓慢漂移;它只把几个数字交给摘要环节,而不是原始数据。摘要环节通过 OpenAI 兼容接口调用开放权重模型(gpt-oss / Gemma / Qwen),输出两行晨间摘要。没有可用端点时,走确定性回退,照样给出一行。
检测器是纯 numpy,不训练、不下载模型,直接跑在网关本机上。作者说,短基线会悄悄把缓慢漂移当成正常跟踪并藏起来,长窗口检查就是为了把它揪出来。
他私下最得意的是三行逻辑:一个已经恢复的尖峰会被降低紧急度,所以正在发生的轴承磨损漂移永远排在三个小时前自己好了的热异常前面。这决定了摘要是在说“今天该做什么”,还是只把所有抖过的东西列一遍。
开放权重模型负责“说话”。检测器递过去几个数字(振动 3.36,+27%,漂移),模型把它翻译成“可能的轴承磨损”——一句早上七点不用统计学学位也能读懂的话。把数字翻译成决定,这一步一直是缺的。
为什么开放是重点
这个项目不是为拿徽章而开放,它作为闭源 API 产品根本跑不通:
- 工厂数据不能出厂。遥测会泄露产能、停机时间、工艺秘密。检测器本地运行,只把几个匿名数字交给模型,从不交原始数据流;模型是开放权重,这些数字也能留在本地。在别人的 API 上,没法向客户承诺“你的数据不离开你的机器”,在这里这是默认值。
- 它要在没有互联网的地方工作。厂房不以广域网可靠著称。开放权重模型加一个 OpenAI 兼容端点,意味着“大脑”可以是同一间屋里的一台笔记本。连接断了轴承不会停止磨损,盯着它的东西也不能停。
- 换大脑,留管道。今天 gpt-oss,明天用你自己的故障历史微调的 Gemma,Qwen 变强了再换 Qwen。开放权重让这件事变成改一行,而不是供应商迁移。
- 一直开着不花钱。对一个全部价值就是“永远安静地盯着”的工具来说,按调用计费正是让它被关掉的原因。
一句话概括懒的回报和开放的回报:装一次,离线,免费,然后它永远替你上那个你怕的班。
三十秒离线复现真实输出
不用云,不用密钥。通过 Ollama 在本机跑开放权重模型:克隆仓库、安装依赖、拉取 gemma2(或 gpt-oss、qwen2.5 等)、设置本地端点和模型名,先生成样例再跑一遍,两行摘要就来自你自己笔记本上的模型。也可以完全跳过模型,用 --no-llm 看确定性回退照样写出一行。换成自己的 CSV 也行:一列时间戳,加任意数值传感器,早上的苦差事就没了。
为了保持懒而做的取舍
检测器不学习。作者考虑过表格基础模型,然后想起了主题。稳健 z 分数加漂移检查是十行 numpy,足够区分“轴承磨损”和“传感器噪声”。懒是特性:站点变了不用重训,只调两个阈值。
推理模型需要思考空间。gpt-oss 是跑在流式端点上的推理模型,他最初的调用返回空——它把整个 token 预算花在推理上,还没写出两行就被截断了。修法很无聊:多留余量,加一个流解析器,优先取答案,实在只有推理通道就用推理通道。无聊正是你希望凌晨三点给你告警的东西具备的品质。
它降级而不是失败。没有端点、没有网络,都没关系:确定性模板仍然给你一行能用的东西。树懒不会让你在早上七点盯着一段报错堆栈。
仓库地址是 github.com/GifariKemal/edge-sensor-sloth。装一次,它替你上那个你怕的班,永远。树懒批准了。
热门跟贴