智能家居AI智能体,AI应用架构师打造的智能化居家生活新境界
通过这篇文章,我们从架构师的视角,一步步搭建了一个能感知、能记忆、能决策、能执行感知层:用SDK和API收集设备数据;记忆层:用SQLite存储用户习惯;决策层:用“规则+机器学习”实现智能判断;执行层:用SDK控制设备;闭环整合:用定时任务让智能体自动运行。现在,你的智能家居不再是“各自为战的工具”,而是一个能理解你、配合你的“智能管家”——它会在你下班前打开空调,会在PM2.5超标时自动开净化
从0到1打造智能家居AI智能体:架构师视角的智能化生活落地指南
备选标题
- 《智能家居AI智能体实战:用架构思维构建你的私人智能管家》
- 《AI赋能居家生活:手把手搭建可扩展的智能家居智能体系统》
- 《告别“设备孤岛”:架构师教你做能“思考”的智能家居》
引言:你家的智能家居,其实可以更“聪明”
你有没有过这样的经历?
- 下班路上想打开家里的空调,却发现忘记提前设置;
- 晚上起夜摸黑找灯,结果碰倒了桌子上的水杯;
- 空调开了一下午,才发现窗户没关,电费账单瞬间“爆炸”;
- 家里的设备各自为战:灯光、空调、净化器明明都能联网,却从不会“互相配合”。
这不是你的问题——大多数智能家居设备,本质上只是“可远程控制的工具”,而不是“能理解你的智能体”。它们能执行你的指令,却不会主动思考:“现在用户需要什么?”“设备之间怎么协同更高效?”
今天,我要带你从架构师的视角,拆解智能家居AI智能体的核心逻辑,一步步搭建一个能“感知环境、记忆习惯、自主决策、联动设备”的智能系统。
读完这篇文章,你将学会:
- 理解智能家居AI智能体的“大脑架构”(感知-记忆-决策-执行);
- 用Python集成常见智能家居设备(小米、飞利浦等);
- 设计“记忆层”存储用户习惯,让智能体越用越懂你;
- 实现“规则+机器学习”的双决策引擎,让智能体既能“守规矩”又能“会学习”;
- 打造全场景联动(比如“下班回家”自动触发灯光+空调+音乐)。
准备工作:你需要这些“工具包”
在开始之前,先确认你已经具备以下基础:
1. 技术知识要求
- Python基础:能写简单的函数、调用第三方库(比如
requests
、sqlalchemy
); - API/协议常识:了解REST API、MQTT(可选,用于实时通信);
- 基础机器学习:知道什么是特征、标签,能跑通简单的
scikit-learn
模型(不需要深入算法原理)。
2. 环境与工具
- 硬件:至少1台支持联网的智能家居设备(比如小米空气净化器、飞利浦 Hue 灯);
- 软件:
- Python 3.8+(建议用Anaconda管理环境);
- 数据库:SQLite(轻量,适合入门)或PostgreSQL(生产用);
- 设备集成工具:Home Assistant(可选,快速对接多品牌设备);
- 后端框架:Flask/FastAPI(用于搭建设备API);
- 机器学习库:
scikit-learn
、pandas
(用于训练决策模型)。
核心实战:搭建智能家居AI智能体的“四大层”
智能家居AI智能体的核心架构,可以总结为**“感知-记忆-决策-执行”四大层**——这和人类的行为逻辑几乎一致:
- 感知层:像“眼睛耳朵”,收集设备状态、环境数据(比如PM2.5、温度、用户位置);
- 记忆层:像“大脑海马体”,存储用户的行为习惯(比如“每天18点开空调”“喜欢26℃”);
- 决策层:像“大脑皮层”,根据感知到的信息和记忆的习惯,做出决策(比如“现在PM2.5超标,应该开净化器”);
- 执行层:像“手脚”,把决策转化为设备操作(比如发送“打开净化器”的指令)。
步骤一:感知层——让智能体“看见”你的家
感知层的核心是收集数据:包括设备自身的状态(比如空调是否开机)、环境数据(比如温度、湿度)、用户状态(比如是否在家)。
1.1 选择设备接入方式
常见的设备接入方式有两种:
- 直接调用设备SDK:比如小米设备用
miio
库,飞利浦 Hue 用phue
库; - 通过Home Assistant集成:Home Assistant是一个开源的智能家居平台,支持几乎所有主流品牌(小米、华为、苹果、亚马逊),适合快速对接多设备。
我们先从直接调用SDK开始(更基础,容易理解)。
1.2 实战:用miio
获取小米空气净化器数据
以小米空气净化器为例,首先安装miio
库:
pip install python-miio
然后编写代码连接设备:
# 1. 导入库
from miio import AirPurifierMiot
# 2. 初始化设备(需要设备IP和Token)
# 如何获取Token?参考:https://github.com/rytilahti/python-miio/blob/master/docs/tokens.md
purifier = AirPurifierMiot(
ip="192.168.31.100", # 你的设备IP(在路由器后台查看)
token="xxxxxx" # 设备的Token
)
# 3. 获取设备数据
pm25 = purifier.pm25() # PM2.5值(μg/m³)
temperature = purifier.temperature() # 温度(℃)
humidity = purifier.humidity() # 湿度(%)
mode = purifier.mode() # 运行模式(auto/睡眠/强力)
print(f"当前环境:PM2.5={pm25},温度={temperature}℃,湿度={humidity}%,模式={mode}")
运行这段代码,你会看到类似这样的输出:
当前环境:PM2.5=45,温度=25℃,湿度=58%,模式=auto
1.3 用Flask搭建感知层API
为了让后续的决策层能方便调用数据,我们用Flask把设备数据封装成API:
from flask import Flask, jsonify
from miio import AirPurifierMiot
app = Flask(__name__)
# 初始化设备(全局对象,避免重复连接)
purifier = AirPurifierMiot("192.168.31.100", "xxxxxx")
# 定义API接口:获取空气净化器数据
@app.route("/api/air_purifier/status")
def get_air_purifier_status():
status = {
"pm25": purifier.pm25(),
"temperature": purifier.temperature(),
"humidity": purifier.humidity(),
"mode": purifier.mode().value # .value转换为字符串(比如"auto")
}
return jsonify(status)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
启动Flask服务后,访问http://localhost:5000/api/air_purifier/status
,会得到JSON格式的设备数据:
{
"pm25": 45,
"temperature": 25,
"humidity": 58,
"mode": "auto"
}
为什么要做API?
因为后续的决策层可能运行在另一个服务(比如机器学习服务),或者需要被前端调用(比如手机APP查看状态),API是跨服务通信的标准方式。
步骤二:记忆层——让智能体“记住”你的习惯
感知层解决了“看得到”的问题,接下来要解决“记得住”:存储用户的行为习惯,比如“每天18点打开空调”“喜欢把温度设为26℃”“周末早上9点开窗帘”。
2.1 设计记忆层的数据结构
用户的行为数据需要包含以下核心字段:
user_id
:用户唯一标识(比如“user_001”);device_type
:设备类型(比如“air_purifier”“air_conditioner”);action
:用户执行的操作(比如“turn_on”“set_temperature”);params
:操作的参数(比如{"temperature": 26}
);timestamp
:操作时间(用于分析习惯)。
我们用SQLite数据库存储这些数据(轻量,不需要额外安装),用SQLAlchemy
做ORM(对象关系映射,不用写SQL语句)。
2.2 实战:用SQLAlchemy搭建记忆层
首先安装依赖:
pip install sqlalchemy
然后编写模型代码(models.py
):
from sqlalchemy import create_engine, Column, Integer, String, JSON, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime
# 1. 初始化Base类(所有模型的父类)
Base = declarative_base()
# 2. 定义UserBehavior模型(用户行为表)
class UserBehavior(Base):
__tablename__ = "user_behavior" # 数据库表名
# 主键ID(自动递增)
id = Column(Integer, primary_key=True, autoincrement=True)
# 用户ID(比如"user_001")
user_id = Column(String(50), nullable=False)
# 设备类型(比如"air_purifier")
device_type = Column(String(50), nullable=False)
# 操作类型(比如"turn_on")
action = Column(String(50), nullable=False)
# 操作参数(JSON格式,比如{"temperature": 26})
params = Column(JSON, nullable=False)
# 操作时间(默认当前时间)
timestamp = Column(DateTime, default=datetime.utcnow)
# 3. 初始化数据库连接
engine = create_engine("sqlite:///smart_home.db") # 数据库文件:smart_home.db
# 创建所有表(如果不存在)
Base.metadata.create_all(engine)
# 创建会话(用于操作数据库)
Session = sessionmaker(bind=engine)
session = Session()
2.3 存储用户行为示例
当用户执行某个操作(比如“打开空调”),我们把这个行为存储到数据库:
from models import UserBehavior, session
# 模拟用户操作:打开空调,设置温度26℃
user_behavior = UserBehavior(
user_id="user_001",
device_type="air_conditioner",
action="set_temperature",
params={"temperature": 26}
)
# 插入数据库
session.add(user_behavior)
session.commit()
print("用户行为已存储!")
为什么要存储这些数据?
因为后续的机器学习模型需要用这些数据训练——比如分析“用户在什么时间、什么环境下会开空调”,从而自动预测用户的需求。
步骤三:决策层——让智能体“学会思考”
决策层是智能体的“大脑”,核心是根据感知到的信息和记忆的习惯,做出正确的决策。
我们采用**“规则引擎+机器学习”的双引擎模式**:
- 规则引擎:处理明确的、必须遵守的逻辑(比如“PM2.5>75时必须开净化器”“家里没人时必须关所有灯”);
- 机器学习:处理模糊的、需要学习的逻辑(比如“用户喜欢在18点把空调设为26℃”“周末早上9点开窗帘”)。
3.1 规则引擎:先让智能体“守规矩”
规则引擎是最基础的决策逻辑,用if-else就能实现。比如:
def rule_based_decider(env_data):
"""
规则引擎:根据环境数据做出决策
env_data:感知层获取的环境数据(比如{"pm25": 80, "temperature": 28, "humidity": 70})
返回:需要执行的动作列表(比如[{"device_type": "air_purifier", "action": "turn_on"}])
"""
actions = []
# 规则1:PM2.5>75时,打开空气净化器(自动模式)
if env_data["pm25"] > 75:
actions.append({
"device_type": "air_purifier",
"action": "turn_on",
"params": {"mode": "auto"}
})
# 规则2:温度>28℃且湿度>60%时,打开空调(制冷26℃)
if env_data["temperature"] > 28 and env_data["humidity"] > 60:
actions.append({
"device_type": "air_conditioner",
"action": "set_mode",
"params": {"mode": "cool", "temperature": 26}
})
# 规则3:晚上22点后,关闭所有灯光
if env_data["hour"] >= 22:
actions.append({
"device_type": "light",
"action": "turn_off",
"params": {"all": True}
})
return actions
3.2 机器学习:让智能体“会学习”
规则引擎能处理明确的逻辑,但无法应对“个性化习惯”——比如用户A喜欢18点开空调,用户B喜欢19点开。这时候需要用机器学习模型分析用户的历史行为,预测用户的需求。
我们用scikit-learn
训练一个决策树模型,预测“用户是否需要开空调”。
3.2.1 准备训练数据
首先,我们需要用户的历史行为数据(来自记忆层的user_behavior
表)。假设我们已经收集了以下数据:
hour(时间) | humidity(湿度) | pm25(PM2.5) | air_con_on(是否开空调) |
---|---|---|---|
18 | 65 | 50 | 1 |
19 | 70 | 60 | 1 |
20 | 75 | 70 | 1 |
21 | 80 | 80 | 0 |
22 | 85 | 90 | 0 |
说明:air_con_on
是标签(1=开,0=不开),其他字段是特征。
3.2.2 训练决策树模型
编写代码训练模型:
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 1. 加载数据(这里用模拟数据,实际从数据库读取)
data = pd.DataFrame({
"hour": [18, 19, 20, 21, 22],
"humidity": [65, 70, 75, 80, 85],
"pm25": [50, 60, 70, 80, 90],
"air_con_on": [1, 1, 1, 0, 0]
})
# 2. 拆分特征(X)和标签(y)
X = data[["hour", "humidity", "pm25"]]
y = data["air_con_on"]
# 3. 拆分训练集和测试集(80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 4. 训练决策树模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
# 5. 测试模型 accuracy(准确率)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率:{accuracy:.2f}") # 输出:1.0(因为数据量小,实际中会更低)
3.2.3 用模型做预测
训练好模型后,就可以用它预测用户的需求了:
def ml_based_decider(env_data, model):
"""
机器学习引擎:用模型预测用户需求
env_data:环境数据(比如{"hour": 19, "humidity": 70, "pm25": 60})
model:训练好的决策树模型
返回:需要执行的动作列表
"""
actions = []
# 提取特征(注意顺序要和训练时一致)
features = [env_data["hour"], env_data["humidity"], env_data["pm25"]]
# 预测是否开空调(1=开,0=不开)
prediction = model.predict([features])[0]
if prediction == 1:
actions.append({
"device_type": "air_conditioner",
"action": "set_mode",
"params": {"mode": "cool", "temperature": 26}
})
return actions
3.3 整合双引擎:规则+机器学习
把规则引擎和机器学习引擎结合起来,得到最终的决策:
def smart_decider(env_data, model):
"""
智能决策:整合规则引擎和机器学习引擎
"""
# 先执行规则引擎(必须遵守的逻辑)
actions = rule_based_decider(env_data)
# 再执行机器学习引擎(个性化习惯)
ml_actions = ml_based_decider(env_data, model)
# 合并动作(避免重复)
actions.extend([action for action in ml_actions if action not in actions])
return actions
步骤四:执行层——让智能体“动手做事”
决策层输出了“要做什么”,执行层需要把这些决策转化为设备的实际操作(比如“打开空调”“关闭灯光”)。
4.1 实战:用SDK控制设备
以小米空调为例,用miio
库控制设备:
首先安装miio
库(如果没装的话):
pip install python-miio
然后编写控制函数:
from miio import AirPurifierMiot, AirConditionerMiot
def execute_action(action):
"""
执行动作:根据action控制对应的设备
action:决策层输出的动作(比如{"device_type": "air_purifier", "action": "turn_on", "params": {"mode": "auto"}})
"""
device_type = action["device_type"]
action_name = action["action"]
params = action.get("params", {})
try:
# 1. 初始化设备(根据device_type)
if device_type == "air_purifier":
device = AirPurifierMiot("192.168.31.100", "xxxxxx")
elif device_type == "air_conditioner":
device = AirConditionerMiot("192.168.31.101", "yyyyyy") # 空调的IP和Token
else:
print(f"不支持的设备类型:{device_type}")
return
# 2. 执行动作(根据action_name)
if action_name == "turn_on":
device.on()
print(f"已打开{device_type}")
elif action_name == "turn_off":
device.off()
print(f"已关闭{device_type}")
elif action_name == "set_mode":
mode = params.get("mode", "auto")
device.set_mode(mode)
print(f"已将{device_type}设置为{mode}模式")
elif action_name == "set_temperature":
temperature = params.get("temperature", 26)
device.set_temperature(temperature)
print(f"已将{device_type}温度设置为{temperature}℃")
else:
print(f"不支持的动作:{action_name}")
except Exception as e:
print(f"执行动作失败:{str(e)}")
4.2 测试执行层
调用execute_action
函数,测试是否能控制设备:
# 测试动作:打开空气净化器(自动模式)
test_action = {
"device_type": "air_purifier",
"action": "turn_on",
"params": {"mode": "auto"}
}
execute_action(test_action)
如果一切正常,你会看到空气净化器启动,并输出:
已打开air_purifier
步骤五:闭环整合——让智能体“自动运行”
现在,我们已经有了感知层(收集数据)→ 记忆层(存储习惯)→ 决策层(做判断)→ 执行层(做动作)的完整流程,接下来要把这些环节串起来,让智能体自动运行。
5.1 编写闭环运行逻辑
我们用定时任务(每5分钟运行一次)实现自动流程:
import time
from flask import Flask
from miio import AirPurifierMiot, AirConditionerMiot
from models import UserBehavior, session
from deciders import smart_decider, model # 假设deciders.py里有smart_decider和训练好的model
app = Flask(__name__)
# 初始化设备
purifier = AirPurifierMiot("192.168.31.100", "xxxxxx")
ac = AirConditionerMiot("192.168.31.101", "yyyyyy")
def get_environment_data():
"""
获取环境数据(感知层)
"""
return {
"pm25": purifier.pm25(),
"temperature": ac.temperature(),
"humidity": ac.humidity(),
"hour": time.localtime().tm_hour # 当前小时(比如18)
}
def run_smart_home():
"""
智能家庭主循环:每5分钟运行一次
"""
while True:
try:
# 1. 感知:获取环境数据
env_data = get_environment_data()
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 环境数据:{env_data}")
# 2. 决策:生成动作列表
actions = smart_decider(env_data, model)
if not actions:
print("没有需要执行的动作")
time.sleep(300)
continue
# 3. 执行:执行所有动作
for action in actions:
execute_action(action)
# 4. 记忆:存储用户行为(模拟用户同意的情况下)
user_behavior = UserBehavior(
user_id="user_001",
device_type=action["device_type"],
action=action["action"],
params=action["params"]
)
session.add(user_behavior)
# 提交数据库事务
session.commit()
print(f"执行完成,共{len(actions)}个动作")
except Exception as e:
print(f"运行出错:{str(e)}")
session.rollback() # 出错时回滚数据库
# 等待5分钟(300秒)
time.sleep(300)
if __name__ == "__main__":
# 启动Flask API(用于查看状态)
from threading import Thread
Thread(target=run_smart_home).start()
app.run(host="0.0.0.0", port=5000, debug=True)
5.2 测试闭环流程
运行这段代码,你会看到智能体每5分钟自动执行一次:
- 获取环境数据;
- 生成决策动作;
- 执行动作(比如打开净化器);
- 存储行为到数据库。
进阶探讨:让智能体更“聪明”的技巧
1. 用MQTT实现实时通信
前面的例子用的是REST API(轮询)获取数据,延迟较高。MQTT是一种轻量级的发布/订阅协议,适合实时通信(比如设备状态变化时立即通知智能体)。
用paho-mqtt
库实现MQTT:
import paho.mqtt.client as mqtt
import json
# MQTT Broker配置(可以用公共Broker,比如test.mosquitto.org)
MQTT_BROKER = "test.mosquitto.org"
MQTT_PORT = 1883
MQTT_TOPIC = "smart_home/#" # 订阅所有smart_home开头的主题
def on_connect(client, userdata, flags, rc):
print(f"MQTT连接成功,返回码:{rc}")
client.subscribe(MQTT_TOPIC)
def on_message(client, userdata, msg):
print(f"收到MQTT消息:{msg.topic} → {msg.payload.decode()}")
# 处理消息(比如更新环境数据)
if msg.topic == "smart_home/air_purifier/pm25":
pm25 = float(msg.payload.decode())
# 更新env_data中的pm25值
# 初始化MQTT客户端
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(MQTT_BROKER, MQTT_PORT, 60)
# 启动MQTT循环(非阻塞)
client.loop_start()
# 发布消息示例(比如发送“打开净化器”的指令)
def publish_action(action):
topic = f"smart_home/{action['device_type']}/{action['action']}"
payload = json.dumps(action["params"])
client.publish(topic, payload, qos=1)
2. 封装通用图表组件(可选)
如果你的智能体需要前端展示数据(比如手机APP查看PM2.5),可以用React
+Chart.js
封装通用图表组件(参考我之前的文章《从零到一:用React和Chart.js打造你的第一个交互式图表》)。
3. 性能优化:边缘计算
如果你的智能体需要处理大量数据(比如几百个设备),可以把决策层部署在边缘设备(比如树莓派),减少云端的延迟和带宽消耗。用TensorFlow Lite
将机器学习模型转换为边缘设备支持的格式:
import tensorflow as tf
# 加载训练好的模型
model = tf.keras.models.load_model("air_con_model.h5")
# 转换为TensorFlow Lite模型
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# 保存模型到文件
with open("air_con_model.tflite", "wb") as f:
f.write(tflite_model)
总结:你已经拥有了一个“会思考”的智能家
通过这篇文章,我们从架构师的视角,一步步搭建了一个能感知、能记忆、能决策、能执行的智能家居AI智能体:
- 感知层:用SDK和API收集设备数据;
- 记忆层:用SQLite存储用户习惯;
- 决策层:用“规则+机器学习”实现智能判断;
- 执行层:用SDK控制设备;
- 闭环整合:用定时任务让智能体自动运行。
现在,你的智能家居不再是“各自为战的工具”,而是一个能理解你、配合你的“智能管家”——它会在你下班前打开空调,会在PM2.5超标时自动开净化器,会在你起夜时打开夜灯……
行动号召:动手搭建你的智能体!
- 第一步:找一台支持联网的设备(比如小米空气净化器),用
miio
库连接它; - 第二步:写一个简单的规则引擎(比如“PM2.5>75时开净化器”);
- 第三步:收集几天的用户行为数据,训练一个简单的机器学习模型;
- 第四步:把所有环节串起来,让智能体自动运行!
如果在实践中遇到问题,欢迎在评论区留言——我会第一时间回复你。也欢迎分享你的成果(比如“我的智能体学会了自动开窗帘”),让我们一起打造更聪明的家!
最后,送你一句话:智能家居的本质,是“让技术服务于人”。愿你的智能体,能让你的生活更轻松、更温暖。
—— 一个热爱智能家居的架构师
2024年X月X日
更多推荐
所有评论(0)