聆思CSK6大模型語音控制風扇(上)
本文介紹如何實現大模型+語音交互對風扇實現開關控制,示例使用的硬件是聆思CSK6大模型開發板,大模型接的是星火大模型。本文將先詳細介紹大模型云端從獲取交互語音到下發控制指令的全過程,包括整合上下文、配置提示詞、語義意圖分類、提取關鍵信息以及控制指令的執行等關鍵環節。
登錄LSplatform,創建新應用
下載工程示例:風扇控制.json
導入工程示例:點擊右上角”≡“找到”導入“
點擊之后選擇”導入節點文件”,導入下載的”風扇控制.json“示例工程文件
流程分為主要兩個部分,第一部分為進行語音交互,將用戶的語音輸入識別為文字后利用第一個提示詞節點(分類提示詞),將用戶的語音命令進行意圖分類。
第二部分是根據前面的意圖識別結果進行多分支處理。畫圖(第一個分支)的分支是調用星火大模型的文生圖功能生成圖片。風扇控制(第二個分支)的分支是再次利用提示詞(控制風扇提示詞)調用星火大模型從用戶的語音內容中提取關鍵的控制信息,如“打開/關閉風扇”控制gpio上下電來實現控制風扇狀態,最后一個分支是閑聊分支是用于完成語音的基本問答功能。
第一部分主要講解提示詞、語義改寫、落域結果判斷部分
提示詞(分類提示詞)按照提示詞的一般設計原則,首先要對大模型進行角色設定(“你是一個分類專家”)。然后對其進行任務設定(“你需要將用戶的句子歸為“風扇控制”、“畫畫”、“閑聊”中的一類”)。接下來就是給大模型一些例子進行學習理解以提高分類的準確性。
語義改寫語義改寫可以幫我們改寫用戶的問題,當有多輪提問的時候,使用語義改寫可以將用戶的多個問題改寫成一個完整的問題,提高流程的處理效果。
當判斷到有歷史對話時,語義改寫節點會整合用戶的多個問題為一個完整問題,再傳到提示詞節點進行分類。
當判斷到沒有歷史對話時,直接會傳到提示詞節點進行分類。
落域結果判斷這里有三個落域,分別是畫畫、控制GPIO、閑聊三個落域,它會通過前面的分類提示詞來判斷是哪個落域,每個落域對應不同的分支,如要再增添落域,點擊左下角”添加“即可
前置處理函數、后置處理函數都是使用function節點來編寫javascript代碼,其主要作用
前置處理:主要用來提取上一個節點的輸出參數轉換或組裝成下一個節點的輸入參數
后置處理:主要用來提取上一個節點的輸出參數生成語音播放內容以及NLP結果推送給端側,會比前置處理單純提取參數復雜一些。
第二部分我們只看第二條分支(風扇分支),前置處理與”閑聊”的前置處理相同,直接照抄即可。這里關鍵講解“提示詞”與“后置處理”節點
風扇控制提示詞風扇控制的提示詞的作用是從用戶的命令中提取關鍵信息(打開/關閉)來實現并返回風扇狀態的十進制值,打開即為“1”,關閉即為“0”,采用自然語言處理(NLP)比采用通配符匹配有更好的識別效果
后置處理這里分為設置語音提示、創建數據模板、獲取用戶指令、識別指令、執行操作、構造消息發送反饋和日志打印,這里主要部分為創建數據模板、獲取用戶指令、識別指令、執行操作。
創建數據模板數據模板是用于告訴系統我們想要執行什么操作。模板里包含了一個意圖(“SET")和一個結果列表,這個列表里包含了一個ID,一個類型("integer",表示我們用的是整數),和一個值(初始設為0,代表風扇是關閉的)。不建議直接修改。
獲取用戶指令系統會通過讀取msg.payload來獲取用戶指令,這里面包含了用戶的輸入。不需修改。
識別指令系統會檢查用戶說了什么,如果用戶說“打開風扇”,系統就設置一個值為1(代表風扇打開),并準備說“風扇已打開”。如果用戶說“關閉風扇”,系統就設置值為0(代表風扇關閉)
并準備說“風扇已關閉”。如果用戶說的系統沒聽懂,就準備一句“很抱歉,我沒有明白您的指令,請再說一遍”。
執行操作如果系統識別了用戶的指令,把值設置為GPIO的值(1或0),然后準備發送語音提示。
另外,正常情況下,節點將產生兩個數據,其中nluMsg是一個JSON字符串,發送給開發板進行數據處理,其格式是由intentTemplate變量定義的,修改時要注意不要出錯。而ttsMsg是發給TTS合成語音節點的,生成語音數據發送給開發板直接進行播放。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。