跳到主要内容

构建基于Qwen3-4B的智能家居轻量化模型

更新时间:2025-10-24 15:20:00
预置模型/数据集使用超便捷高性能GPU卡智能家居存储钜惠LoRA微调

随着物联网(IoT)技术的普及,智能家居设备控制逐渐向自然语言交互升级,但通用大模型在垂直场景(如设备指令解析、条件触发、复杂场景模式)中存在精度不足、响应延迟高和资源占用大的问题。在这种背景下,轻量级模型因其适配边缘设备和低延迟的优势,成为智能家居交互的核心需求。然而,这些模型面临“小参数量与高任务精度”和“有限数据与复杂场景覆盖”两大挑战。为此,本实践基于LLaMA Factory online平台,针对智能家居控制任务(设备开关、参数调节、条件触发、链式操作、场景模式)构建了从数据工程到模型生产化的完整流程,有效解决了轻量级模型在垂直场景中的性能瓶颈,提升了模型的精度和响应速度,满足了智能家居控制的实际需求。

模型微调前后,输出的家居控制指令效果对比如下所示。

模型原始数据集微调后的模型优化后的数据集微调后的模型
用户指令"半小时后请把空气净化器的风速调大到3档位""半小时后请把空气净化器的风速调大到3档位"
模型输出{"mcp_type": "iot","function": "control_device", "params": {"device_id": "purifier_bedroom_01", "level": 3}, "confirm": false}{"mcp_type": "sensor_trigger", "function": "create_automation", "params": {"trigger": {"type":"time_delay", "minutes":30}, "action": {"device_id": "purifier_bedroom_01", "arg": {"op": "control_device", "level":3}}}, "confirm": false}
分析指令解读: mcp_type:IoT 控制消息。function:设置风速。params:{设备ID,挡位:3}
评价:缺少延时条件,缺少相对调整量(delta),设备端无法确定要“设为多少”或“调多少”。
指令解读:mcp_type:IoT 控制消息。function:设置风速。params:{触发条件:30分钟后,动作:给出设备ID,风速减小1。}
评价:触发条件完整,风速相对调整量完整。

前提条件

  • 用户已经获取LLaMA Factory Online平台账户和密码,如果需要帮助或尚未注册,可参考注册账户完成注册。
  • 当前账号的余额充裕,可满足模型微调服务的需要。点击可了解最新的活动费用信息,或前往充值,如需了解更多请联系我们

操作步骤

配置概览

配置参数配置项是否预置说明
模型Qwen3-4B-Instruct经过指令微调,参数量约40亿 (4B),专为遵循指令任务优化。
数据集smart_home、smart_home_fixed否(提供下载链接)智能家居历史交互日志。
GPUH800*1(推荐)--
微调方法lora-显著降低计算与存储成本,兼具高性能与部署灵活性。

资源消耗预览

时长

使用推荐资源(H800*1)进行实例模式微调时微调过程总时长约2h20min。

