序章 因为懒
序章 因为懒
起因比你想的简单
这个毕设的立项动机,一句话就能说完:懒。
宿舍床位的风扇和台灯,伸手就能够到的开关,我还是懒得动。尤其是夏天,躺下之后发现风扇没开,起床按一下的代价高得离谱。那时候我想,如果能说一句"把风扇打开"就好了。
说一句就能开,意味着得有个东西听懂这句话,然后替我去按。市面上有现成的小爱和天猫精灵,但它们听的是厂商写死的话。我要的不是声控开关,是"听懂"。
于是有了 iot-agent。全称是毕设题目《宿舍智能环境 Agent 内核的设计与实现》:自然语言指挥真实设备,大模型是唯一决策者,所有执行下沉到内核调度。预研期先跑通最小闭环,毕设周期再完成评测、安全落地和论文。
身份:fork 定制者
内核不是从零写的。上一章讲过 so-lite-agent 的来龙去脉,iot-agent 是它的第一个正经用户:fork 定制者身份,git submodule 钉版本集成,引擎保持业务无关。
内核插件(iot / db / alarm)用 Rust 写在本仓库,管 MQTT 桥、存储和告警判定;用户插件(device / history 等)写 Rune 脚本,管用户交互。上游还立了条政策:为这个项目迁就出通用能力,业务需求先抽象,抽象进上游实现,submodule 再跟上。所以这个毕设一边在榨内核,一边在喂内核。
四场景,一个宿舍床位
- 环境感知问答:问它现在热不热,它读传感器再回答;
- 设备控制:把灯带调暗、把风扇开大;
- 异常告警联动:温度越过阈值,模型自己决定怎么处理;
- 历史数据统计:昨天的温度曲线,让它说给你听。
硬件是 ESP32 + Embassy 固件(no_std),传感器测温湿度、光照、空气质量,执行器是一盏 PWM 灯带和一台 PWM 风扇。全部低压域,不碰 220V。
挑战:真实世界不讲道理
mistake-agent 的世界是对话。改一句话、删一条消息、重新生成一个回答,世界就回到你想要的版本。iot-agent 的世界没这么客气,它给我出了两道题,这个系列的每一幕都在回答它们。
第一道:副作用不可逆。mistake-agent 里工具调用错了,改消息就行;这里设备命令发出去就生效了,没有撤回键。什么能撤销、什么只能补偿,这条边界逼着内核重新设计自己的动作语义。
第二道:时间只有一条。对话可以分叉、可以编辑、可以有平行版本;外部世界不分支。风扇被关掉这件事只发生一次,历史上就写一次。于是 mistake-agent 的会话树在这里翻了车,被我亲手推翻。那是第二幕的故事。
这个系列怎么读
每一幕都是"真实世界"对 mistake-agent 某条机制的考验:第一幕讲把非确定性圈养起来,第二幕讲时间线,第三幕讲模型怎么主动开口,第四幕讲分数到底值多少钱。
先放一句:这些都不是设计出来的,是被风扇和台灯逼出来的。
