news 2026/10/23 8:59:32

DeepSeek R1接入米家:用Home Assistant搭建会思考的智能家居调度层

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek R1接入米家:用Home Assistant搭建会思考的智能家居调度层

先说点实在的。标题里的“DeeepSeekR1”其实就是DeepSeek R1,多打了个字母。米家设备我现在家里有三十多个,从门窗传感器、灯泡到扫地机、空气净化器,刚入手那阵子觉得“智能家居”也就这样了——自动化场景写完就完事,灯具、窗帘、空调各管各的,彼此之间毫无灵魂。后来我把 DeepSeek R1 接进米家这套体系里折腾了两周,才真正意识到一个问题:米家缺的从来不是设备联动,而是一个“会思考的调度层”。这个东西一旦补上,体验就是从“定时开关”到“家里有个能听懂人话、会主动安排事情的管家”的跨越。

这篇文章我尽量不堆概念,把我实际搭出来的链路、能玩的花样、以及踩过的坑全部摊开说,目标读者是手里有一堆米家设备、又不满足于傻瓜自动化的人。哪怕你没有 Home Assistant 基础,按着步骤也能搭出一套“超级米家”。

1. 先把话说透:米家最缺的不是联动,是“会思考的调度层”

1.1 米家原生的自动化引擎到底卡在哪

米家 App 里的自动化其实做得不差,定时、触发条件、场景模式都有,联动能力在同价位生态里算能打的。但用久了你会发现,它本质是一张“规则表”:如果传感器满足条件,就执行某个动作。比如“门锁开启→打开玄关灯”“湿度低于50%→打开加湿器”,这种链路很可靠,也很死板。

死板的典型表现有三个:

  • 听不懂模糊指令——“我回来了”这四个字,在米家里必须被拆成“门锁指纹开锁”或者“人在传感器感应到”,然后触发固定场景。你没法跟它说“今天好累,回家不想开太多灯,开个夜灯就行”。
  • 不会做多步推理——它只会执行预设的“如果…那么…”,不会根据时间、天气、家庭成员、历史习惯组合出一条合理的执行链。比如同样是“回家”,夏天要开空调、冬天要开地暖、深夜回家可能只需要夜灯,这套逻辑用规则写出来会非常笨重。
  • 没有突发情况的判断力——检测到漏水传感器报警,原生自动化只知道推送一条通知,不会主动去联动关水阀、关掉相关电器、再发一条带处理建议的语音提醒。

问题的根源不是米家做不好,而是规则引擎的天花板就在那。想再往上走,就必须在设备层之上加一个“大脑”,让这个大脑去理解语义、生成决策、调用设备。这个大脑,就是我接入 DeepSeek R1 的原因。

1.2 为什么是 DeepSeek R1,而不是小爱音箱自带的那个“大模型”

小爱音箱现在也接了大模型,能连续对话、能查天气、能控制部分设备,但体验下来你会发现它的“控制”和“理解”是割裂的:它确实能听懂“把客厅灯调到最亮”,可你没法让它自己规划一串动作。

举个例子,我对小爱说:“明天八点要出门,帮我安排一下明早的流程。”它只能回一句“好的,已为你设置明天八点的闹钟”。但接入 R1 之后,它能基于你家电器的实际情况给出类似这样的执行结果:

  • 明早 7:15 开启卧室灯并缓慢调到 30% 亮度;
  • 7:30 启动热水壶烧水;
  • 7:45 根据当天气温决定是否开启空调预热;
  • 7:50 语音提醒你带伞(因为 R1 接了天气接口)。

区别就在于:一个是“指令翻译器”,一个是“任务规划器”。而且 R1 是开源推理模型,推理能力在同类开源模型里属于第一梯队,既可以通过 API 调云端满血版(目前的实际形态是 V3 基础上强化推理能力的 R1 系列),也可以本地部署蒸馏版跑在普通电脑上,这件事放在几年前根本不敢想。对我这种数据敏感又爱折腾的人来说,可本地部署这一点是致命的吸引力。

1.3 “超级米家”到底是个什么形态

我想象中的“超级米家”,不是一个 App,也不是一个音箱,而是一套能长在现有米家生态之上的“指挥层”:语音/文字进来→大模型理解并拆解成任务→调用米家设备执行→把结果反馈给你。

