Infrastructure — 03-25 健康监控与日报系统¶
背景¶
Dad 住院期间(3/25 入院,3/29 出院),要求 bot 总结住院情况并接管术后恢复提醒。Dad 明确强调:提醒的时机和执行可靠性很重要。 这推动了从"知识整理"升级为"自动提醒系统"的实现。
出院医嘱结构化¶
Bot 的关键决策¶
将出院文档中的药物、换药流程、复查时间、风险提示整理为可执行清单,固化到健康档案。
护理流程模块化¶
将复杂护理流程抽象为"早中晚三个护理技能":
care-morning.md:吃药(痛血康 + 大柴胡 + 小金胶囊)→ 换药(含塞栓)care-noon.md:吃药(痛血康 + 地奥司明)→ 散步 → 按摩操care-evening.md:吃药(痛血康 + 地奥司明)→ 按摩操 → 换药(不塞栓)
选型理由:模块化降低了因临时生成而出错的概率,便于 bot 记忆维护和提醒文案复用。
Dad 的人工纠偏¶
Bot 初版提醒与医嘱存在多处偏差,Dad 逐条纠正:
| 问题 | Bot 初版 | Dad 纠正 |
|---|---|---|
| 地奥司明服用时间 | 早晚 | 中午 + 晚上 |
| 晚上换药 | 含塞栓 | 不塞栓 |
| 痛血康频次 | 2 次/日 | 3 次/日(漏掉中午) |
| 坐浴中药/黄柏液 | 未强调 | 仅外用,绝对不能口服 |
| 复查安排 | 4/2 + 4/3 两天 | 只保留 4/2 上午 |
关键教训:Bot 在从文档到执行计划的映射中容易遗漏或错配,医嘱类场景必须经过人工纠偏。
提醒系统技术演进¶
第一版:Heartbeat 方案(失败)¶
- 方案:通过 heartbeat 轮询实现主动提醒
- 问题:heartbeat 适合巡检,不适合精确定点提醒
- 额外发现:
openclaw system event不支持--agent参数,无法精确指定 health agent
第二版:Cron + TTS + Mattermost(成功)¶
选型理由:cron 更适合固定时间点任务,可以直接调用脚本生成语音并发送消息,绕过 agent 路由限制。
调度:系统 crontab
脚本:workspace-health/scripts/remind.sh
TTS:edge-tts
发送:openclaw message send --account health --channel mattermost
辅助:保留 heartbeat 每 2 小时巡检
踩坑:消息发错账号¶
Dad 收到测试语音,但发现不是发在 health 的 DM 里。根因是发送脚本未指定正确 Mattermost account。
修复:在脚本中加入 --account health,确保消息发到正确的 DM。
稳定运行的提醒时间表¶
| 时间 | 内容 |
|---|---|
| 08:00 | 早上吃药 |
| 09:00 | 早上换药(坐浴 → 涂药 → 塞栓 → 敷料) |
| 13:00 | 中午吃药 |
| 15:00 | 散步 20-30 分钟 |
| 19:00 | 晚上吃药 |
| 20:00 | 腹部按摩操 |
| 21:30 | 睡前换药(坐浴 → 涂药 → 敷料,不塞栓) |
3/30 起连续多日稳定执行,提醒系统从"调试阶段"进入"稳定服务阶段"。
Web App 需求抽象¶
Dad 的产品化决策¶
纯 DM 提醒虽然可用,但不利于整体查看。Dad 决定把护理计划产品化为内网 Web App。
技术栈升级路径¶
- 初版 PRD:纯前端 SPA + localStorage
- Dad 最终决策:React + Vite + Python + SQLite
核心功能¶
- 每日护理看板:时间轴展示 + 勾选完成 + 逾期标红
- 护理流程详情:早晚换药步骤、按摩操
- 浏览器通知提醒:到点 Notification + 声音
- 用药方案页:药物表格 + 早/中/晚矩阵
- 康复时间线:术后天数 + 状态记录
- 注意事项页:紧急情况 + 医生电话
能力边界管理¶
Bot 明确说明:health agent 没有 allowAgents 权限,不能直接调用 main agent。因此采用"输出 PRD + 提示词,由 Dad 手动发给 main agent"的方案。这是一次重要的系统边界管理。
关键经验¶
- Heartbeat 不适合精确定时提醒:应使用 cron
- 医嘱映射必须人工纠偏:Bot 自主推断容易遗漏
- 消息发送要指定 account:否则可能发到错误的 DM
- 护理知识要模块化:降低错误率,便于维护
- 能力边界要透明:Bot 做不到的事明确说出来,不要硬撑