前言
本文以大模型语音控制灯的开关为例,讲解如何通过LSPlatform的云端编排功能在大模型语音交互流程中加入AIUI技能,实现更丰富的产品功能。
大模型语音模板加入AIUI技能节点后的数据流程如下图所示:
大模型语音控制AIUI之风扇
硬件准备工作
- 聆思CSK6大模型开发板
- 风扇
注意事项:
- 开发板引脚电压电流有限,风扇必须单独外接电池或电源进行供电
- 使用续流二极管提供一条低阻抗路径,使电流能够继续流动并保护其他元器件和电路免受反向电压冲击和电感储能释放的影响。
连接方式:从续流二极管引出两根导线一根接GND(地线),一根接用于上下电的GPIO接口来模拟风扇的开关。本例中使用的GPIO接口为PA2(扩展GPIOA2)
聆思CSK6大模型开发板端侧新增风扇控制配置
准备工作
部署开发环境以及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已经包含了控制意图,因此代码只需要修改两个地方:
- 新增用于控制风扇的gpio引脚,使用扩展IO芯片的pa2引脚,文件路径在LLM-pic\boards\csk6_duomotai_devkit.overlay
- 增加控制风扇意图的逻辑代码流程,文件路径: LLM-pic\src\app_chat\app_music_ctrl.c
1.在设备树中新增用于控制风扇的gpio引脚(扩展IOa2)
点击LLM-pic\boards\csk6_duomotai_devkit.overlay
在图中对应位置分别增加
fan-ctrl = &fan_ctrl;
fan_ctrl: fan_ctrl {
gpios = <&exgpioa 2 GPIO_ACTIVE_HIGH>;
};
2.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);
3.在图中位置新增定义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");
4.在图中AIUI意图控制下新增风扇控制的指令意图
} 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);
5.(可选)我们如果想要从日志判断云端是否下发到端侧,可以在duomotai_ap\.sdk\modules\lschat\sessions\session_core.c
图中所示位置新增日志打印解析到云端cjson的数据模板函数
LISA_NLOGI("--- %s", cJSON_Print(intent));
新增日志打印之后的效果:
与云端对应,说明端侧成功解析到云端cjson。
AIUI.control的cjson拆包逻辑可以看这部分
至此,端侧配置完成。
编译与烧录
- 打开 windows powershell/cmd
2、在LISTENAI\duomotai_ap路径下输入,开始编译固件
lisa zep build -b csk6_duomotai_devkit apps\LLM-pic -p
3、固件编译成功之后,输入进行烧录
lisa zep exec cskburn -s \\.\COM串口号 -C 6 -b 1500000 0x000000 --verify-all .\build\zephyr\zephyr.bin
大模型语音接入AIUI实现风扇控制功能的云端配置
创建应用
登录LSplatform,创建新应用
创建成功后在弹出的界面进入应用编排服务
示例工程文件下载地址:大模型语音控制风扇
点击之后选择”导入节点文件”,导入下载的”大模型语音控制风扇.json“示例工程文件
示例工程讲解
本示例用的模板为“大模型语音交互与识图示例”
该流程实现了图生文、文生图、风扇控制、知识库问答、兜底闲聊等功能。
具体流程如下
流程解析如下:
- 首先根据最近3轮历史对话判断用户在图生文对话中,若存在则继续图生文对话,调用大模型进行图片理解并下发流式TTS和流式文本。
- 若最近3轮对话没有包含图生文对话内容,则走大模型意图落域,判断用户是否想要进行“画画”,若落域结果为“画画”,则走文生图的逻辑,包括生成用户期望的图片以及TTS合成等
- 我们新增了一条意图,为风扇控制,若用户意图为风扇控制,则走AIUI控制的逻辑,端侧增加nlp帧,若命中AIUI技能,则成功下发指令,反之则失败。
- 若用户的意图不是画画,也不是风扇控制。则调用知识点检索,若存在知识点,则调用大模型进行知识点的回复,包括流式TTS和流式文本下发。
- 若用户的意图不是画画,也不是风扇控制,且调用知识点检索也没有结果,则调用大模型进行兜底闲聊回复,包括流式TTS和流式文本下发。
关键节点讲解
- 在大模型意图落域部分,主要讲解语义改写、分类提示词与落域结果判断
语义改写
语义改写可以帮我们改写用户的问题,当有多轮提问的时候,使用语义改写可以将用户的多个问题改写成一个完整的问题,提高流程的处理效果。
当判断到有历史对话时,语义改写节点会整合用户的多个问题为一个完整问题,再传到提示词节点进行分类。
当判断到没有历史对话时,直接会传到提示词节点进行分类。
提示词(分类提示词)
按照提示词的一般设计原则,首先要对大模型进行角色设定(“你是一个分类专家”)。然后对其进行任务设定(“你需要将用户的句子归为“风扇控制”、“画画”、“闲聊”中的一类”)。接下来就是给大模型一些例子进行学习理解以提高分类的准确性。
落域结果判断
这里有三个落域,分别是画画、风扇控制、闲聊三个落域,它会通过前面的分类提示词来判断是哪个落域,每个落域对应不同的分支,如要再增添落域,点击左下角”添加“即可
- 意图部分我们主要看第二条链路,风扇控制链路,依次以前置处理、提示词、星火大模型、后置处理连接
前置处理函数、后置处理函数都是使用function节点来编写javascript代码,其主要作用
前置处理:主要用来提取上一个节点的输出参数转换或组装成下一个节点的输入参数
后置处理:主要用来提取上一个节点的输出参数生成语音播放内容以及NLP结果推送给端侧,会比前置处理单纯提取参数复杂一些。
这里关键讲解提示词与后置处理节点
提示词(风扇控制)
风扇控制的提示词的作用是从用户的命令中提取关键信息(打开/关闭)来调整开关状态,打开即为“1”,关闭即为“0”,采用自然语言处理(NLP)比采用通配符匹配有更好的识别效果
后置处理
它的作用是接收和解析用户的自然语言指令,根据解析结果构建一个意图模板,如果成功匹配指令,则生成成功的语音提示和控制指令消息发送给端侧设备;如果未匹配到指令,则生成失败或异常的语音提示消息,仅发送语音播报而没有控制指令。
开发板对接LSPlatform云端应用绑定
一.创建产品
在产品管理模块点击新建产品按钮,并按要求填写你的产品名称。
二.云端应用和云端产品信息绑定
配置刚才创建的应用,完成配置后,用户即可体验大模型语音控制风扇。在此我们仅需在配置应用勾对文章第一步创建的应用即可。
三.云端应用设备列表加入硬件设备ID
读取设备id
设备ID是一个产品下的唯一设备标识,我们需要获取当前设备ID方便后续在云端配置,才能让设备鉴权通过实现端云交互。
读取方式:
cskburn desktop是一款聆思推出的桌面烧录工具,下载地址(cskburn桌面烧录工具 | 聆思文档中心)打开软件后
1.点击串口下拉框,选择连接开发套件后识别到的串口编号;
2.点击获取信息
3.得到设备ID
加入设备列表
聆思平台只会对列表中的设备鉴权提供交互服务,因此需要将前面读取到的设备ID在设备管理页面进行导入才能实现设备正常交互。
四.CSK6开发板设备端写入云端产品服务配置
云端配置设备id后,还需将产品ID写入开发板固件中,才能让设备在运行时找到正确的云端产品服务完进行鉴权,鉴权完成就可以进行大模型语音交互了。这里有两种方式:
1.串口写入方式
使用数据线连接开发板 DAP_USB 接口后,打开聆思在线串口终端,选择对应的串口设 备进行连接,波特率默认115200,完成配置后点击连接按钮。
通过 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