它需要一个“粘连层”来把大模型和米家设备拉到同一张桌子上对话。这套层我最终选择的是 Home Assistant(下文简称 HA),配合 Miot Auto 插件把米家设备同步进来。架构不复杂,但每一步都有讲究,下面把我选型的过程和理由摊开讲。

2. 接入前必须想清楚的三条路线(以及我的最终选择)

2.1 路线 A:直接调 DeepSeek API,让米家 App 通过“自定义技能”调用

理论上你可以在米家 App 里给设备设置“自定义指令”,再通过一些转接服务去请求 DeepSeek API。这个路线的优点是开发量最小,不需要搭 HA,甚至连树莓派都不需要,一台能挂着跑脚本的电脑就行。

但我实际试了一下就放弃了。米家官方并没有开放面向个人开发者的完整自动化执行 API,你只能在一个个“场景”里写死参数,大模型生成的决策没法自由映射到设备操作上。简单说就是:模型想动哪个设备,米家这边没有一个统一、开放的接口让它动。如果硬要搞,就得每个场景配一个 HTTP 请求,维护成本极高,做出来还不如原生规则。

所以这条路线只适合“尝个鲜”,不适合做长期可用的家庭中枢。

2.2 路线 B:本地部署蒸馏版 R1(Ollama)+ Home Assistant

这个路线是我目前主力使用的。核心思路是:

  1. 在电脑或小主机上装 Ollama(一个非常省心的本地大模型运行工具),拉取deepseek-r1蒸馏版模型;
  2. Home Assistant 通过Ollama conversation集成,把模型作为“对话代理”接入;
  3. 用户在 HA 的 Assist(语音助手)里说话,模型会把意图转成具体的设备控制指令,再通过 HA 的 entity 执行。

优点很直接:

  • 隐私好:所有家庭状态、传感器数据都留在本地,不上云;
  • 成本低:只要有一台 16G 内存的电脑,就能带动 7B/14B 蒸馏版,电费一天也就几毛钱;
  • 可定制性强:能自己改系统提示词,让模型“学会”你家设备和习惯。

缺点也别回避:

  • 本地 7B 级模型的推理能力跟云端满血版有差距,复杂的多步规划偶尔会犯傻;
  • 首次加载模型要等,CPU 跑 14B 会有点慢;
  • 需要维护一台常开设备,对非技术用户来说门槛偏高。

2.3 路线 C:Home Assistant + 云端 DeepSeek API(满血 R1)

想要满血版推理能力,又不想折腾本地硬件,可以直接在 HA 里配置 OpenAI(兼容接口)的对话代理,把 API Base 指向 DeepSeek 开放平台,模型填deepseek-reasoner。这样 HA 里所有智能设备的控制权都能交给 R1,响应质量是蒸馏版完全比不了的。

代价是:

  • 家庭设备状态和对话记录会发给第三方服务,隐私敏感的人要慎重;
  • 每次请求按 token 计费,虽然 DeepSeek 的定价很便宜,但全天挂着语音助手频繁对话,一个月也得几块钱到几十块;
  • 一旦服务端波动,整个家庭语音控制的体验就受影响。

2.4 我的决策:先本地后云端,双轨不冲突

我把三类方案放在一张表里对比过:

方案硬件要求隐私响应质量部署难度成本
米家自定义技能直连API极低差(全上云)中低低
HA + Ollama本地蒸馏版16G内存起步完全本地中上(7B够用、14B更好)中电费
HA + DeepSeek云端API极低差(设备信息上云)满血版,最强低按token计费

我的最终选择是以本地蒸馏版为日常主力,云端 API 作为“复杂任务”的增强通道:平时开关灯、查天气、执行固定流程用本地模型,快且隐私好;遇到需要深度推理的任务(比如“根据我这周睡眠数据安排明早的起床流程”),我在提示词里设计一个“向上请求云端满血版处理”的机制,做双轨调度。

这一步想明白了,后面所有配置才不会被“到底选哪条路”反复卡住。接下来直接讲玩法,这些才是不折腾设备的普通人最关心的部分。

3. 接入之后到底能干什么:我实测过的五个“值回票价”场景

