1. 浴缸水温为什么是个AI Agent问题,而不是一个PID问题
先说我自己的经历。几年前我一直在做智能家居方向的项目,有段时间被家里那个恒温热水器折磨得够呛。按照说明书把浴缸放水温度设定成42℃,人一进去第一感觉是烫,泡了十分钟又觉得水凉了,伸手去摸龙头想加点热水,结果冷水管里残留的那一段水直冲脚背,整个人一激灵。后来我意识到,这根本不是"控温精度不够"的问题,而是整个控制逻辑的出发点就错了。
传统恒温系统做的是物理恒温:传感器读数到了设定值,加热器或阀门就往回调,目标是一条水平直线。可浴缸的真实使用场景不是这样的。人泡进去之前,皮肤温度和周围环境差不多,30℃出头,这时候42℃的水给皮肤带来的刺激感比较强;泡了十分钟之后,皮肤表面温度已经接近水温,体感会明显下降。也就是说,人感受到的不是绝对水温,而是水温与当前皮肤温度的差距。这个差距在动态变化,那么理想的目标温度就不该是一条直线,而是一条"先高一点、入水时再高一点、稳定后回落"的曲线。
传统PID解决不了这种问题,因为PID的目标值是固定的,它也没有"人在不在水里"这个概念。规则逻辑也可以写一些,比如检测到人入水就升温,但规则只能处理预设好的情况,处理不了个体差异、天气变化、管路残留冷水这些干扰。AI Agent在这里的价值,是它把"维持水体在某个温度"升级成了"理解人的状态并预测人的需求",再通过传感器反馈和自主学习去逼近那条真正让人舒服的温度曲线。
所以说,智能浴缸的水温调节,本质上不是控制问题,而是一个体验建模问题。这篇文章要分享的,就是我们团队从零搭起来的这套端侧AI Agent水温调节系统——包括整体架构、温度感知的难点、决策模型的设计,以及落地实装过程中踩过的那些坑。如果你正好在做智能家居、热水器或者浴缸类产品,哪怕只是对AI Agent怎么落到实体设备上感兴趣,这套思路都可以直接拿来参考。
2. 系统整体架构:这套Agent到底分层管了哪些事
2.1 从硬件视角看,水温调节牵扯的设备比想象中多
很多人一提浴缸水温,第一反应就是"一个加热器加一个温控器"。实际上要做舒适度调节,牵扯的设备远不止这两样。一个完整的水温调节系统涉及热源、阀门、循环、传感器、人感这么几类硬件,我把我们样机里的设备清单列在这里。
| 模块 | 设备 | 作用 | 关键参数 |
|---|---|---|---|
| 热源 | 变频加热器 / 热水器 | 提供热水并调节功率 | 出水温度可达50℃以上,功率可调 |
| 混水 | 三通电动阀 | 冷热水混合,控制出水温度 | 阀位响应速度,尽量选1秒以内 |
| 循环 | 循环泵 | 缸内水体循环,让温度均匀 | 流量可调,避免直冲人体 |
| 感知 | 缸内温度传感器×2 | 测定水体实际温度 | NTC热敏电阻或PT100 |
| 感知 | 出水温度传感器 | 测定进入浴缸的热水温度 | 响应要快,流动水中时间常数小于5秒 |
| 感知 | 水位传感器 | 判断进水量和补水事件 | 压力式或超声波式 |
| 感知 | 人体存在传感器 | 识别是否有人靠近、入水、离水 | 毫米波雷达,能区分静止和运动 |
| 感知 | 环境温度传感器 | 补偿散热和体感差异 | 放在浴室外墙或浴室天花区域 |
| 执行 | 控制器 | 运行Agent决策逻辑 | 带轻量级推理能力的MCU或边缘网关 |
这里有一个设计取舍:我们把人体存在检测独立出来了,用了毫米波雷达。为什么不直接用红外传感器?因为人在泡澡时大部分时间是不动的,红外热释电对静止人体基本不触发,而毫米波雷达可以通过微动检测判定"有人且在水里"。这一点后面讲决策时会再展开。
2.2 软件层面:Agent的五个层次
从软件架构上看,这套Agent可以分成五层,每一层只干一件事,层与层之间通过明确的数据接口通信。
第一层是感知融合层。裸读传感器的数据是没法直接用的,温度读数的跳变、热敏电阻的响应滞后、雷达的误报,都要在这一层做处理。我们在这个层跑了一个轻量级的卡尔曼滤波,把缸内温度、温度变化率估计出来,同时把所有传感器的时间戳对齐。
第二层是状态管理层。它维护当前系统状态:放水中、预热中、有人入浴、稳定泡澡、中途离水、补水、排水等。状态管理不是简单的if-else,而是一个有限状态机,任何状态迁移都必须满足安全条件。比如"有人入浴"状态下不允许执行大流量补水,防止冷水直冲人体。
第三层是决策层,这是Agent的核心。它根据状态管理层的状态、感知层的温变数据和用户画像,生成目标温度曲线,并计算执行机构的控制量。我们第一版用的是"前馈补偿+PID",第二版引入了一个轻量级的学习模块,用来更新用户的温度偏好参数。
第四层是执行层。它把决策层的控制量换算成具体的阀位角度、加热器功率、循环泵转速,并处理执行机构自身的物理限制,比如阀位限位、功率爬坡速率,避免猛开猛关发生水锤或加热器频繁启停。
第五层是安全层,独立于前面四层存在。它不做舒适度调节,只盯红线:出水温度上限、变化率上限、缺水保护、传感器故障识别。安全层有独立的硬件熔断通道,即使上层Agent的代码跑飞了,也能在硬件层面把执行机构拉到安全位置。
这套分层的设计原则是:决策可以智能,但安全不能依赖智能。控制逻辑写得再复杂,安全底线必须由独立的、可验证的简单逻辑来兜底。
2.3 为什么选择端侧推理,而不是云端Agent
现在很多所谓智能设备其实就是"本地采集+云端分析"。但水温调节不行,它对实时性和可靠性要求太高。从温度传感器读出偏差到执行机构响应,如果整个链路要经过云端,往返延迟加网络波动,少说几百毫秒,快的话也可能一秒以上。你一秒钟感觉不出水温变化,但阀门和加热器在闭环系统里迟滞一秒钟,完全可能把温度拉过头,然后来回震荡。
所以我们的Agent是跑在端侧边缘网关里的。网关本身带轻量级推理能力,模型的参数量被压到了百万级别,单次推理在MCU级别硬件上也能在几十毫秒内完成。云端只承担两件事:一是冷启动时下发基础模型参数;二是用户主动同意后,上报脱敏的统计数据用于版本迭代。所有的个体画像都保存在本地,这既解决了延迟问题,也绕开了"洗澡数据上云"这种一听就让人不舒服的事情。
3. 温度感知的"失真"问题:传感器和管路都在骗你
3.1 热敏电阻在静止水里的滞后现象
做这套系统时,第一个让我大跌眼镜的问题是:温度读数居然会"骗人"。
我们最初用的NTC热敏电阻,放在水里测静止水温,数据漂移非常明显。原因在于热敏电阻自身有热容,它和水体之间还有一层绝缘封装,热量需要通过封装层传导过来,所以它的响应不是瞬时的,而是一阶惯性环节。在流动水里,水流不断冲刷探头,时间常数能压到3到5秒;但在静止的缸内水里,时间常数可能长达15到30秒。
这意味着什么?循环泵一停,传感器读数会继续沿着惯性上升或下降,可能带着两秒前的趋势走十几秒。如果控制逻辑直接拿这个读数做PID,就会出现"看着温度没到位,继续加热,结果实际已经超调"的情况。我们做了一组实验,同一个被测浴缸,同一目标温度,用原始读数做PID的版本过冲到了45℃以上,而用了卡尔曼滤波估计值的版本过冲控制在1℃以内。
卡尔曼滤波在这里做的是很经典的事情:同时估计真实水体温度和温度变化率两个状态,让控制逻辑用的是"推断出的当前温度和趋势",而不是滞后的裸读数。以下是我们的简化实现。
import numpy as np class WaterTempKalman: def __init__(self, dt=1.0): # 状态: [温度, 温度变化率] self.x = np.array([25.0, 0.0]) self.P = np.eye(2) * 1.0 self.dt = dt # 过程噪声: 温变过程本身有不确定性 self.Q = np.array([[1e-4, 0], [0, 1e-5]]) # 观测噪声: 传感器读数误差 self.R = np.array([[1e-1]]) def predict(self): F = np.array([[1, self.dt], [0, 1]]) self.x = F @ self.x self.P = F @ self.P @ F.T + self.Q def update(self, z): H = np.array([[1, 0]]) y = z - H @ self.x S = H @ self.P @ H.T + self.R K = self.P @ H.T @ np.linalg.inv(S) self.x = self.x + K @ y self.P = (np.eye(2) - K @ H) @ self.P def step(self, z): self.predict() self.update(z) return self.x[0], self.x[1] # 温度, 温度变化率过程噪声Q和观测噪声R的取值很关键。Q反映了我们对"真实温度到底变化多快"的信任程度,浴缸水体热容大,温变过程本来就慢,所以Q设得比较小;R则反映传感器噪声水平,NTC的噪声通常不大,但不同位置安装差异明显,需要实际标定。这两个参数取舍不好,要么滤波结果太迟钝估计不出来温度趋势,要么跟着传感器噪声乱跳。我们最终的标定方法是连续记录一分钟的静止水和循环水数据,分别计算均方差,再代入自动调参。
3.2 管路冷水段:开阀之后的那几秒钟最难控制
还有一个所有热水系统都绕不开的问题:管路残留冷水。热水从热源走到浴缸龙头,中间经过的管道里存着上次用完留下的水。这段水在管道里已经冷却到环境温度,开阀之后会被优先推出来。看似微不足道,但实际体感影响很大。
我算过一笔账:一根3米长、内径16毫米的进水管,内部容积大概是0.6升。按常规6升每分钟的出水流量来算,开阀之后要等6秒钟才能见到真正的热水。如果管子长一点,比如从卫生间到厨房绕一圈,这个等待时间能到十几秒。更麻烦的是,这个冷水段混入浴缸后,会让缸内温度瞬间掉下去一截,而温度传感器从滞后中恢复过来时,系统已经做出错误的加热判断了。
我们的对策是给Agent加上流量积分预测。开阀前,Agent会依据上次关阀时间和管路容积估算出冷水排放时间;在冷水段排放期间,出水温度传感器读到的温度会被标记为"不可信",控制逻辑不基于这些读数做决策,而是按预设的混合比例直接推动阀位。等排冷水阶段结束,温度读数恢复正常后,系统才切回闭环控制。
这套机制实测下来,初次放水的前30秒温度波动从原来的正负4℃降到了正负1℃左右,入水体感明显好很多。这也是我强烈建议做类似系统的朋友一定要优先解决的问题:管路冷水段不是控制问题,是感知信任问题,你必须让Agent知道"这些数据此刻不可信"。
3.3 传感器装在哪个位置,直接决定系统好不好用
传感器的安装位置同样重要。我们踩过一个坑:最初把缸内温度传感器放在循环回水口附近,因为那里好接线。结果循环泵一开,回水口附近的温度读数和缸体另一侧差了将近3℃。循环泵转速一档和三档之间,读数能跳变接近2℃。原本以为是传感器坏了,后来才发现是水流方向把局部热水直接冲到了探头上,读到的根本不是整个缸体的平均水温。
后来我们把传感器改成双路配置:一路放在缸体中间高度、远离进出水方向的静水区,负责给出控制用的基准温度;一路贴在浴缸壁面上,用来感知缸壁温度,辅助判断散热情况。中间那路传感器还加了一个简单的遮流罩,避免水流直接冲刷探头。这个改动看起来非常基础,但对于整体控制稳定性来说,比算法调参的影响大得多。
4. AI Agent的决策模型:从"恒温曲线"到"自适应舒适曲线"
4.1 目标温度曲线是怎么生成的
上一节解决了感知问题,这一节说决策。既然我们说Agent的目标不是维持一条水平直线,那它到底在追什么曲线?我们用的是这样的策略思路,分四个阶段。
预热阶段。检测到用户靠近浴缸或者手动开启预泡模式后,Agent会把目标温度设得比用户设定值高出1到2℃。原因是浴缸自身的散热和刚放进去的冷水管段会拉低温度,提前把水体加热到略高于目标,这样等用户真正入水时,缸内温度正好落在舒适区间。
入水补偿阶段。毫米波雷达检测到有人进入浴缸时,目标温度再上浮1到2℃。这里的物理依据是:人体入水会带走大量热量,皮肤温度也会突然被拉低,这时候同样的水温感觉上比静止泡澡时要冷一些。提前补温可以显著减弱那种"刚下去一激灵"的感觉。
稳定泡澡阶段。入水一两分钟后,目标温度回落到用户设定值,开始精细调节。这里的控制目标不仅有温度偏差,还限制了温度变化率。人体对缓慢变化有很强的适应能力,但超过0.3℃每秒的变化就会非常明显,所以我们把变化率上限写进控制约束,宁可慢一点调,不搞剧烈升降。
离水保温阶段。雷达检测到人从水中站起来(比如洗头、搓澡),此时目标温度设置为保温档,比设定值低1℃左右。这么做一方面省能耗,另一方面避免人再次入水时水体太烫。再次入水会重新触发入水补偿。
这条目标曲线不是固定写死的,它由用户画像模块动态调整。每个用户的使用记录都会沉淀成一组偏好参数,比如"用户A在夏季偏好42.5℃,在冬季偏好43.5℃""用户B每次都会在系统默认基础上手动加0.5℃"。Agent通过对这些历史数据的拟合,在每次放水前就能把默认温度摆在更合适的位置。
4.2 为什么最终落地选了"状态机+前馈补偿+轻量学习",而不是直接上强化学习
我接触过不少朋友,一听到AI Agent就默认要上强化学习,让模型自己学。这个想法很漂亮,但落地到浴缸水温控制上,有几个实际问题绕不开。
首先是安全约束。强化学习在探索阶段会尝试各种可能的动作,这对一个可能输出60℃热水、直接对着人的系统来说是不可接受的。你不能让它为了学最优策略,先把人烫一下。
其次是样本效率。一个家庭一天洗一两次澡,一年也攒不到一千次完整泡澡数据,这点样本量喂给深度强化学习模型远远不够。哪怕用仿真环境预热训练,仿真和真实水体的热特性差异也会让策略迁移大打折扣。
所以我们最终采用的是三层混合决策结构:
第一层是状态机,负责阶段切换,保证行为逻辑符合常识,也保证安全条件被强制检查。第二层是前馈+PID控制器,负责具体的执行,这种方式对回路中的扰动有很好的实时响应能力。第三层是一个轻量级参数学习模块,它不直接输出控制量,而是调整第一层目标曲线中的参数,比如补偿幅度、预热时长、用户偏好温度。学习模块的模型很小,入水后根据实际温度误差做一轮在线更新,把"这次泡澡的体感反馈"折算成参数微调。
这套结构的好处是:模型的行为在绝大多数时间是确定性的、可解释的,便于调试和验收;学习能力体现在参数空间上,每一个参数都有明确的物理含义。用户反馈好,参数就往某个方向微调一点;反馈不好,参数就调回来。
4.3 冷补偿幅度的物理估算
那个入水补偿1到2℃不是拍脑袋定的。我们做了一个简单的热平衡估算。一个200升的浴缸,人体入水后,接触到的皮肤面积大致是1.5到2平方米。皮肤表面温度大约33℃,水温42℃,温差9℃。刚入水的瞬间,贴近皮肤的水层会被迅速冷却,形成一个低几度的边界层,人的主观冷感主要来自这一层。要把这个冷感抵消掉,单纯靠整体升高水温不一定最有效,因为整体升太多,泡久了又热。实测下来,提前把水温从42℃提到43.5℃左右,入水瞬间的主观冷感能明显减弱,泡十分钟之后体感也不至于过热。最终我们把补偿量定为"在目标温度基础上+1.5℃,同时限制最高不超过设定值+2.5℃",这个窗口在实际使用中表现最好。
我们还考虑过环境温度因素。冬天浴室环境温度可能只有5到10℃,这时候浴缸壁面的散热、水面蒸发的冷感都会更强,同样的水温体感会比夏天凉。所以环境温度也被作为参数输入到了目标曲线生成逻辑中,每低于20℃一个档位,补偿量增加0.3℃左右。
4.4 用户画像更新逻辑
用户画像的更新逻辑要小心,不能今天用一次就大改参数,否则系统会变成"神经质",昨天觉得冷就调高,今天觉得热又调低,用户永远摸不到规律。我们的策略是加权滑动平均:每次使用后的参数更新,权重只有10%到15%,新数据只会把参数往目标方向挪一小步。只有当连续多次出现同一方向的偏差时,画像才会积累出明显的调整趋势。
另外,画像更新要跟明确的使用场景绑定。泡澡和淋浴的控温逻辑差别很大,所以我们强制要求画像数据带有场景标签。只有在"泡澡模式"下产生的数据才会更新泡澡偏好,避免数据污染。
5. 执行机构与控制链路的工程实现
5.1 冷热混水阀和循环泵是真正的执行主角
很多人以为浴缸水温控制主要靠加热器功率。实际落地时,大部分家庭热水系统能提供的热水量是相对固定的,加热器的调节响应也慢,真正快速影响缸内温度的其实是冷热混水阀和循环泵。所以我们把执行机构的关键设计放在了这两个设备上。
混水阀我们选了带位置反馈的电动三通阀,控制精度0.5度,阀体响应时间控制在1秒以内。位置反馈很重要,没有反馈的阀门在控制上就是开环的,磨损、水垢、电压波动都会让实际阀位偏离子预期。有了反馈,Agent在每次执行前后都会做一次一致性校验,如果发现"命令阀位和实际阀位偏差超过5%"就上报异常。
循环泵的转速控制也很有讲究。泵转速高了,缸内水温均匀性变好,水温传感器读数也会稳定不少,但水流冲刷带来的体感干扰会变大;转速低了,热交换效率下降,缸内可能出现明显的温度分层,上层热下层凉。最终我们让循环泵保持低转速常开,只有检测到入水或补水这类强扰动事件才会临时提升转速。
5.2 控制时序:一次入水补偿的完整执行过程
拿"用户走向浴缸"这个最简单的场景来说,一次完整的控制链路是这样的:
- 毫米波雷达检测到有人进入浴室并朝浴缸方向移动,状态机从"待机"切到"预热准备"。
- Agent查询当前缸内温度和用户画像,计算出预热目标温度,下达预热指令。
- 混水阀开始向缸内注热水,循环泵同步开启,出水温度传感器进入"冷水段不可信"标记阶段。
- 流量积分判断冷水段排空后,Agent切入闭环控制,以预热目标温度为参考,调节阀位和加热器功率。
- 雷达识别到人体入水动作,状态机切到"入水补偿",目标温度上调1.5℃。
- 入水后两分钟,目标温度回落到设定值,控制进入稳定段。
- 稳定段期间,控制器以滤波后的缸体温度为反馈信号,以温度变化率作为约束,做细调。
整个过程在时序上要做到无缝切换,关键是每个状态之间都有一段稳定判定时间。比如"雷达识别到人体入水"事件,我们要求雷达连续确认3秒以上才触发状态迁移,避免人影一晃就误切换。这个去抖逻辑看起来很简单,实际测试中至少过滤掉了80%以上的误触发。
5.3 安全冗余:必须有两道物理红线
控制链路再智能,安全系统也不能省。我们梳理了一下可能出事故的路径,无非是三类:水温过高烫伤人、加热器干烧引发火灾、电气泄漏导致触电。针对这三类,每一类都做了硬件层的独立保护。
水温过高这条路上,我们的第一道防线是混水阀前的机械恒温阀。它在物理上把输出温度限制在50℃以内,即使电动阀完全失控,热水通过机械恒温阀混入冷水后也不会超过50℃。第二道防线是独立硬件温控器,它直接监测出水管温度,一旦超过55℃就切断加热器电源,这一路完全不经过Agent的逻辑。第三道防线才是软件层的异常检测,比如连续N分钟温度异常、传感器读数跳变过大等,都会触发系统降级。
降级策略也要提前想好。如果Agent软件异常,系统会回退到"机械恒温阀+手动注水"模式,相当于一个普通浴缸,虽然不智能但不影响基本使用。如果加热器故障,系统会关闭热水通路并报警。这里的核心原则是:任何一个环节失效,系统的行为一定是可预料的、安全的,而不是"进入某种奇怪状态"。
5.4 控制指令的下发频率和限幅
执行机构下发指令的频率,我们最后定在1秒一次。这个频率听起来不高,但已经比大多数混水阀的物理响应速度快了。之前试过0.5秒一次,阀门马达频繁换向,发热明显,寿命堪忧;也试过2秒一次,温度控制跟着变迟钝,浴缸里能感觉到温度缓慢的周期性波动。1秒一次是反复测试后的折中点。
限幅策略也至关重要。每一条控制指令,在执行层都要经过三重限幅:阀位变化量限幅,每次最大变化不超过3%,防止猛开猛关;目标温度限幅,最高44℃,最低30℃;变化率限幅,缸内温度调节目标的变化率不超过0.2℃每分钟。这些限幅让整个系统的行为保持温和,代价是响应速度慢了一点,但舒适度反而提高了。
6. 实测结果与调参踩坑记录
6.1 三类典型场景的实测数据
样机装完之后,我们在一个模拟家庭浴室环境里做了两个多月的连续测试,记录了三类典型场景的数据。
| 场景 | 控制目标 | 实测结果 | 传统恒温方案对比 |
|---|---|---|---|
| 初次放水 | 预热到设定值后维持 | 前1分钟波动正负1℃,5分钟内稳定在±0.5℃ | 前5分钟波动正负4℃,10分钟稳定在±1.5℃ |
| 入浴瞬间 | 补偿防冷感 | 检测到入水后20秒内补偿到位,无温度突击感 | 无补偿逻辑,入水冷感明显 |
| 中途补水 | 防止冷水直冲人体 | 补水期间缸内温度下降控制在0.8℃以内 | 补水时温度下降2到3℃,且后续过冲明显 |
最让我满意的是入浴瞬间的表现。以前手动浴缸的体验是"先烫后凉",现在系统会在你进去之前就把水温顶高一点,等你坐进去之后它再慢慢回落到设定值。泡半小时之后如果你开始觉得偏凉,它会以极缓慢的速度把温度再抬半度上来,整个过程几乎感知不到。有测试伙伴反馈说"说不上哪里好,就是泡着舒服",我觉得这就是舒适控制该有的样子。
6.2 卡尔曼滤波参数的标定教训
调参过程里,卡尔曼滤波的Q和R最折磨人。最初我把过程噪声Q设得过大,滤波结果几乎贴着原始观测值走,温度变化率估计值乱跳,控制逻辑一会儿认为在升温一会儿认为在降温,整个系统表现得非常焦躁。后来我把Q调小了,结果滤波结果变得过于平滑,真实的水温变化要延迟十来秒才被估计出来,控制系统的相位滞后又变大。
最终的标定方法是分两步走。第一步,在静止水里采集三分钟数据,计算观测噪声R。第二步,在循环泵工作状态下,人为制造一次快速温变(比如注入2℃的冷水),采集真实温度变化过程,用这段数据反推过程噪声Q。把这两组数据代进去之后,滤波输出才真正跟上了实际水体状态。
这里还有一个心得:温度变化率的估计值比温度本身更重要。控制逻辑的好坏很多时候取决于它对趋势判断的准确度,而不是对当前读数有多精确。所以我们特别关注滤波后dT/dt这个信号的质量,它也是后面所有预判逻辑的输入。
6.3 循环泵一开读数就跳变的问题复盘
前面提到过传感器装在回水口附近导致读数跳变,这里再具体复盘一下当时的排查链路。最开始发现异常,是在一次循环泵档位切换测试时,缸内温度读数从41.2℃跳到了43.5℃,然后又缓慢回落。第一反应是传感器坏了,换了新的还是一样。后来把循环泵关了,读数稳定;一开就读数偏高,而且靠近回水口方向更明显。
排查到最后,发现是这个位置恰好处于循环回水的射流路径上,泵一开,局部高温水会直接冲刷探头,形成热斑效应。解决办法有两个,一是调整传感器位置,挪到缸体侧壁的静水区;二是给探头加遮流罩,让水流不会直接冲击探温部位。两个方案我们都做了,最终读数稳定性从正负1.5℃提升到了正负0.2℃以内。这个问题的教训是:算法再强,也抵不过一个物理上糟糕的采样点。
6.4 冷补偿逻辑的边界条件
冷补偿逻辑也不是没有副作用。最初我们把补偿量定得偏大,入水前把水温顶到了设定值加2.5℃,结果部分用户泡了几分钟之后觉得水有点偏热,主动去调低设定。这相当于系统"预判过头了"。后来我们做了个调整:补偿幅度动态化,把两个信号作为约束条件,一个是雷达持续监测到的入水动作时长,另一个是环境温度。入水动作拖得越久,说明用户正在慢慢适应水温,补偿量就相应调小;环境温度越低,补偿量适当增大。
这套动态补偿逻辑用了大概两周时间验证,最终把"入水冷感"和"泡澡过热"两个投诉都降到了接近零。回头总结,这类体验类的控制问题,最忌讳的就是把参数写死,必须给Agent留出根据上下文动态调整的空间。
7. 写在最后:做这套系统一年后的真实体会
如果只让我说一个心得体会,那就是:AI Agent落地到实体设备,难点从来不在模型有多强,而在于你对物理世界的理解有多深。水温调节最核心的进步,不是我们用了什么高级算法,而是我们终于理解了"人的体感温度在动态变化"这件事,然后把这种理解转化成了目标曲线的设计。卡尔曼滤波只是让感知跟上现实,状态机只是让逻辑可控,轻量学习只是让系统逐渐了解用户。它们组合在一起,才让浴缸从"执行设定的机器"变成了"能预判需求的对象"。
如果你也想做类似的项目,我的建议是先别急着写算法。花两周时间把传感器装好,把水路的物理特性摸清楚,记录最原始的数据,看看真实水温在你家里的水管系统里到底是怎么变化的。这些数据比任何论文里的模型都更有说服力。
最后再分享一个工程上的小技巧:做这类系统,一定要保留一套完整的手动模式,物理开关,不依赖Agent。它既是安全兜底,也是用户信任的基石。我在实测中发现,当用户知道可以随时手动接管时,他们对自动模式的容忍度和好奇心反而会更高。这个项目做了一年多,我最大的收获不是那一堆曲线和数据,而是我对"智能"这两个字的理解变得更具体了。真正的智能不需要用户去迁就系统,而是系统在无声无息中,把用户想要的那点舒适感,提前准备好了。