
传统智能家居的痛点
家里的Home Assistant跑了快两年了,自动化写了一堆,但说实话用起来还是不够"智能"。比如我想说"太热了",系统不会自动开空调,非得写一堆条件判断——温度高于28度且时间在下午2点到晚上10点之间且人在客厅……每次来客人我都得解释一遍这套逻辑。
问题在于,传统自动化是"规则驱动"的,你得提前把所有可能性都想到。但人的需求是模糊的、动态的。最近Ollama + LLM的方案让我看到了可能性——让大模型来理解自然语言,再转化为Home Assistant的动作。
方案架构
整体思路很简单:
- 用Ollama在本地跑一个轻量级LLM(我用的Qwen2.5 7B)
- 写一个Python中间件,接收自然语言指令,调用LLM生成HA的Service Call
- 通过HA的REST API执行对应的设备操作
整个链路都在局域网内完成,延迟大概200-500ms,体感还行。
实际配置
中间件的核心逻辑大概50行Python,关键部分是给LLM一个设备清单的prompt,让它根据用户指令输出JSON格式的Service Call。比如我说"把客厅灯调暗一点",LLM会输出:
{
"service": "light.turn_on",
"entity_id": "light.living_room",
"data": {"brightness": 128}
}
我加了一层安全校验——LLM输出的entity_id必须在白名单里,不在就拒绝执行。防止模型抽风把热水器开了。
实测效果
跑了一周,几个场景体验不错:
- "太热了":自动开空调设26度,同时关窗帘
- "我要出门了":关灯、关空调、扫地机器人开始工作、摄像头切换到离家模式
- "晚上好":客厅灯调暖色调、电视打开、空调设25度
准确率大概85%,偶尔会理解错,比如"把灯调亮"有时候会变成开所有灯。但比之前纯规则的方式自然多了。
踩坑记录
- 上下文丢失:Ollama的API默认没有对话记忆,每次都是独立请求。我后来加了session管理,保留最近5轮对话,"再暗一点"这种上下文指令就能正确处理了。
- 幻觉问题:LLM有时候会"发明"不存在的设备。安全校验层救了我好几次。
- N100性能:7B模型在N100上推理要3-5秒,体验不太好。加了GPU之后降到500ms以内。
总结
用LLM控制智能家居还处于"能用但不够稳定"的阶段。不过比起一年前,本地模型的质量和速度都提升了很多。等模型再优化几轮,这可能就是智能家居的正确打开方式。
文章评论