3.1 把“模糊口令”变成真正的执行计划

以前我回家说的是“小爱同学,打开客厅灯”“小爱同学,打开空调”,一句话只能对应一个动作。现在我在 HA 的 Assist 里配置了反思型提示词,让 R1 先解析“我回来了”这个语义,再结合时间、室内外温度、家里是否有人等状态生成执行计划。

真实场景是这样的:

我对 HA 的语音管道说:“我回来了。” R1 内部按照提示词里的逻辑走了一遍:

  • 当前时间 19:47,判断为“夜间回家”;
  • 客厅照度传感器数值 12,低于阈值,需要开灯;
  • 温度 28.4℃,高于舒适区间,且未来半小时天气预报有阵雨,开空调比开窗更合适;
  • 扫地机已处于待机状态,不需要二次触发。 最终执行:打开客厅灯(亮度 40%)、打开空调(制冷 26℃)、推送一条语音“欢迎回家,室内温度偏高,空调已开到 26 度,需要我拉上窗帘吗?”

这套逻辑用米家原生自动化写,需要拆成七八个条件分支,而且无法覆盖全部情况;交给 R1 之后,它每次都会根据实时状态自己“想”一遍,效果就是更贴人。

3.2 多设备协同的“早晨流程”编排

米家原生也支持“早安”场景,但所有动作是固定写死的。我的早起流程则完全交给了 R1 动态编排:

  • 工作日闹钟响起后,先查日历(通过 HA 的 Calendar 集成)确认今天是否有早会;
  • 如果有会,它会提前 10 分钟把咖啡机预热时间提前;
  • 通过手机 GPS 和米家门锁状态判断我今天是否在家,如果已经有人先出门了,就跳过卧室灯;
  • 起床后如果检测到空气质量差,自动把新风机调高两档,并语音播报今天的空气质量。

这些逻辑并不高深,但强就强在所有条件是模型从上下文里读出来的,不是代码里写死的。只要你把设备状态暴露给它,它就能在“是否开灯”这种小事上做出更符合当下情况的决定。

3.3 异常状态的“侦探式”判断与处理

这是我最满意的一个场景。有一次家里水管漏水传感器报了警,但米家 App 只会给我推一条通知“检测到漏水”,这很正常,但不解决问题。

接上 R1 之后,我设置的思路是:当传感器触发报警时,HA 立即把“哪些设备有异常、水浸传感器位置、当前水阀状态、房间湿度趋势”打包发给 R1,让它生成处理方案。它第一次给出的结果就非常靠谱:

  • 确认水浸位置在主卫;
  • 联动关闭主卫水管阀门(我在水阀上加了一个米家智能阀);
  • 打开卫生间的排风扇快速排湿;
  • 给全家人推送通知,附带了“已关水阀”的安全确认,而不是单纯让你自己去看。

这种动作用原生自动化也能写,但一旦异常种类多、组合复杂,条件分支会爆炸式增长。有一层推理模型兜底之后,家庭设备的价值才真正从“远程开关”变成了“主动管理”。

3.4 语音入口升级:小爱、手机、HomePod 都能当“话筒”

我保留了两个入口:一个是通过 HA Assist 直接对接我自己部署的中文语音模型做本地唤醒;另一个是把小爱音箱通过xiaomi_miot集成接进来,让它的语音内容直接进 HA,再由 HA 对话代理返回结果。

实际体验是:小爱音箱变成纯收音机 + 扬声器,真正“听懂”的是背后的 R1。你对小爱说“把空调关了它也关不了”,其实是米家技能层不支持这个语义;但只要语音文本能传到 HA,R1 对这句话的理解就是“关闭空调(如果存在多台空调,则关闭当前房间所对应的那台)”,背后调的是 HA 的climate.turn_off服务,跟哪个音箱根本没关。

3.5 从设备日志里“归纳习惯”,做个性化推荐

大模型最大的价值不是执行,而是归纳。我每周会把 HA 的设备历史记录导出,让 R1 分析我家的使用规律:

  • 工作日 20:00–21:00 客厅电视使用率最高;
  • 最近一周卧室空调平均设定温度比上周低 1.5℃;
  • 空气净化器在夜间 23:00 后高频运行,但它所在的房间夜间没人。

