第 3 课 自然语言控制全屋设备
第 3 课 自然语言控制全屋设备
本课目标
- 实现灯光 / 空调 / 窗帘等常见设备的自然语言控制
- 掌握复合指令的解析与执行
- 构建设备别名与房间映射系统
小赵的第一个周末
经过上一课的环境搭建,小赵已经能在 Telegram 上发"打开客厅灯"了。但妻子小李试了一下,发现说法稍微不同就不行。她想说"把灯开一下",Agent 却不理解。
小赵意识到:自然语言控制不是"关键词匹配",需要一套完整的意图识别体系。
3.1 自然语言控制原理
用户:"把客厅灯调暗一点"
┌─────────────┐
│ Hermes Agent │
│ │
│ 意图识别: │
│ 动作=调节亮度│
│ 设备=客厅灯 │
│ 方向=调暗 │
│ 幅度=适当 │
│ │
│ 推理+执行: │
│ 当前亮度 80% │
│ → 调到 40% │
└──────┬──────┘
│ MCP 调用
▼
light.turn_on
entity_id: light.living_room_ceiling
brightness_pct: 40
关键能力
| 能力 | 说明 | 示例 |
|---|---|---|
| 意图识别 | 理解用户想要做什么 | “开灯” → turn_on |
| 设备映射 | 找到对应的 Entity | “客厅灯” → light.living_room_ceiling |
| 参数推理 | 补全缺失的参数 | “调暗” → 当前的 50% |
| 上下文记忆 | 记住之前的对话 | “那个也调暗” → 同一个灯 |
3.2 灯光控制
基本操作
✅ "打开客厅灯"
✅ "关闭卧室灯"
✅ "把书房灯调到 60%"
✅ "客厅灯调暗一些"
✅ "全部关灯"
色温控制
✅ "客厅灯调成暖色" → 色温 3000K
✅ "书房灯白一点" → 色温 5000K
✅ "卧室灯调到 3200K" → 精确色温
小赵在 SOUL.md 中设置了偏好:
## 灯光偏好
- "暖色"/"暖光" → 3000K
- "白光"/"冷色" → 4500K
- "阅读模式" → 4000K 亮度 70%
- "电影模式" → 2700K 亮度 15%
亮度智能推理
你:"灯太亮了"
Agent:
→ 当前亮度 100% → 调到 50%
→ "已将客厅灯亮度从 100% 调到 50%"
你:"还是太亮"
Agent:
→ 当前亮度 50% → 调到 20%
→ "已调到 20%,如需进一步调整请告诉我"
3.3 空调控制
基本操作
✅ "开空调" → 使用上次温度
✅ "空调调到 25 度" → 精确温度
✅ "开暖风" → 制热模式
✅ "空调风大一点" → 风速调高
✅ "关空调" → 关闭
模式映射
小赵在 SOUL.md 中配置了空调映射:
## 空调设置
| 指令 | 模式 | 温度 | 风速 |
|------|------|------|------|
| "开空调" | 上次模式 | 上次温度 | auto |
| "开冷气/制冷" | cool | 25°C | auto |
| "开暖风/制热" | heat | 22°C | auto |
| "除湿" | dry | - | low |
| "睡眠模式" | cool/heat | 26°C | quiet |
上下文推理
你:"有点冷"
Agent 推理:
→ 查传感器:客厅 20°C
→ 空调状态:开着制冷 24°C
→ 动作:调到 26°C
→ "客厅温度 20°C,已将空调从 24°C 调到 26°C"
你:"卧室也是"
Agent 推理:
→ 上下文=调高温度
→ 卧室空调也调到 26°C
3.4 窗帘与其他设备
窗帘控制
✅ "拉开客厅窗帘" → 全开
✅ "关上卧室窗帘" → 全关
✅ "窗帘开一半" → 50%
扫地机器人
✅ "扫地机开始工作" → 全屋清扫
✅ "清扫客厅" → 指定区域
✅ "扫地机回去充电" → 回充
✅ "扫地机暂停" → 暂停
设备别名系统
小赵发现妻子的叫法和自己不一样:
## 设备别名(SOUL.md)
- "大灯"/"主灯" → light.living_room_ceiling
- "灯带"/"氛围灯" → light.living_room_strip
- "小灯"/"床头灯" → light.bedroom_bedside
- "机器人"/"扫地的" → vacuum.roborock
- "窗帘" → 根据上下文判断哪个房间
3.5 复合指令
多设备联动
你:"把客厅调成电影模式"
Agent 执行:
1. 客厅吸顶灯 → 关闭
2. 灯带 → 10% 亮度,暖黄色(2700K)
3. 窗帘 → 关闭
4. 空调 → 25°C 静音模式
→ "电影模式已开启:灯带柔光,窗帘已拉上,空调静音"
条件指令
你:"如果外面温度超过 30 度就开空调"
Agent 推理:
→ 查询室外温度传感器
→ 当前 32°C → 满足条件
→ 开启空调制冷 25°C
→ "室外 32°C,已开启客厅空调制冷 25°C"
模糊指令
你:"我要看书了"
Agent 推理(基于 SOUL.md 偏好):
→ 用户在书房
→ 书房台灯 → 70% 亮度,4000K 色温
→ 书房窗帘 → 全开(如果白天)或 全关(如果晚上)
→ "阅读模式已开启"
3.6 动手练习
练习 1:灯光控制
分别尝试以下指令:
1. "打开客厅灯"
2. "客厅灯暗一点"
3. "把灯调成暖色"
4. "关掉所有灯"
练习 2:空调控制
1. "开空调"
2. "太冷了"(不指定设备,让 Agent 推理)
3. "空调设为睡眠模式"
练习 3:复合指令
1. "我要睡觉了"
2. "准备出门"
3. "外面下雨了"(期望 Agent 关窗帘)
练习 4:设备别名
在 SOUL.md 中添加你自己的设备别名,然后测试各种叫法是否都能识别。
本课小结
| 要点 | 内容 |
|---|---|
| 控制原理 | 意图识别 → 设备映射 → 参数推理 → API 调用 |
| 灯光控制 | 开关/亮度/色温/颜色,支持模糊指令 |
| 空调控制 | 温度/模式/风速,上下文推理 |
| 复合指令 | 一句话触发多设备联动 |
| 别名系统 | SOUL.md 中配置,适配不同叫法 |
下一课:智能场景编排——一句话启动整套生活方式。