131、Agent在物联网(IoT)中的应用
去年冬天我在一个农业物联网项目现场蹲了三天,为的是查一个诡异的现象——大棚里的温湿度传感器每隔半小时就会上报一次离谱的数值,比如气温75℃、湿度-3%,而且只发生在凌晨。我们远程看数据曲线,像心电图一样乱跳。客户那边的大爷每天凌晨五点多起来看大棚,以为设备坏了。我们用串口接了调试线,盯着日志文件,发现Agent进程没有重启,但MQTT连接却断过几次,每次一断,数据就开始乱。
后来定位到根因,羞得想找个地缝钻进去。Agent跑在一颗ESP32上,资源紧张,内存复用得很狠。全局缓冲区原本用来存放从传感器读回来的原始帧,同时又被MQTT重连后的遗嘱消息复用。凌晨网络抖动触发重连,重连逻辑里发遗嘱消息,顺便把那个缓冲区写成了“agent offline”,而传感器线程还在往同一个缓冲区里写新数据,更糟糕的是Agent的推理任务会在固定时间点读取这个缓冲区做阈值判断。于是三个线程同时碰一块内存,数据不错乱才怪。修法不复杂:给每个数据源分配独立缓冲区,再给Agent的重连状态加一个状态机,重连期间暂停推理任务。从那之后,这个“幽灵数据”彻底消失了。
这件事让我重新理解了Agent在物联网里的角色。我们总喜欢把Agent想象成人工智能在云端的化身,但真实的IoT设备上,Agent更像是一个长在现场的小脑——它得在电力有限、网络不稳、内存紧巴巴的环境里,自己判断什么时候该上报,什么时候该本地处理,什么时候该跟邻居设备打个招呼。它不是来炫技的,是来干活的。
先说资源约束。很多物联网终端用的是MCU,主频低到几十兆赫兹,内存只有几百KB。你不可能在上面跑一个PyTorch或者LangChain。真正的Agent在嵌入式侧通常