数据集处理

  1. 下载原始数据集,该数据集来自智能家居历史交互日志。数据样本类型分布情况如下。

    指令类型数量问题
    iot-基础控制12747 条格式需规范、缺少 function 字段模糊指令操作失效
    sensor_trigger-条件判断3803 条条件判断失效
    chain-链式操作 需执行多个动作475 条链式操作失效
    sql-查询操作381 条-
    复杂场景:一设备,多参数328 条-
    optimization284 条-

    后续计划补充数据类型:

    指令类型数量来源说明
    复杂场景-延时执行+条件判断+多设备联动55AI大模型生成+人工标注
    异常指令500智能家居历史交互日志
  2. 统一数据格式。

    • 数据格式标准化。采用 Alpaca 格式,适配单轮指令任务。

      {
      "instruction": "用户指令(如“打开客厅空调”)",
      "input": "额外输入(可选,如设备状态)",
      "output": "JSON格式响应(含mcp_type、function、params字段)"
      }
      提示

      由于多轮对话复杂,超出本任务需求,故排除 ShareGPT 格式。

    • 在“output”中补全缺失的字段 “function”。点击下载脚本,使用脚本补全。

      进入LLaMA Factory Online平台,账号登录,进入实例空间页面,点击“开始微调”,选择“VScode处理专属数据”或“Jupyter处理专属数据”,进入工作空间后,新建终端,在命令行输入以下指令运行脚本,完成数据集的“funcion”字段补全。

      python3 /workspace/function_fixed.py  \
      -i /workspace/user-data/datasets/smart_home.json \
      -o /workspace/user-data/datasets/training_data_output.json \
      -r /workspace/user-data/datasets/missing_function_report.csv

      01

      提示
      • python3 后要写:脚本文件的路径
        -i 后写:待处理数据集的路径
        -o 后写:处理后的数据集存储路径
        -r 后写:输出的处理报告的存储路径
        用户需要把相应的路径替换成自己的真实路径。
      • 补全function的思路为:
        读取文件中 "instruction","input","output" 的样本,解析 output 里的 JSON 字符串;如果缺少 "function" 字段,就根据 instruction 文本 + device_id 前缀 + params 里的键自动补全一个合适的函数名(如 set_light_settings、set_humidifier_settings 等),然后把修改后的对象再写回到 output。
  3. 解决条件判断失效问题。
    针对条件判断失效的问题,使用以下规则改写。累计修改样本1,510 条。

    1. 命中"instruction"中“条件+动作”的指令(如果/若/当/當/的话/的話/分钟后/分鐘後/小时后/小時後),将“output”统一为:

      "mcp_type": "sensor_trigger",
      "function": "create_automation",
      "params": {
      "trigger": { ... },
      "action": { "device_id": "<原始device_id>", "arg": "<来自power/turn_on|turn_off>" }
      }
    2. 相对时间(如“一小时/一小時/半小时/半小時/五分鐘/十分钟/…后”):

      trigger 写成:{"time_after": "NhNmNs"},并支持中文数字转换,  
      例:
      一小时/一小時 → "1h"
      半小时/半小時 → "30m"
      五分钟/五分鐘 → "5m"
      十分钟/十分鐘 → "10m"
    3. 绝对时间(如“十点三十分/10:30/十點半/十點十分”):

      trigger 写成:{"time": "HH:MM"}(24小时制标准化)
    4. 比较条件(温度/湿度/PM2.5/CO₂/电量等 + 大于/小于/≥/≤/…):

      "trigger": {
      "temperature" | "humidity" | "pm25" | "co2" | "battery": { "operator": ">/</>=/<=", "value": <数值> }
      }
  4. 解决链式操作失效问题。
    命中"instruction"中连续操作的指令(如:“先...后.../并且/...然后”等),将“output”的“params”统一为:

    "params":{
    "trigger":{ }, 没有触发条件,"trigger"为空。
    "action": [{"device_id": " ", "command": "", "arg":{ }}, {"device_id": "", "command":" ", "arg":{ }}]}
  5. 解决模糊指令操作失效问题。
    命中"instruction"中表达模糊的指令(如:“调低一点” “加强” “调弱” “小一点”等),将“output”的“params”统一为:

    "params":{
    "trigger":{ }, 没有触发条件,"trigger"为空。
    "action": {"device_id": " ", "command": "", "arg":{ }}}

    其中:"arg" 参数,使其体现出明确的控制如:改成自动模式,或者 加参数\"delta\"
  6. 补充数据类型:复杂场景和异常指令。

  • 复杂场景——智能家居的复杂场景通常涉及多设备、多传感器、多协议的协同工作,结合用户行为、环境变化和个性化需求,提供智能化的生活体验。
    例如:

    • 睡眠模式,涉及环境光传感器、智能窗帘、空调控制、音响系统等; "instruction": "准备睡觉时,关闭所有灯光,调低卧室空调温度,播放助眠音乐。"
    • 老人/儿童看护模式,涉及运动传感器、摄像头、语音助手等。 "instruction": "监测老人的活动,若超过30分钟未检测到移动,发送提醒。"
  • 异常指令——指令由于格式不正确、设备不支持、指令不明确等原因导致执行失败。我们希望在实际应用中,系统应能够识别这些错误指令,并提供相应的错误信息和建议。 例如:

    {
    "instruction": "今天天气怎么样",
    "input": "",
    "output": "{\"error\": \"NOT_A_CONTROL_COMMAND\", \"message\": \"这是天气查询,不是设备控制\", \"suggestion\": \"请使用天气应用查询\"}"
    },

经过上述处理步骤,我们得到smart_home_fixed.json,包含 9352 条数据样例,涵盖“基础控制、条件判断、链式操作、SQL查询、复杂场景和异常指令”等场景的高质量数据集。

提示
  • 数据处理完后,将原始数据集 smart_home.json 和 优化后的数据集 smart_home_fixed.json 上传到“文件管理”,上传方法参考Jupyther上传SFTP上传
  • 数据上传后,进入LLaMA-Factory Online平台,点击“文件管理”,找到上传的smart_home.jsonsmart_home_fixed.json ,点击“数据集检测”完成数据配置。

模型训练

