本文以大模型语音控制风扇的开关为例,讲解如何通过 LSPlatform的云端编排功能在大模型语音交互流程中加入 AIUI技能,实现更丰富的产品功能。
大模型语音模板加入 AIUI技能节点后的数据流程如下图所示:
注意事项:
连接方式:从续流二极管引出两根导线一根接 GND(地线),一根接用于上下电的 GPIO接口来模拟风扇的开关。本例中使用的 GPIO接口为 PA2(扩展 GPIOA2)
部署开发环境以及 SDK工程拉取到本地目录,可以参考聆思文档中心环境搭建 | 聆思文档中心与获取大模型套件SDK | 聆思文档中心。SDK下载完成后,通过 VScode打开 LLM-pic
示例模板(D:\LISTENAI\duomotai_ap\apps\LLM-pic
),根据自己的 SDK保存路径打开。
然后打开 LLM-pic
目录下的 src\app_chat\app_music_ctrl.c
文件。
开发板使用的是 zepher-RTOS系统,SDK已经包含了控制意图,因此代码只需要修改两个地方:
LLM-pic\boards\csk6_duomotai_devkit.overlay
。LLM-pic\src\app_chat\app_music_ctrl.c
。点击 LLM-pic\boards\csk6_duomotai_devkit.overlay
在图中对应位置分别增加
fan-ctrl = &fan_ctrl;
fan_ctrl: fan_ctrl {
gpios = <&exgpioa 2 GPIO_ACTIVE_HIGH>;
};
src\app_chat\app_music_ctrl.c
目录下在图中对应位置分别增加头文件与宏定义
#include <zephyr/drivers/gpio.h>
#define GPIOA_2_NODE DT_ALIAS(fan_ctrl)
static const struct gpio_dt_spec gpioa2=GPIO_DT_SPEC_GET(GPIOA_2_NODE, gpios);
fan_ret
函数int fan_ret;
app_chat_evt_msg_t msg;
if (!gpio_is_ready_dt(&gpioa2)) {
return 0;
}
fan_ret = gpio_pin_configure_dt(&gpioa2, GPIO_OUTPUT_ACTIVE);
if (fan_ret < 0) {
return 0;
}
LOG_INF("Mumu------app_player_ctrl_thread");
} else if (!strcmp(aiui_ctrl_strings, "1")) { //打开风扇
LOG_INF("-----------------------------Open fan!");
fan_ret=gpio_pin_set_dt(&gpioa2, 1);
} else if (!strcmp(aiui_ctrl_strings, "0")) { //关闭风扇
LOG_INF("-----------------------------Close fan!");
fan_ret=gpio_pin_set_dt(&gpioa2, 0);
}
duomotai_ap\.sdk\modules\lschat\sessions\session_core.c
图中所示位置新增日志打印解析到云端cjson的数据模板函数LISA_NLOGI("--- %s", cJSON_Print(intent));
新增日志打印之后的效果:
与云端对应,说明端侧成功解析到云端cjson。
AIUI.control的cjson拆包逻辑可以看这部分
至此,端侧配置完成。
windows powershell/cmd
LISTENAI\duomotai_ap
路径下输入,开始编译固件:lisa zep build -b csk6_duomotai_devkit apps\LLM-pic -p
lisa zep exec cskburn -s \\.\COM串口号 -C 6 -b 1500000 0x000000 --verify-all .\build\zephyr\zephyr.bin
登录 LSplatform,创建新应用
创建成功后在弹出的界面进入应用编排服务
示例工程文件下载地址:大模型语音控制风扇.json
点击之后选择”导入节点文件”,导入下载的”大模型语音控制风扇.json“示例工程文件
本示例用的模板为“大模型语音交互与识图示例
”
该流程实现了图生文、文生图、风扇控制、知识库问答、兜底闲聊等功能。
具体流程如下:
流程解析如下:
语义改写
、分类提示词
与落域结果
判断语义改写
可以帮我们改写用户的问题,当有多轮提问的时候,使用语义改写可以将用户的多个问题改写成一个完整的问题,提高流程的处理效果。
当判断到有历史对话时,语义改写节点会整合用户的多个问题为一个完整问题,再传到提示词节点进行分类。
当判断到没有历史对话时,直接会传到提示词节点进行分类。
按照提示词的一般设计原则,首先要对大模型进行角色设定(“你是一个分类专家”)。然后对其进行任务设定(“你需要将用户的句子归为‘风扇控制’、‘画画’、‘闲聊’中的一类”)。接下来就是给大模型一些例子进行学习理解以提高分类的准确性。
这里有三个落域,分别是画画
、风扇控制
、闲聊
三个落域,它会通过前面的分类提示词来判断是哪个落域,每个落域对应不同的分支,如要再增添落域,点击左下角”添加“即可
前置处理函数、后置处理函数都是使用 function 节点来编写 JavaScript 代码,其主要作用是: 前置处理:主要用来提取上一个节点的输出参数转换或组装成下一个节点的输入参数。 后置处理:主要用来提取上一个节点的输出参数生成语音播放内容以及 NLP 结果推送给端侧,会比前置处理单纯提取参数复杂一些。
这里关键讲解提示词
与后置处理
节点
风扇控制的提示词的作用是从用户的命令中提取关键信息(打开/关闭)来调整开关状态,打开即为“1”,关闭即为“0”,采用自然语言处理(NLP)比采用通配符匹配有更好的识别效果。
它的作用是接收和解析用户的自然语言指令,根据解析结果构建一个意图模板,如果成功匹配指令,则生成成功的语音提示和控制指令消息发送给端侧设备;如果未匹配到指令,则生成失败或异常的语音提示消息,仅发送语音播报而没有控制指令。
在产品管理
模块点击新建产品
按钮,并按要求填写你的产品名称。
配置刚才创建的应用,完成配置后,用户即可体验大模型语音控制风扇。在此我们仅需在配置应用
勾对文章第一步创建的应用即可。
读取设备 ID
设备 ID 是一个产品下的唯一设备标识,我们需要获取当前设备 ID 方便后续在云端配置,才能让设备鉴权通过实现端云交互。
读取方式:
cskburn desktop
是一款聆思推出的桌面烧录工具,下载地址(cskburn 桌面烧录工具 | 聆思文档中心 打开软件后:
加入设备列表
聆思平台只会对列表中的设备鉴权提供交互服务,因此需要将前面读取到的设备 ID 在设备管理
页面进行导入才能实现设备正常交互。
云端配置设备 ID 后,还需将产品 ID 写入开发板固件中,才能让设备在运行时找到正确的云端产品服务完成鉴权,鉴权完成就可以进行大模型语音交互了。这里有两种方式:
通过 set product_id
和 set secret_id
指令可以分别配置开发板接入的大模型应用 product ID 及其密钥,示例如下:
set product_id 71cd1721-xxx-xxx-xxx-1000055c8b2f
set secret_id cb09013f-xxx-xxx-xxx-e212b32f9218
product_id和 product_secret
可在对应产品的产品信息中获取,请将指令中的参数替换为产品信息中的 id 与 secret 信息。
RST
,即可连接成功
至此,所有配置均以完成。
本文使用的聆思CSK6大模型开发板,详细信息可参考线上文档https://docs2.listenai.com/x/nTn9kMMCU