在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、前言思考

1.1 智慧生活的"决策"本质

智能家居、智慧办公、健康监测,本质都是同一个问题:基于传感器数据做决策并执行

  • 家里温度 28℃ + 有人在客厅 → 决策:开空调 26℃;
  • 会议室 14:00 有预定 + 灯光暗 → 决策:提前开灯调亮;
  • 心率连续 5 分钟 > 100 + 用户在运动 → 决策:不打扰,只记录。

传统方案是"规则硬编码",阈值写死、场景写死,稍微复杂就维护不下去。AI 场景化的核心是把决策链路做成可感知、可学习、可自动化的闭环。

1.2 决策链路的五个环节

数据采集 → 数据融合 → 规则+AI混合决策 → 场景自动化执行 → 用户反馈学习

二、底层原理

2.1 数据采集层(Sensor Kit)

鸿蒙 Sensor Kit 提供统一传感器接口:

传感器 数据 场景
温度/湿度 环境温湿度 空调/加湿器联动
光照 环境照度(lux) 灯光自动调节
加速度/陀螺仪 运动状态 跌倒检测/运动识别
心率 心率(ppm) 健康监测/睡眠分析
麦克风(声音事件) 声音事件(婴儿哭/门铃) 家庭安防
位置 位置变化 回家/离家场景

关键设计:传感器数据统一抽象——不管底层是哪个传感器,上层拿到的是统一的"数据流 + 时间戳 + 置信度"。

2.2 数据融合:多源数据合成为一个事实

单传感器不可靠:光传感器被手挡住就误判"天黑"。数据融合 = 多传感器交叉验证:

场景: 判断"用户在家"
├─ 位置传感器: 在家 15 分钟前已到达 (权重 0.6)
├─ 门磁传感器: 已关门 (权重 0.3)
├─ 摄像头人体检测: 客厅有人 (权重 0.5)
└─ 融合结果: 在家 (置信度 0.87) > 阈值 0.7 → 判定在家

融合算法:加权投票、贝叶斯推理、或 D-S 证据理论。端侧用加权投票就够,规则透明可解释。

2.3 规则引擎 + AI 混合决策

纯规则死板,纯 AI 黑盒。工程上采用混合决策

输入特征
  │
  ▼
规则引擎(可解释, 硬约束)
  ├─ 温度 > 30℃ → 必开空调 (硬规则, 优先级最高)
  ├─ 用户手动关闭 → 3小时内不自动开启 (用户意志优先)
  │
  ▼
AI 模型(学习, 软决策)
  ├─ 预测用户舒适温度区间
  ├─ 预测回家时间, 提前预调
  │
  ▼
决策仲裁: 规则兜底 + AI 优化
场景 谁决策
安全类(火灾、燃气泄漏) 规则硬决策,AI 不干预
舒适类(温度、灯光) AI 优化 + 规则上限保护
个性化类(音乐、推荐) 纯 AI 决策

2.4 场景自动化执行

决策输出 → 动作执行。动作包括:

  • 拉起应用/服务(开空调 App);
  • 控制 IoT 设备(智能插座);
  • 发送通知卡片(提醒用户);
  • 联动其他场景(离家 → 关灯 + 关空调 + 布防)。

执行要求幂等 + 可回滚 + 可确认:同样的决策重复执行不产生副作用。

三、实战落地

3.1 传感器数据采集

import { sensor } from '@kit.SensorServiceKit';

// 1. 订阅温度传感器(低功耗采样)
const tempSub = sensor.onSensorEvent(sensor.SensorId.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,
  (data: sensor.AmbientTemperatureResponse) => {
    this.lastTemp = data.temperature;
    this.feedToDecisionEngine('temperature', data.temperature, Date.now());
  }, { interval: 5000 });   // 5秒一次,低频省电

// 2. 订阅人体存在检测(若设备支持)
sensor.onSensorEvent(sensor.SensorId.SENSOR_TYPE_ID_WEAR_DETECTION,
  (data) => {
    this.feedToDecisionEngine('human_present', data.value === 1 ? 1 : 0, Date.now());
  }, { interval: 1000 });

3.2 数据融合 + 场景判定

interface SensorReading {
  type: string;
  value: number;
  ts: number;
  weight: number;
}

// 融合判定"用户在客厅"
function isUserInLivingRoom(readings: SensorReading[]): { result: boolean, confidence: number } {
  let score = 0;
  let totalWeight = 0;
  for (const r of readings) {
    if (r.ts < Date.now() - 60000) continue;   // 忽略1分钟前的旧数据
    const signal = signalFor(r);                // 每种传感器转成 0~1 的信号强度
    score += signal * r.weight;
    totalWeight += r.weight;
  }
  const confidence = totalWeight > 0 ? score / totalWeight : 0;
  return { result: confidence > 0.7, confidence: confidence };
}

3.3 规则 + AI 混合决策引擎

class DecisionEngine {
  // 1. 规则层(硬约束)
  private applyRules(ctx: Context): Action | null {
    // 安全规则: 温度>35℃ 强制降温
    if (ctx.temperature > 35) {
      return { device: 'ac', command: 'on', target: 26, priority: 100 };
    }
    // 用户手动覆盖: 3小时内不再自动
    if (ctx.userOverrideWithin3h('ac')) return null;
    return null;
  }