基于这些结论,R1 会给出“调整建议”。比如它会建议我:“卧室夜间无人时把净化器调到静音模式,客厅建议改到 20:40 自动进入影院模式。”这不是科幻,只要你有历史数据,大模型就能把“发生了什么”翻译成“应该怎么做”,而这是米家给不了的。

4. 手把手搭建:HA + 米家 + R1 的完整链路(可直接复现)

4.1 环境准备:需要什么硬件和版本

我这套跑在一个刷了 HAOS 的旧笔记本上,配置是 i5-8250U + 16G 内存 + 512G SSD,跑 7B 蒸馏版 R1 足够。如果你只想用云端 API,硬件要求可以忽略。

需要准备的内容:

  • Home Assistant OS:建议用 HAOS 而不是 Docker 单容器,因为 Overseer 有完整的 Add-on 生态,后面装 Ollama 会轻松很多;
  • HACS:HA 的插件商店,后面装 Xiaomi Miot Auto 需要它;
  • Xiaomi Miot Auto 插件:这个插件是把米家设备拉进 HA 的核心,千万别用已经停更的xiaomi_miio;
  • Ollama Add-on:在 HA 的 Add-on 商店里搜“Ollama”安装,或者直接用系统 Docker 跑 ollama/ollama 镜像;
  • DeepSeek API Key(可选):如果你决定用云端满血版,只需要在 DeepSeek 开放平台注册拿 Key,然后在 HA 里配置 OpenAI 兼容的对话代理即可。

4.2 设备同步:让 HA 认识你的米家设备

装好 Xiaomi Miot Auto 后,配置页里填米家账号(需要用手机验证码),插件会自动同步账号下的设备列表。同步完成后,去设置 → 设备与服务里确认每个设备都生成了对应的 entity。

这里有个非常关键的细节:给每个 entity 起一个好记的别名。比如默认 entity_id 是switch.0x1580acd34b2c_child,鬼都记不住,但你在 HA 里把 friendly_name 改成“客厅绿米开关”,后面 R1 才能准确调用。我在配置阶段花了一个小时,把三十多个设备全部重命名成“房间+设备”的格式(如“主卧空调”“客厅电视”“厨房水阀”),这一步决定了后面模型调用的准确性。

4.3 配置 Ollama 与模型拉取

在 HA 的 Add-on 里安装 Ollama 后,进入它的终端执行:

ollama pull deepseek-r1:7b

如果内存充足,也可以拉 14B:

ollama pull deepseek-r1:14b

