基于 QCS8550 快速验证大模型指令控制之 Qwen2.5-7B 智能家居灯光控制指令(附提示词)

前置条件

运行环境

QCS8550 板卡、7+Gen 3、 8 Gen2 手机均可。具体可参考文档:支持情况

本文运行环境:

  • 硬件:MC940 (QCS8550)
  • 软件:AidLux >= 2.0.0.1700 (ubuntu 22.04), aidllm 1.4.0, aid-openai-api 1.7.0, aid-next-chat 1.7.0

软件及相关应用包安装:端侧大模型对话 demo

运行模型并验证

拉取模型

本次用到的模型为 qwen2.5-7B,我们可以使用 aidllm 一键拉取模型

aidllm remote-list api

aidllm pull api LoveSeaW/qwen2.5-7B-8550

:warning: 注意:LoveSeaW/qwen2.5-7B-8550为临时版本,后续会修改为aplux/qwen2.5-7B-8550,请执行上述命令根据列出的模型进行选择。

运行模型

aidllm start api -m qwen2.5-7B-8550

成功运行后,再启动 ui 界面,验证大模型服务状态:

aidllm start ui

点击 AIdLux 桌面 NextChat 图标或访问设备 http://设备IP:51104,进行访问:

整体流程

我们要实现的场景为:控制家庭的灯光,可以指定房间,开启、关闭以及调节灯光的亮度。

简易的流程大致如上,本文仅为大模型部分示例,ASR、发送指令、错误处理暂不做讲解。

由于我们本次的场景较为简单,可以通过大模型一次推理完成 LLM 意图识别和指令识别,如果还需要增加控制其它设备和其它场景,可能需要将意图识别和指令生成分成两个阶段来做,可以自行研究,我们本次先考虑简单灯光控制场景。

结构化提示词

结构化提示词的结构如下:

  • 第一部分:角色定义,你是一个 xx 智能助手,你可以做 xxx、完成xxx,识别用户意图,并将用户意图输出 JSON 控制指令。
  • 第二部分:功能描述,支持xx 控制,数据映射,如房间、灯光、其它参数对应的字段名。
  • 第三部分:输出示例以及一部分输入&输出示例
  • 第四部分:输出规则、核心原则等

示例提示词

提供一段经我优化后的结构化提示词,由于在边端设备,输入 token 限制,去掉了部分 markdown 的符号,如加粗、列表等。
提示词如下:

你是智能家居控制助手,负责将用户的自然语言指令转换为JSON控制命令,当前仅支持灯光控制:(light):开启/关闭/亮度调节(0-100)

房间映射:
客厅:living_room
餐厅:dining_room  
主卧:master_bedroom
次卧:second_bedroom
厨房:kitchen
卫生间:bath_room
全部:all
仅包含上述房间,对不不存在的房间直接返回{}

输出示例:
{"type":"light", "action":"on|off", "room":"房间标识", "brightness":"数值(可选)"}

示例:
"开启客厅灯光" → {"type":"light", "action":"on", "room":"living_room"}
"关闭所有灯光" → {"type":"light", "action":"off", "room":"all"}  
"厨房灯光调到75" → {"type":"light", "action":"on", "room":"kitchen", "brightness":75}
"打开空调" → {}
"你好" → {}

输出限制:
只处理灯光控制,其他一律返回 {}
仅输出JSON,无其他文字
确保JSON格式正确

使用大模型验证&优化提示词

开发阶段

在开发阶段,我们可以使用图形化界面快速验证提示词是否满足需求,流程如下:

  1. 进入 NextChat UI 界面,点击左下角设置界面(如果是手机版竖屏需要先点击左上角更多菜单,再点击设置)
  2. 系统设定语即为系统提示词
  3. 粘贴写好的提示词或上面提供的示例提示词,会自动保存
  4. 在聊天窗口输入文字进行测试

如果返回不准确,我们可以直接在系统设定语输入框修改快速测试。

接入业务逻辑

AidLux 端侧大模型方案支持使用 openai api 方式调用大模型接口


完整的接口文档,可以联系官方客服获取。
使用脚本调用接口示例代码如下:

curl --location --request POST 'http://192.168.111.61:8888/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data-raw '{
    "model": "qwen2.5-7B-8550",
    "messages": [
        {
            "role": "system",
            "content": "你是智能家居控制助手,负责将用户的自然语言指令转换为JSON控制命令,当前仅支持灯光控制:(light):开启/关闭/亮度调节(0-100)\n\n房间映射:\n客厅:living_room\n餐厅:dining_room  \n主卧:master_bedroom\n次卧:second_bedroom\n厨房:kitchen\n卫生间:bath_room\n全部:all\n仅包含上述房间,对不不存在的房间直接返回{}\n\n输出示例:\n{\"type\":\"light\", \"action\":\"on|off\", \"room\":\"房间标识\", \"brightness\":\"数值(可选)\"}\n\n示例:\n\"开启客厅灯光\" → {\"type\":\"light\", \"action\":\"on\", \"room\":\"living_room\"}\n\"关闭所有灯光\" → {\"type\":\"light\", \"action\":\"off\", \"room\":\"all\"}  \n\"厨房灯光调到75\" → {\"type\":\"light\", \"action\":\"on\", \"room\":\"kitchen\", \"brightness\":75}\n\"打开空调\" → {}\n\"你好\" → {}\n\n输出限制:\n只处理灯光控制,其他一律返回 {}\n仅输出JSON,无其他文字\n确保JSON格式正确"
        },
        {
            "role": "user",
            "content": "给我写一个python打印hello world的例子"
        }
    ]
}'