網(wǎng)站開發(fā)需要什么配置的電腦如何交換友情鏈接
最初的時(shí)候是想直接在rasa 的chatbot上實(shí)現(xiàn),因?yàn)閞asa本身是帶有remindschedule模塊的。不過經(jīng)過一番折騰后,忽然發(fā)現(xiàn),chatbot上實(shí)現(xiàn)的定時(shí),語音助手不一定會(huì)有響應(yīng)。因?yàn)?#xff0c;我目前語音助手的代碼設(shè)置了長時(shí)間無應(yīng)答會(huì)結(jié)束對(duì)話,這樣一來,chatbot定時(shí)提醒的觸發(fā)就不會(huì)被語音助手獲悉。那怎么讓語音助手也具有定時(shí)提醒功能呢?
我最后選擇的方法是用threading.Timer(),rasa這邊解析說話意圖“提醒我(behavior)”——behavior是任何事情,解析成功后會(huì)回復(fù)“我會(huì)在5分鐘后提醒你behavior”。語音助手接收到這條回復(fù)后,會(huì)判斷是否包含“5分鐘后提醒”這幾個(gè)關(guān)鍵字,若是則啟動(dòng)threading.Timer(),定時(shí)5分鐘后執(zhí)行提醒。
這里,執(zhí)行提醒的操作其實(shí)就是在滿5分鐘時(shí)自動(dòng)發(fā)一份語義解析請(qǐng)求給rasa。我在rasa的domain.yml中定義了一條EXTERNAL_reminder的用戶意圖,同時(shí)還定義了這條意圖對(duì)應(yīng)的action,并寫入stories.md中。于是,當(dāng)rasa收到執(zhí)行提醒的用戶意圖后,便自動(dòng)返回我預(yù)先定義好的話術(shù)。語音助手收到話術(shù)后直接通過TTS播報(bào)出來,定時(shí)提醒功能完成。
接下來是我寫的相關(guān)代碼,和大家分享。
語音助手demo.py代碼中增加一個(gè)獨(dú)立的函數(shù):
def act_remind(text):print("5分鐘提醒觸發(fā)……")resp = rasabot.ask(text)print("提醒內(nèi)容:"+resp)tts.text_to_speech(resp)
然后在call_back函數(shù)中,在if resp== “有需要再叫我”這個(gè)條件后,增加一個(gè)else指令:
else:index0 = resp.find('5分鐘后提醒')if index0 != -1:text0 = '/EXTERNAL_reminder't = threading.Timer(300, act_remind, args=[text0])t.start()
這條指令就是判斷是否要執(zhí)行提醒計(jì)時(shí)線程。
關(guān)于demo.py的代碼, 請(qǐng)參看之前的博文:
https://blog.csdn.net/hydekong/article/details/141354955
Rasa部分的actions.py,就增加兩個(gè)actions:
class ActionSetReminder(Action):def name(self) -> Text:return "action_set_reminder"def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:behavior = tracker.get_slot("behavior")msg1 = '我會(huì)在5分鐘后提醒你' + behaviordispatcher.utter_message(text= msg1)return []class ActionReactToReminder(Action):def name(self) -> Text:return "action_react_to_reminder"def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:behavior = tracker.get_slot("behavior")dispatcher.utter_message(f"主人,到時(shí)間 {behavior} 啦!")return []
domain.yml部分intents增加:
? - ask_remind_behavior
? - EXTERNAL_reminder
actions增加:
? - action_set_reminder
? - action_react_to_reminder
entities增加:
? - behavior
slots增加:
behavior:
? ? type: text
stories.md增加一個(gè)故事:
## set_reminder* ask_remind_behavior- action_set_reminder* EXTERNAL_reminder- action_react_to_reminder
nlu.md增加一個(gè)用戶意圖ask_remind_behavio
## intent: ask_remind_behavior
- 提醒我[接娃](behavior)
- 提醒我[健身](behavior)
- 提醒我[做飯](behavior)
- 提醒我[睡覺](behavior)
- 提醒我[回電](behavior)
- 提醒我[休息](behavior)
- 提醒我[洗澡](behavior)
- 提醒我[吃飯](behavior)
- 提醒我[開會(huì)](behavior)
- 提醒我[叫車](behavior)
最后rasa train把模型生成,rasa run actions把兩個(gè)新增actions完成注冊(cè),再啟動(dòng)rasa run –enable-api,把rasa server跑起來。之后,進(jìn)入語音助手的項(xiàng)目文件夾,輸入python demo.py,就可以實(shí)際測(cè)試了。