  // 2. AI 层(软决策)
  private aiPredict(ctx: Context): Action | null {
    const comfortTemp = this.comfortModel.predict({
      hour: ctx.hour,
      temp: ctx.temperature,
      userProfile: ctx.userProfile
    });  // 预测用户舒适温度
    if (Math.abs(comfortTemp - ctx.temperature) > 2) {
      return { device: 'ac', command: 'set', target: comfortTemp, priority: 50 };
    }
    return null;
  }

  // 3. 仲裁
  decide(ctx: Context): Action[] {
    const actions: Action[] = [];
    const ruleAction = this.applyRules(ctx);
    if (ruleAction) actions.push(ruleAction);
    else {
      const aiAction = this.aiPredict(ctx);
      if (aiAction) actions.push(aiAction);
    }
    return actions;
  }
}

3.4 场景自动化执行 + 反馈学习

// 1. 执行动作
async function executeActions(actions: Action[]) {
  for (const a of actions) {
    await deviceManager.control({ deviceId: a.device, command: a.command, params: a });
    logAction(a);   // 记录动作日志,供学习
  }
}

// 2. 用户反馈采集(强化学习信号)
// 用户手动调了温度 → 说明 AI 决策偏差 → 更新舒适模型
function onUserAdjust(device: string, userValue: number) {
  const ctx = getContextSnapshot();
  comfortModel.update({
    features: [ctx.hour, ctx.temperature, ctx.userProfile],
    label: userValue     // 用户真实偏好
  });
  LoggerUtil.info(TAG, 'AI 模型已学习用户偏好: ' + userValue);
}

四、性能排查与优化

问题 表现 优化手段
传感器耗电 7×24 采样掉电快 低频采样、事件触发式、VAD 前置
决策延迟 场景响应慢 预计算、边触发边决策
误决策 错误触发动作 融合置信度门槛、规则上限、用户覆盖
反馈缺失 模型学不到东西 动作日志 + 用户调整记录埋点
联动风暴 一个场景触发连环 动作幂等 + 防抖 + 依赖图控制

4.1 传感器功耗:事件触发优先

能事件触发就不用轮询:

// 门磁/人体传感器用事件触发
sensor.onSensorEvent(sensor.SensorId.SENSOR_TYPE_ID_HUMAN,
  (data) => { handleHumanEvent(data); }, { trigger: 'event' });
// 温度才用低频轮询

4.2 决策防抖

同一场景 5 分钟内不重复执行相同动作:

const lastAction = { time: 0, signature: '' };
function isDup(action: Action): boolean {
  const sig = action.device + action.command + action.target;
  if (sig === lastAction.signature && Date.now() - lastAction.time < 5 * 60 * 1000) {
    return true;
  }
  lastAction.signature = sig;
  lastAction.time = Date.now();
  return false;
}

五、总结

  1. 智慧生活的本质是感知 → 融合 → 决策 → 执行 → 学习的闭环。
  2. 数据融合是决策质量的基石:单传感器不可靠,多源交叉验证才可信。
  3. 规则 + AI 混合是工程最优解:安全靠规则硬约束,舒适靠 AI 优化,用户意志永远优先。
  4. 反馈学习让系统越用越聪明:用户每次手动调整都是免费标注数据。

一句话记住:规则保底线,AI 提体验,反馈促进化,防抖防风暴。


🚀 演示功能优化(随项目同步更新)

本文对应的 ArkTS 演示页面已随项目整体优化,主要改进:

  1. 独立主题风格:暖木家居 · 米白木质圆角,与其余章节演示页明显区分,不再千篇一律。
  2. 步骤回放动画:点击演示按钮后,结果行按 260~320ms/步 逐步展示,模拟真实推理过程。
  3. 运行态保护:演示过程中按钮置灰防重复触发,页面退出自动清理定时器。
  4. 结果摘要:演示结束后自动给出「一句话结论」,并 Toast 提示完成。
  5. AI 对话演示:新增 AiChatDemo(根目录 main.py 的 ArkTS 移植),真实 SSE 流式大模型请求,首页「★ AI Chat 流式对话演示」可进入。

对应页面:entry/src/main/ets/pages/AiSceneDemo.ets


🧪 演示优化:真实 AI 推理接入(v3)

本演示页顶部新增 AI 场景管家主卡,点击即真实调用云端大模型(SSE 流式),不再是纯模拟回放:

  • 请求链路utils/AiClient.ets(ArkTS 封装 OpenAI 兼容接口)→ POST https://api-ai.gitcode.com/v1/chat/completions,模型 deepseek-ai/DeepSeek-V4-Flash,流式 stream: true
  • 演示场景:场景理解 / 设备联动 / 习惯学习 —— 每个场景绑定不同智慧家居 AI 专家 Prompt,返回内容各有差异
  • 交互体验:进入页面自动触发一次真实推理;点场景标签切换并重新请求;按钮手动触发;输出区打字机流式展示
  • 真实标识:卡片右上角 LIVE 徽标 + 端点/模型名水印,保证"所见即所调"
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