拉取完成后,在 HA 的配置 → 设备与服务 → 添加集成里选择Ollama,填上 Ollama 服务的地址(一般是http://localhost:11434)。添加成功后,HA 里就会出现一个conversation.ollama实体。

4.4 把 R1 接到 Assist 语音助手

HA 的设置 → 语音助手里可以新建一个 Assist 助手,关键配置如下:

  • 对话代理:选择刚才添加的 Ollama(或 DeepSeek API 对话代理);
  • 语音引擎:选本地 Piper 中文语音,或者保留系统 TTS;
  • 语言:设为中文。

之后在 HA 面板左下角点对话图标,就能直接打字问它家里设备的情况;配合语音硬件(比如树莓派 + 麦克风阵列,或改造小爱音箱),就能变成全屋语音入口。

为了让它更好用,我给对话代理写了一段初始化提示词,核心内容大致是:

你是“超级米家”的家庭管家。你可以通过工具控制以下设备:主卧空调、客厅电视、厨房水阀、卫生间排风扇等。 规则: 1. 用户说“开灯/关灯”时,默认指当前房间的主灯; 2. 涉及多设备时,拆成顺序动作一次执行; 3. 不能确定的操作,先向用户确认; 4. 优先使用设备别名,不要使用原始 entity_id。

这段提示词非常关键,它本质上是“给模型立规矩”,避免它自由发挥出一些离谱的结果。

4.5 启用工具调用,让模型真正能“动手”

光有对话还不够,关键一步是让模型能调用 HA 的服务。目前的民间方案主要有两种:

一是用Home Assistant 自带的“工具调用”能力,它会把 HA 里的Services暴露成类似函数的形式给模型调用;二是用/homeassistant的自定义工具插件,把turn_on、turn_off、set_brightness、climate.set_temperature等常用服务封装成工具,再用 JSON 格式返回执行结果。

我用的是第二种,因为它的控制粒度更细。模型会在对话过程中自动输出类似这样的“工具调用”:

{ "tool": "turn_on", "entity": "客厅电视", "arguments": { "source": "HDMI1" } }

然后我在 HA 里写了一个自动化,监听模型输出的 JSON 并执行对应服务。这一步是整个链路里最需要耐心的部分,但跑通一次之后,后面加设备就只是往列表里加个名字而已。

4.6 附上一个最小可跑的 YAML 自动化示例

下面这段是简化版的,展示的是“语音指令转工具调用”的最少链路。HA 的自动化配置里,我建了一个automation:

alias: R1 语音管家自动化入口 triggers: - trigger: conversation command: ["关灯", "开空调", "我回来了", "帮我安排早晨流程"] actions: - action: conversation.process data: agent_id: conversation.ollama text: > {{ trigger.text }}。请基于当前家庭状态,输出你要执行的工具调用列表, 格式为JSON数组,字段包括tool、entity、arguments。

然后配合一个接收工具调用的 script,比如:

alias: 执行R1工具调用 sequence: - choose: - conditions: - condition: template value_template: "{{ tool.tool == 'turn_on' }}" sequence: - service: homeassistant.turn_on target: entity_id: "{{ tool.entity_id }}"

这个写法不算最优,但足够你理解整个数据流:文本进入对话代理 → 模型生成工具调用 → HA 执行服务 → 返回值再喂给模型 → 模型组织语言反馈。理解了这个闭环,你自己就能在上面叠加任何想玩的场景。

5. 实测中踩过的坑:从“能跑”到“好用”之间的距离

5.1 小爱音箱和 HA 抢占唤醒词的世纪大战

我一开始天真地以为可以让小爱音箱全权负责收音,然后交给 HA 处理。结果发现小爱会在本地直接“截胡”一部分指令,特别是“关灯”“打开空调”这种包含米家标准技能词的命令,它本地就处理了,根本轮不到 R1 上场。更麻烦的是,没接 R1 之前它执行了也就执行了,现在两边各执行一次,灯就会亮了再被关掉。

解决办法是:把小爱音箱的“连续对话”和“场景自定义回复”全部关闭,把它的角色降级为纯麦克风+喇叭,所有语义理解交给 HA Assist。如果你有多台小爱,甚至可以让一台专门做广播通知,一台做收音,各司其职。

5.2 本地 7B 模型的思考速度:能忍,但得会设计提示词

7B 蒸馏版的优势是省资源,代价是复杂的多步推理能达到 5~8 秒才输出结果。你问一句“我回来了”,等 8 秒才开灯,体验很割裂。

我的办法是分层处理:

  • 简单命令(开关灯、调温度)不经过 R1。我在 HA 的对话管道之前加了一层意图匹配,直接用正则匹配“开/关/调高/调低”这类高频指令,命中后走 HA 原生意图引擎,毫秒级响应;
  • 复杂规划任务(编排流程、异常处理)才进 R1,等几秒无所谓,因为这类指令本身就不追求立刻反馈。

这个“快路径优先、慢路径兜底”的思路,比硬扛大模型推理延迟要实用得多。

5.3 entity_id 和别名不一致带来的调用错误

R1 在生成工具调用时,如果你在提示词里给它写的是“客厅灯”,但 HA 里实际名称是“客厅吸顶灯”,模型就可能调用失败。这不是模型笨,而是信息不一致。

踩了几次坑之后,我的解决方案是:在提示词里注入一份“设备索引”,格式如下:

可用设备列表: - 客厅灯(客厅,可调亮度,entity_id: light.living_room_lamp) - 主卧空调(主卧,变频冷暖,entity_id: climate.bedroom_ac) - 厨房水阀(厨房,开关型,entity_id: switch.kitchen_valve)

只要这份列表保持最新,模型调用准确率几乎能到 99%。每次新增设备后记得同步更新提示词,这是所有坑里最容易被忽略的。

5.4 隐私边界:本地和云端之间要有一条“隔离带”

我前面说本地方案隐私好,但真要敏感数据全本地处理,R1 蒸馏版的推理能力又不够强,所以不少人是混合用的。这里有一个原则我执行得比较严格:不可逆操作(开火、开锁、开水阀)永远走本地规则或本地模型,云端模型只允许生成“建议”而不是“执行权”。

具体落地方式是:云端的 R1 生成的决策必须先经过一个本地自动化“安全阀门”审查,审查通过才能执行。比如它说要半夜开厨房水阀,本地检查到当前无人且水压异常,直接拦截;涉及门锁的操作,一律只能关闭,不能远程打开。这套“云端思考、本地把关”的机制,能同时拿到满血推理能力和安全感。

5.5 设备固件和插件版本:mjsxj01cm 这类老设备的“魔改”体验

这里提一下热搜词里的“米家mjsxj01cm固件下载”。mjsxj01cm 是米家的一款老设备(常见的是早期的智能开关/传感器类硬件),我手里有一台同型号。Xiaomi Miot Auto 插件对老设备的兼容主要取决于设备实现的 MIoT 协议是否标准,如果你用默认策略拉不进 HA,建议先在插件的开发者模式里抓一下设备的属性列表,确认 token 和模型标识。

至于固件,不需要也不建议去下载所谓的“魔改固件”。米家设备本身通过官方 App 就能完成 OTA 升级,升完级之后,在 HA 里重新同步一次设备(删掉集成再重新添加,或者用 Miot Auto 的“重新加载”功能),大多数兼容性问题就能解决。老设备只要能同步出实体,R1 对它的控制和读状态逻辑跟新设备没有本质区别。

写在最后的一点个人体会

折腾这一套下来,我最大的感受并不是“技术多酷炫”,而是“米家生态的底层连接能力其实很扎实,只是缺了一个愿意动脑子的中间层”。DeepSeek R1 恰恰补上了这一环——它能读状态、能做推理、能生成工具调用,把原本分散在几十个设备里的自动化规则,收拢成一个可以和你自然对话的“家庭大脑”。

如果你打算自己动手,我的建议是先别想着一步到位全屋托管。挑三四个设备(一盏灯、一个空调、一个传感器、一个开关)先跑通链路,把提示词、工具调用、安全阀门都理顺,再逐步把更多设备接进来。这个过程不复杂,但会让你对“智能家居”这四个字有一个全新的理解。我现在已经习惯进门说一句“我回来了”,然后看着灯光、空调、加湿器依次自己动起来——这种感觉,米家原生 App 给不了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 7:55:43

基于SpringAI构建智能聊天机器人:从Prompt工程到Java EE整合实战

1. 项目整体设计与思路拆解1.1 这个项目到底在解决什么问题先说个很直白的感受:Java EE(或者说Spring Boot)开发者想接入大模型能力,市面上能直接参考的资料不少,但大多是“Hello World”级别的示例,调通接…

作者头像 李华
网站建设 2026/10/20 7:55:42

SQL注入之ORDER BY注入:Less-48无回显场景的报错与盲注实战

打sqli-labs打到第48关的人,多半已经对报错注入、布尔盲注这些基础操作很熟了。但Less-48有个特点,它不像前面那些关卡给你一个明显的“注入点”,而是一个藏在sort参数里的数字型ORDER BY注入,而且页面照常渲染数据,可…

作者头像 李华
网站建设 2026/10/20 10:00:03

SSM博物馆售票系统开发实战:从数据库设计到并发防超卖全解析

做毕业设计那会儿,我抽到的题目是一个JavaWeb方向的经典项目——博物馆售票管理系统。拿到题目的第一反应是“这有什么难的”,真正动手才发现,光是一个在线选票和库存扣减的逻辑,就能让新手纠结一整天。如果你也正在做类似的SSM项…

作者头像 李华
网站建设 2026/10/22 3:31:27

Transformer单轮对话机器人实战:从源码拆解到训练推理全流程

简介:基于Transformer模型训练的中文单轮对话聊天机器人项目,面向计算机、人工智能等专业学生及NLP初学者,可作为课程设计或毕业设计参考。压缩包共十三个文件,以六个Python源码文件为核心,覆盖数据预处理、词表生成、…

作者头像 李华