前言

本文介绍如何实现大模型+语音交互对风扇实现开关控制,示例使用的硬件是聆思CSK6大模型开发板,大模型接的是星火大模型。本文将先详细介绍大模型云端从获取交互语音到下发控制指令的全过程,包括整合上下文、配置提示词、语义意图分类、提取关键信息以及控制指令的执行等关键环节。


语音控制风扇云端流程配置

一、创建应用

登录LSplatform,创建新应用

聆思CSK6大模型开发板语音控制风扇(上)_数据


下载工程示例:风扇控制.json

导入工程示例:点击右上角”≡“找到”导入“

聆思CSK6大模型开发板语音控制风扇(上)_json_02


点击之后选择”导入节点文件”,导入下载的”风扇控制.json“示例工程文件

聆思CSK6大模型开发板语音控制风扇(上)_json_03


二、示例工程讲解

聆思CSK6大模型开发板语音控制风扇(上)_json_04


流程分为主要两个部分,第一部分为进行语音交互,将用户的语音输入识别为文字后利用第一个提示词节点(分类提示词),将用户的语音命令进行意图分类。


聆思CSK6大模型开发板语音控制风扇(上)_开发板_05

第二部分是根据前面的意图识别结果进行多分支处理。画图(第一个分支)的分支是调用星火大模型的文生图功能生成图片。风扇控制(第二个分支)的分支是再次利用提示词(控制风扇提示词)调用星火大模型从用户的语音内容中提取关键的控制信息,如“打开/关闭风扇”控制gpio上下电来实现控制风扇的状态,最后一个分支是闲聊分支是用于完成语音的基本问答功能。

聆思CSK6大模型开发板语音控制风扇(上)_数据_06


关键节点讲解

第一部分

聆思CSK6大模型开发板语音控制风扇(上)_数据_07


第一部分主要讲解提示词语义改写落域结果判断部分

提示词(分类提示词)

聆思CSK6大模型开发板语音控制风扇(上)_数据_08


按照提示词的一般设计原则,首先要对大模型进行角色设定(“你是一个分类专家”)。然后对其进行任务设定(“你需要将用户的句子归为“风扇控制”、“画画”、“闲聊”中的一类”)。接下来就是给大模型一些例子进行学习理解以提高分类的准确性。

语义改写

语义改写可以帮我们改写用户的问题,当有多轮提问的时候,使用语义改写可以将用户的多个问题改写成一个完整的问题,提高流程的处理效果。

当判断到有历史对话时,语义改写节点会整合用户的多个问题为一个完整问题,再传到提示词节点进行分类。

当判断到没有历史对话时,直接会传到提示词节点进行分类。

落域结果判断

这里有三个落域,分别是画画控制GPIO闲聊三个落域,它会通过前面的分类提示词来判断是哪个落域,每个落域对应不同的分支,如要再增添落域,点击左下角”添加“即可

聆思CSK6大模型开发板语音控制风扇(上)_数据_09


第二部分

聆思CSK6大模型开发板语音控制风扇(上)_json_10


聆思CSK6大模型开发板语音控制风扇(上)_数据_11


第二部分我们只看第二条分支(风扇分支),前置处理与”闲聊”的前置处理相同,直接照抄即可。这里关键讲解“提示词”与“后置处理”节点

风扇控制提示词

风扇控制的提示词的作用是从用户的命令中提取关键信息(打开/关闭)来实现并返回风扇状态的十进制值,打开即为“1”,关闭即为“0”,采用自然语言处理(NLP)比采用通配符匹配有更好的识别效果

聆思CSK6大模型开发板语音控制风扇(上)_数据_12


风扇控制后置处理节点

聆思CSK6大模型开发板语音控制风扇(上)_开发板_13


后置处理这里分为设置语音提示、创建数据模板、获取用户指令、识别指令、执行操作、构造消息发送反馈和日志打印,这里主要部分为创建数据模板、获取用户指令、识别指令、执行操作。

创建数据模板

数据模板是用于告诉系统我们想要执行什么操作。模板里包含了一个意图(“SET")和一个结果列表,这个列表里包含了一个ID,一个类型("integer",表示我们用的是整数),和一个值(初始设为0,代表风扇是关闭的)。不建议直接修改。

获取用户指令

系统会通过读取msg.payload来获取用户指令,这里面包含了用户的输入。不需修改。

识别指令

系统会检查用户说了什么,如果用户说“打开风扇”,系统就设置一个值为1(代表风扇打开),并准备说“风扇已打开”。如果用户说“关闭风扇”,系统就设置值为0(代表风扇关闭)

并准备说“风扇已关闭”。如果用户说的系统没听懂,就准备一句“很抱歉,我没有明白您的指令,请再说一遍”。

执行操作

如果系统识别了用户的指令,把值设置为GPIO的值(1或0),然后准备发送语音提示。

另外,正常情况下,节点将产生两个数据,其中nluMsg是一个JSON字符串,发送给开发板进行数据处理,其格式是由intentTemplate变量定义的,修改时要注意不要出错。而ttsMsg是发给TTS合成语音节点的,生成语音数据发送给开发板直接进行播放。