在智能家居場景中,我們經常遇到這樣的尷尬:
你説:“把燈打開。” —— 它可以執行。
你説:“如果檢測到漏水,就把水閥關了併發個通知。” —— 它可能聽不懂了。
你説:“有點冷,把空調調高一點。” —— 它問你:“一點是多少?”
在物聯網(IoT)時代,我們希望智能家居不僅僅是“遙控器”,而是能聽懂人話的“管家”。
我們測試了市面上幾款主流大模型——它們的回答五花八門,有的直接調風速但忘了時間設置,有的創建了時間觸發卻丟失了條件判斷,甚至還有把指令誤解為“設定鬧鐘”的。真正能完美解析出“延時+條件+多參數”三重嵌套指令的模型,鳳毛麟角。
今天,我們將通過一次完整的實戰,展示如何基於 LLaMA Factory Online 平台,利用高質量數據清洗和微調,讓輕量級的 Qwen3-4B 模型在智能家居垂直場景下,不僅能聽懂“把風速調小一點”這種模糊指令,還能處理“檢測到漏水即關閉水閥”的複雜鏈式操作。
效果對比:微調前 vs 微調後
在開始硬核教程前,我們先來看看微調後的模型到底變聰明瞭多少。
場景一:條件觸發- 從“被動響應”到“主動感知”
場景描述:傳統智能家居本質是“語音遙控器”,用户不開口,設備不工作;微調後的模型具有主觀能動性,它不僅僅是執行者,更是決策者,能夠基於傳感器數據(時間、温度、光線、氣體濃度等)的變化,自主決策並觸發相應的設備控制,如空調、新風、窗簾等設備,動態維持環境的最佳狀態,實現真正的“空間智能”。
用户指令:"半小時後請把空氣淨化器的風速調大到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。}評價:觸發條件完整,風速相對調整量完整。
|
場景二:鏈式操作-從“單點控制”到“邏輯編排”
場景描述:通過微調優化模型的邏輯推理與任務規劃能力,將單一的指令轉化為一系列具有邏輯依賴關係的設備協同動作。用户無需逐個下達指令(如“打開電視”、“拉上窗簾”、“調暗燈光”),只需表達最終目的,中間的步驟由模型自動補全。
用户指令:"當檢測到漏水時,關閉水閥併發送通知"
|
微調前後
|
原始數據集微調後的模型
|
優化後的數據集微調後的模型
|
|
模型輸出
|
{"mcp_type": "iot", "function": "handle_emergency", "params": {"device_id": "water_heater_01", "action": "emergency_stop"}, "confirm": false}
|
{"mcp_type": "sensor_trigger", "function": "create_automation", "params": {"trigger": {"water_leak_sensor_01": "leak"}, "action": [{"device_id": "water_valve_main_01", "arg": {"status": "close"}}, {"device_id": "notifier_01", "arg": {"message": "檢測到漏水,請立即處理"}}]}}
|
|
分析與評價
|
指令解讀:mcp_type: IoT 控制消息。function: 處理緊急情況。params: {給出水閥ID,動作:緊急停止}評價:缺少發送通知的動作。
|
指令解讀:mcp_type: 條件觸發類型。function: 創建自動化。params: {觸發條件:傳感器檢測到漏水,動作:[關閉水閥],[發送通知]}評價:觸發條件完整,步驟完整。
|
場景三:模糊指令-從“機械匹配”到“意圖理解”
場景描述:將用户口語化、情緒化甚至表述不清的指令準確解析並映射為具體的設備控制參數,用户不再需要記憶特定的喚醒詞或參數(如“空調調到24度”),而是可以用人類自然的交流方式(如“我有點冷”、“這裏太吵了”)與系統對話。由微調後的模型賦能的系統不再是冷冰冰的機器,而是能聽懂“言外之意”的貼心管家,極大地提升了交互的流暢度和用户的滿意度。
用户指令:"三樓空調温度調小一點"
|
微調前後
|
原始數據集微調後的模型
|
優化後的數據集微調後的模型
|
|
模型輸出
|
{"mcp_type": "iot", "function": "set_temperature", "params": {"device_id": "ac_bedroom_01"}, "confirm": false}
|
{"mcp_type": "iot", "function": "set_temperature", "params": {"device_id": "ac_bedroom_01", "delta": -1}}
|
|
分析與評價
|
指令解讀:mcp_type: IoT 控制消息。function: 設置温度。params: {空調ID}評價:用户指令為“調小一點”,未要求具體温度,為模糊指令;模型輸出缺失調小温度的動作。
|
指令解讀:mcp_type: IoT 控制消息。function: 設置温度。params: {設備ID,温度調低一度}評價:滿足用户指令,温度減小1度。
|
環境準備:搭建端到端的AI訓練流水線
本實踐包含智能家居“數據處理-基礎模型選型-參數調優-微調訓練-模型效果評估”完整鏈路,需要單獨創建一個python環境,並配置需要的工具。
1.下載 SmartHome 壓縮文件
該文件中包含後續處理數據、模型功能測試等步驟所需的數據集和腳本。
進入 LLaMA Factory Online 平台,創建實例(選擇CPU資源2核即可),選擇“VSCode處理專屬數據”或“Jupyter處理專屬數據”。進入工作空間後,新建終端,執行下面指令下載並解壓文件。
# 進入目標目錄
cd /workspace
# 下載壓縮文件
wget "http://llamafactory-online-assets.oss-cn-beijing.aliyuncs.com/llamafactory-online/docs/v2.0/documents/Practice/smart_home/SmartHome.tar.gz"
# 解壓到該目錄
tar -xzf SmartHome.tar.gz -C /workspace
2.新建終端,逐條執行下面指令配置環境
# 創建自己的虛擬環境
conda create -n smarthome-lightllm-chat python=3.10 -y
# 激活環境
conda activate smarthome-lightllm-chat
# 安裝必要的包
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn vllm torch ipykernel pandas partial_json_parser websockets
3.模型部署前期準備
# 下載lightllm的最新源碼 需要掛VPN
git clone https://github.com/ModelTC/lightllm.git
cd lightllm
點擊下載requirements.txt文件(🔗https://s1.llamafactory.online/llamafactory-online/docs/v2.0/documents/Practice/smart_home/requirements.txt),將該文件放到/workspace目錄下,執行下面的命令進行安裝環境。
pip install -r requirements.txt
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
# 安裝lightllm
python setup.py install
💡提示
● 環境準備→步驟2 中,執行下載 lightllm 的源碼前,需要掛VPN。
● 後續步驟在執行代碼時,若提示模塊不存在,可在終端運行對應的 pip install [module name] 命令,通常能解決該問題。
數據重塑:從“原始日誌”到“標準教材”
Garbage In, Garbage Out。在本次實踐中,我們發現原始的 SmartHome_Dataset 存在大量問題(如缺少 function 字段、條件判斷失效等)。直接扔進模型訓練,效果慘不忍睹。
|
指令類型
|
數量
|
問題
|
|
iot-基礎控制
|
12747 條
|
格式需規範、缺少 function 字段、模糊指令操作失效
|
|
sensor_trigger-條件判斷
|
3803 條
|
條件判斷失效
|
|
chain-鏈式操作 需執行多個動作
|
475 條
|
鏈式操作失效
|
|
sql-查詢操作
|
381 條
|
-
|
|
複雜場景:一設備,多參數
|
328 條
|
-
|
|
optimization
|
284 條
|
-
|
後續計劃補充數據類型:
|
指令類型
|
數量
|
來源説明
|
|
複雜場景-延時執行+條件判斷+多設備聯動
|
55
|
AI大模型生成+人工標註
|
|
異常指令
|
500
|
智能家居歷史交互日誌
|
我們做了這三件事,讓數據“變廢為寶”:
- 統一數據格式
修復了大量損壞的 JSON 結構,將所有數據轉為標準 Alpaca 格式,確保每條數據都有清晰的instruction(用户指令)和output(標準JSON響應)。
①數據格式標準化。採用 Alpaca 格式,適配單輪指令任務。
{
"instruction": "用户指令(如“打開客廳空調”)",
"input": "額外輸入(可選,如設備狀態)",
"output": "JSON格式響應(含mcp_type、function、params字段)"
}
💡提示
● 由於多輪對話複雜,超出本任務需求,故排除 ShareGPT 格式。
②在“output”中補全缺失的字段“function”。
進入“SmartHome”文件夾,新建終端,激活 Python 環境 smarthome-lightllm-caht ,在命令行輸入以下指令運行腳本,完成數據集的“funcion”字段補全。
python3 code/function_fixed.py \
-i dataset/smart_home.json \
-o dataset/training_data_output.json \
-r dataset/missing_function_report.csv
💡提示
● python3 後要寫:腳本文件的路徑
-i 後寫:待處理數據集的路徑
-o 後寫:處理後的數據集存儲路徑
-r 後寫:輸出的處理報告的存儲路徑
用户需要把相應的路徑替換成自己的真實路徑。
● 補全function的思路為:
讀取文件中 "instruction","input","output" 的樣本,解析 output 裏的 JSON 字符串;如果缺少 "function" 字段,就根據 instruction 文本 + device_id 前綴 + params 裏的鍵自動補全一個合適的函數名(如 set_light_settings、set_humidifier_settings 等),然後把修改後的對象再寫回到 output。
2.定義條件觸發與自動化聯動邏輯
這是這是智能家居實現“無感智能”的核心。我們不僅教會模型理解“如果…就…”的簡單條件,更灌輸了設備自主感知環境並協同聯動的複雜場景邏輯。
● 核心理念升級:觸發條件並非僅來自用户指令,更多源於設備自身對環境的持續監測(如傳感器檢測到PM2.5超標、攝像頭識別到家人回家、時鐘到達預設時間)。模型的任務是理解這些“環境事件”,並規劃出正確的設備聯動響應。
● 場景化規則制定:
○ 環境自適應:例如,“trigger”: {"pm25": {">": 75}} 對應 “action” 為 [“打開新風系統”, “關閉空調內循環”]。這模擬了空氣淨化設備基於空氣質量自主決策的互動。
○ 節能與舒適聯動:例如,“trigger”: {"ac_status": "on"} 可觸發 “action” [“關閉窗户”, “檢查室內CO2濃度”],體現了空調開啓後,智能空間自動維持密閉環境並監控空氣健康度的邏輯。
○ 鏈式場景觸發:一個觸發條件可啓動一連串設備動作。例如,“trigger”: {"time": "22:00", "motion_bedroom": "no_motion_30min”} 可觸發完整的“睡眠模式”:關閉主燈、調暗夜燈、調節空調至睡眠温度、啓動助眠白噪音。
3.解決條件判斷失效問題
針對條件判斷失效的問題,使用以下規則改寫。累計修改樣本1,510 條。
①命中"instruction"中“條件+動作”的指令(如果/若/當/當/的話/的話/分鐘後/分鐘後/小時後/小時後):
"mcp_type": "sensor_trigger",
"function": "create_automation",
"params": {
"trigger": { ... },
"action": { "device_id": "<原始device_id>", "arg": "<來自power/turn_on|turn_off>" }
}
②相對時間(如“一小時/一小時/半小時/半小時/五分鐘/十分鐘/…後”):
trigger 寫成:{"time_after": "NhNmNs"},並支持中文數字轉換,
例:
一小時/一小時 → "1h"
半小時/半小時 → "30m"
五分鐘/五分鐘 → "5m"
十分鐘/十分鐘 → "10m"
③絕對時間(如“十點三十分/10:30/十點半/十點十分”):
trigger 寫成:{"time": "HH:MM"}(24小時制標準化)
④比較條件(温度/濕度/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"
5.補充數據類型:複雜場景和異常指令
複雜場景——智能家居的複雜場景通常涉及多設備、多傳感器、多協議的協同工作,結合用户行為、環境變化和個性化需求,提供智能化的生活體驗。例如:
● 睡眠模式,涉及環境光傳感器、智能窗簾、空調控制、音響系統等; "instruction": "準備睡覺時,關閉所有燈光,調低卧室空調温度,播放助眠音樂。"
● 老人/兒童看護模式,涉及運動傳感器、攝像頭、語音助手等。 "instruction": "監測老人的活動,若超過30分鐘未檢測到移動,發送提醒。"
異常指令——指令由於格式不正確、設備不支持、指令不明確等原因導致執行失敗。我們希望在實際應用中,系統應能夠識別這些錯誤指令,並提供相應的錯誤信息和建議。 例如:
{
"instruction": "今天天氣怎麼樣",
"input": "",
"output": "{"error": "NOT_A_CONTROL_COMMAND", "message": "這是天氣查詢,不是設備控制", "suggestion": "請使用天氣應用查詢"}"
},
經過上述處理步驟,我們將 12,000+ 條原始數據精簡優化為 9,352 條高質量數據,涵蓋基礎控制、條件判斷、鏈式操作、複雜場景和異常指令等場景。實驗證明,數據質量 > 數據數量,精準修復比盲目增廣有效得多。
模型選型:4B模型如何戰勝7B選手?
智能家居交互要求輕量級、快響應、高精度的大模型,來適配邊緣設備。面對眾多模型,我們設定了嚴苛的選型標準:參數量適中、指令跟隨能力強、結構化輸出精準。
候選池中有三大模型:
● Llama-2-7B-Chat:名聲在外,但7B參數對邊緣設備不夠友好
● SmolLM2-1.7B-Instruct:足夠輕量,但能力捉襟見肘
● Qwen3-4B-Instruct:折中之選,但實力未知
我們需要對比它們在智能家居控制任務上的表現。核心評判指標為:
● Schema通過率:生成的JSON格式是否規範、字段是否齊全
● Slot-F1值:設備ID、檔位、時間等關鍵參數抽取是否準確
● 推理延遲:單次響應速度
1.驗證集準備。本實踐選擇Smart Home Command Dataset(🔗https://huggingface.co/datasets/youkwan/Smart-Home-Control-Zh)作為基準數據,該數據集旨在用繁體中文訓練大型語言模型(llm),用於控制智能家居系統,特別是針對家庭助理系統。數據集包含用户輸入的繁體中文,輸出是結構化的JSON命令,代表用户控制智能家居設備的意圖。我們隨機抽取300條數據樣本作為驗證集。
2.vLLM 批量驗證。使用 vLLM 對大語言模型(Llama-2-7B-Chat,Qwen3-0.6B-Base,Qwen3-4B-Instruct)進行批量驗證,並對比它們在智能家居控制任務上的表現。新建終端,逐條執行以下命令。
cd /workspace/SmartHome/code
conda activate smarthome-lightllm-chat
python select_1.py
運行完後的結果如下圖所示:
💡提示
● 腳本select_1.py中的數據讀取路徑要修改為您當前的驗證集保存路徑。
● 若運行過程中報錯“缺少某個module”,運行指令 pip install {module的名字}
該驗證腳本的主要思路如下所示:
● 使用 vLLM 庫對每個模型執行批量推理,從驗證數據集中逐條輸入指令,獲得模型生成的結構化 JSON 輸出。
● 校驗JSON輸出結構的合法性。
● 使用 JSON Schema 自動驗證格式。自定義一個 JSON Schema,並利用 Python 的 jsonschema 庫對每條輸出進行校驗。
● 輸出與期望結果對比。 將模型生成的具體內容與驗證集中每條樣本的 expected_events 期望結果進行對比,以評估模型在內容層面的準確性。每條樣本的 expected_events 列出該指令正確的執行動作列表(每個包含應執行的動作類型、設備ID、參數等)。
最終,三個模型對比結果如下表所示:
|
候選模型
|
參數規模
|
Schema通過率
|
Slot-F1
|
推理延遲
|
微調顯存佔用
|
邊緣部署友好度
|
|
Qwen3-4B-Instruct
|
4B
|
96%
|
0.675
|
413.1ms
|
12.4GB
|
⭐⭐⭐⭐⭐
|
|
Llama-2-7B-Chat
|
7B
|
13.7%
|
0.095
|
538.3ms
|
20GB
|
⭐⭐
|
|
SmolLM2-1.7B-Instruct
|
1.7B
|
0%
|
0.016
|
220.1ms
|
5.1GB
|
⭐⭐⭐⭐
|
結果令人意外:4B的 Qwen3 在參數規模、推理延遲等方面不僅大幅領先7B的 Llama2,其 96% 的Schema通過率意味着它幾乎能“一次成型”輸出標準指令格式。這説明,模型能力不只看參數量,指令微調潛力同樣關鍵。因此,Qwen3-4B-Instruct 被選定為本次微調的基模型。
科學調優:找到學習效率的“黃金參數”
有了好學生和好教材,還需要科學的“教學方法”。我們針對LoRA微調中的三個關鍵參數展開實驗:
實驗設計:3因素×3水平,共27組參數組合對比
● LoRA rank:16、32、64(控制模型微調容量)
● 學習率:1e-5、3e-5、5e-5(控制學習速度)
● Batch size:2、4、8(控制單步學習樣本量)
我們跟蹤每組參數訓練的損失曲線和最終“高級功能通過率”(條件+鏈式指令),篩選最優組合:
|
實驗組
|
LoRA rank
|
學習率
|
Batch Size
|
高級功能通過率
|
loss後期波動幅度(訓練穩定性)
|
|
exp1
|
16
|
1e-5
|
2
|
55.6%
|
0.068(波動較大)
|
|
exp8
|
32
|
3e-5
|
4
|
55.6%
|
0.055(穩定收斂)
|
|
exp15
|
32
|
5e-5
|
4
|
44.4%
|
0.05(後期過擬合)
|
|
exp22
|
64
|
3e-5
|
4
|
44.4%
|
0.05(後期過擬合)
|
💡提示
● 測試完一個實驗模型的通過率後,要起另一個服務測試下一個模型時,需要關閉當前進程(可以直接關機,重新啓動實例)。
參數選擇不是“越大越好”,而是要在效果、速度和成本間找到精妙平衡。最終,我們鎖定了這套“黃金參數”:
|
參數項
|
設定值
|
關鍵解讀
|
|
LoRA Rank
|
32
|
性價比最優解。Rank=64 雖能提升1%準確率,但顯存佔用激增2GB(從 16GB→18GB),不符合 “邊緣設備輕量化” 目標。
|
|
Learning Rate
|
3e-5
|
1e-5 收斂太慢(4 epoch 未達最優),5e-5 容易震盪。3e-5 配合 Cosine 調度器最為穩定。
|
|
Batch Size
|
4
|
配合梯度累積(Gradient Accumulation Steps=4),有效批次大小為16,穩定訓練。
|
|
Epochs
|
4
|
經驗表明,3輪欠擬合,5輪過擬合,4輪為最優平衡點。
|
平台實戰:三步完成從訓練到部署
基於選定的 Qwen3-4B-Instruct 模型和調優後的參數,我們在 LLaMA-Factory Online 平台上的操作變得異常簡單:
第一步:配置訓練任務
選擇基礎模型和數據集,進行參數配置:
● 基礎模型:平台內置的 Qwen3-4B-Instruct
● 數據集:處理好的 smart_home_fixed.json
● 關鍵參數:LoRA rank=32,學習率=3e-5,epoch=4,Batch Size=4
● 訓練資源:1張 H800(約2.5小時完成訓練)
|
參數
|
取值
|
選擇依據
|
|
lora參數
|
|
|
|
lora_rank
|
32
|
4B模型 + 中等任務複雜度,平衡性能與效率
|
|
lora_alpha
|
64
|
經驗值:2×lora_rank,保證梯度更新幅度
|
|
lora_dropout
|
0.05
|
防止過擬合,適配中小樣本量
|
|
target_modul
|
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
覆蓋注意力層與 FFN 層,最大化微調效果
|
|
bias
|
none
|
減少參數數量,降低過擬合風險
|
|
訓練參數配置
|
|
|
|
num_train_epochs
|
4
|
3 輪欠擬合、5 輪過擬合,4 輪為最優平衡點
|
|
per_device_train_batch_size
|
4
|
80GB 顯存適配,避免 OOM
|
|
gradient_accumulation_steps
|
4
|
有效批次 = 4×4=16,模擬大批次訓練
|
|
learning_rate
|
3e-5
|
經 Grid Search 驗證(1e-5 收斂慢、5e-5 震盪)
|
|
lr_scheduler_type
|
cosine
|
餘弦退火 + 0.1 warmup_ratio,穩定收斂
|
|
weight_decay
|
0.01
|
抑制過擬合,保護預訓練權重
|
|
fp16
|
true
|
節省 50% 顯存,提速 30%
|
|
gradient_checkpointing
|
True
|
再省 30% 顯存,代價是訓練時間增加 10%
|
|
evaluation_strategy
|
steps
|
每 200 步評估,及時發現過擬合
|
|
load_best_model_at_end
|
True
|
保存最優模型,避免訓練後期退化
|
第二步:模型評估驗證
訓練完成後,可在 LLaMA-Factory Online 上對模型進行全面評估,並查看評估任務的基本信息、日誌及結果:
評估結果解讀:
● 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),適合以質量為主的離線或低併發在線場景;若用於高併發在線服務需進一步做推理優化。
第三步:一鍵對話測試
在“模型對話”界面選擇微調後的模型,即可實時體驗複雜指令解析:
模型輸出結果解讀:
|
用户指令
|
"將卧室空氣淨化器的濕度設為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。}}
|
效果總結:從“大概理解”到“精準執行”
微調前後的差異,通過量化指標和典型場景對比一目瞭然:
場景一:條件觸發性指令
用户指令:“半小時後請把空氣淨化器的風速調大到3檔位”
微調前:模型僅將其識別為簡單的風速設置(“control_device”, “level”: 3),完全忽略了“半小時後”這一核心時間條件,導致指令被立即執行。❌
微調後:模型精準識別出“時間延遲觸發”的意圖,輸出完整的自動化創建指令(“sensor_trigger”, “create_automation”),包含 “time_delay” 觸發條件與具體動作,實現了真正的“條件執行”。✅
場景二:鏈式操作型指令
用户指令:“當檢測到漏水時,關閉水閥併發送通知”
微調前:模型僅輸出一個緊急處理動作(“handle_emergency”, “emergency_stop”),遺漏了“發送通知”這一關鍵步驟,應對措施不完整。❌
微調後:模型正確解析出“傳感器觸發”與“多步驟動作”的複合結構,輸出的 params 中包含完整的觸發條件(“water_leak_sensor_01”: “leak”)和一個有序動作列表(關閉水閥、發送通知),邏輯嚴謹。✅
場景三:模糊型指令
用户指令:“三樓空調温度調小一點”
微調前:模型只能識別出設備(空調)和操作(設置温度),但在 params 中缺失具體的調整參數,無法執行。❌
微調後:模型準確理解了“調小一點”的相對性模糊表達,在參數中增加了 “delta”: -1 字段,明確指示“在現有温度基礎上降低1度”,實現了符合用户預期的精準控制。✅
可以看到,相較於基模型(Schema通過率<20%),微調後的模型在複雜指令解析上實現了質的飛躍。
|
測試類型
|
測試用例
|
通過率
|
|
基礎功能
|
打開客廳燈、關閉卧室空調等5條
|
100%
|
|
高級功能
|
如果卧室温度低於18度就開啓暖氣、離家模式等18條
|
88%
|
總結:AI落地智能家居的三重突破
本次實踐成功驗證了一條高效構建垂直領域專用模型的技術路徑,實現了三重突破:
● 輕量化突破:僅用4B參數模型,在邊緣設備友好條件下,達到了接近甚至超越通用大模型的垂直場景精度。證明了“小模型+精調優”路徑的可行性。
● 精準化突破:通過系統化的數據工程,讓模型真正理解家居場景下的條件邏輯、時間概念和模糊表達,輸出標準化、可執行的設備控制指令。
● 場景化突破:不僅覆蓋基礎控制,更深度適配了智能家居特有的條件觸發、場景聯動、異常處理等複雜需求,讓AI真正融入家庭場景。
更重要的是,通過 LLaMA-Factory Online 平台,我們將原本需要數週的專業微調流程,壓縮到了“幾個小時+幾次點擊”的標準化操作。模型選型、數據準備、參數調優、訓練評估的全流程,都可在可視化界面中完成。
智能家居的終極目標是“無感智能”——設備理解人的意圖,而非人學習設備的操作。今天,我們通過大模型微調技術向這個目標邁出了堅實一步。當每個家庭都能擁有理解上下文、支持複雜指令的個性化AI管家時,真正的智能生活才剛剛開始。