前置条件
运行环境
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
注意: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格式正确
使用大模型验证&优化提示词
开发阶段
在开发阶段,我们可以使用图形化界面快速验证提示词是否满足需求,流程如下:
- 进入 NextChat UI 界面,点击左下角设置界面(如果是手机版竖屏需要先点击左上角更多菜单,再点击设置)
- 系统设定语即为系统提示词
- 粘贴写好的提示词或上面提供的示例提示词,会自动保存
- 在聊天窗口输入文字进行测试
如果返回不准确,我们可以直接在系统设定语输入框修改快速测试。
接入业务逻辑
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的例子"
}
]
}'