LLaMA Factory Online支持通过实例模式和任务模式运行微调任务,不同模式下的微调/评估操作详情如下所示。

  1. 进入LLaMA-Factory Online平台,点击“控制台”,进入控制台后点击左侧导航栏的“模型微调”进入页面。

  2. 选择基础模型和数据集,进行参数配置。

    • 本实践使用平台内置的Qwen3-4B-Instruct作为基础模型,数据集选择文件管理处的smart_home_fixed
    • 其他参数配置参考下图橙色框。参数选择逻辑见下表。
      参数取值选择依据
      lora参数
      lora_rank324B模型 + 中等任务复杂度,平衡性能与效率
      lora_alpha64经验值:2×lora_rank,保证梯度更新幅度
      lora_dropout0.05防止过拟合,适配中小样本量
      target_modulq_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj覆盖注意力层与 FFN 层,最大化微调效果
      biasnone减少参数数量,降低过拟合风险
      训练参数配置
      num_train_epochs43 轮欠拟合、5 轮过拟合,4 轮为最优平衡点
      per_device_train_batch_size480GB 显存适配,避免 OOM
      gradient_accumulation_steps4有效批次 = 4×4=16,模拟大批次训练
      learning_rate3e-5经 Grid Search 验证(1e-5 收敛慢、5e-5 震荡)
      lr_scheduler_typecosine余弦退火 + 0.1 warmup_ratio,稳定收敛
      weight_decay0.01抑制过拟合,保护预训练权重
      fp16true节省 50% 显存,提速 30%
      gradient_checkpointingTrue再省 30% 显存,代价是训练时间增加 10%
      evaluation_strategysteps每 200 步评估,及时发现过拟合
      load_best_model_at_endTrue保存最优模型,避免训练后期退化
    • 资源配置。推荐卡数为1卡。
    • 选择价格模式。本实践选择“极速尊享”,不同模式的计费说明参考计费说明
    • 开始训练。点击“开始训练”按钮,开始模型训练。

    开始微调

    提示

    配置模型与数据集后,系统将根据所需资源及其相关参数,动态预估任务运行时长及微调费用,您可在页面底部查看预估结果。

  3. 通过任务中心查看任务状态。 在左侧边栏选择”任务中心“,即可看到刚刚提交的任务。可以通过单击任务框,可查看任务的详细信息、超参数、训练追踪和日志。 开始微调

  4. 任务完成后,模型自动保存在"文件管理->模型->output"文件夹中。可在"任务中心->基本信息->模型成果"处查看保存路径。

    开始微调

  5. 进行模型评估。 点击页面左侧导航栏“模型评估”,进行评估训练配置。 微调模型选择上一步骤微调后的模型,评估数据集选择文件管理处:smart_home_fixed。其他参数设置见下图橙框。

    模型评估

    提示

    配置模型与数据集后,系统将根据所需资源及其相关参数,动态预估任务运行时长及微调费用,您可在页面底部查看预估结果。

  6. 可以在“任务中心->模型评估”下看到评估任务的运行状态。

    开始微调

  7. 点击swanapi图标,进入任务基本信息查看页面。用户可查看评估任务的基本信息、日志,评估结束后,可查看评估结果如下图所示。

    模型评估

    评估结果解读

    • predict_bleu-4: 72.3829,生成文本在短语层面与参考有良好重合,精确度较好。
    • predict_rouge-1: 76.2083,关键词覆盖良好,模型能命中参考中的大量关键字。
    • predict_rouge-2: 76.8263,局部短语连贯性较好,短语搭配合理。
    • predict_rouge-l: 82.4938,整体段落结构很接近参考。
      总结: 模型生成质量较好(BLEU/ROUGE 都在 70–82 范围,尤其 ROUGE-L 表现很强),但推理吞吐/速度一般(samples/sec ≈1),适合以质量为主的离线或低并发在线场景;若用于高并发在线服务需做推理优化或选更快的模型。
  8. 模型对话。

    • 点击左侧导航栏“模型对话”按钮进入模型对话页面。

    • 在微调模型处选择步骤3中显示的模型名称,如下图高亮①所示。点击开始右上角“开始对话”,跳出弹窗“LORA模型对话限时免费”,点击“开始对话”。

    • 在输入框中输入问题(高亮②),点击发送(高亮③);在对话框中查看对话详情,如下图高亮④所示。 模型评估

      模型输出结果解读

      用户指令"将卧室空气净化器的湿度设为2档""半小时后请把空气净化器的风速调小一点"
      模型输出{"mcp_type": "iot","function": "set_humidity", "params": {"device_id": "purifier_bedroom_01", "humidity": 2}, "confirm": false}{"mcp_type": "sensor_trigger", "function": "create_automation", "params": {"trigger": {"type":"time_delay", "minutes":30}, "action": {"device_id": "purifier_bedroom_01", "arg": {"op": "control_device", "level_delta":-1}}}, "confirm": false}
      指令解读 mcp_type:IoT 控制消息。function:设置湿度。params:{设备ID,湿度挡位:2}mcp_type:IoT 控制消息。function:创建自动化风速控制。params:{触发条件:30分钟后,动作:{给出设备ID,风速减小1。}}

总结

用户可通过LLaMA Factory Online平台预置的模型,使用本实践提供的数据集完成快速微调与效果验证。从上述实践案例可以看出,基于Qwen3-4B-Instruct模型,采用LoRA方法在优化后的smart_home_fixed数据集上进行指令微调后,模型输出指令在:条件判断指令、链式指令、模糊指令的处理上均有显著提升。

本实践构建了满足“小参数量与高任务精度”和“有限数据与复杂场景覆盖”要求的智能家居轻量化模型,提供了可复用的技术路径。本实践也验证了高质量数据的重要性(在质不在量),数据问题需 “精准修复” 而非 “盲目增强”。未来可扩展 ShareGPT 格式,适配 “上下文记忆” 需求。