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