歡迎來到微軟機器人編輯器使用教程,從這裡開始,建立一個簡單的機器人。
在該系列文章中,每一篇都將通過新增更多的功能來構建機器人。當完成教程中的全部內容後,你將成功的建立一個天氣機器人(Weather Bot)。在本系列中將學會以下內容:
4)使用語言生成功能(LG: Language Generation)
6)新增LUIS功能,理解自然語言
準備條件
- 完成系列(1,2)中的簡單對話機器人建立(https://www.cnblogs.com/lulight/p/14891002.html)與 傳送HTTP請求(https://www.cnblogs.com/lulight/p/14897260.html)
- (必須)一個LUIS賬號。此處以中國區的LUIS作為演示(LUIS (Language Understanding) - Cognitive Services - Microsoft (azure.cn)),LUIS中為Weather_bot所建立的應用如下圖(當在Bot Composer中配置好endpoint和key後,Composer會自動同步機器人中的語意,實體等內容)
Bot Composer使用的預設識別器就是LUIS。它使用語言理解 (LUIS) 服務,該服務允許機器人理解使用者的響應並確定在對話流中下一步要做什麼。語言理解 (LUIS) 是 Azure 認知服務中的一項服務,可將自然語言處理應用於對話文字以預測含義並提取相關資訊。
本文將展示如何訓練LUIS識別器來捕獲訊息中所包含的使用者意圖。然後將訊息傳遞給觸發器,觸發器定義機器人將如何響應。主要包含的內容有:
- 將LUIS識別器新增到機器人
- 確定使用者意圖和實體以生成正確的響應
修改識別器的型別(Update the recognizer type)
第一步:啟動編輯器並開啟weather_bot專案
第二步:在左側導航欄中選中weather_bot對話元件
第三步:在右側的屬性欄中,從“ 識別器型別 ”中選擇“ 預設識別器 ”。預設識別器即使用LUIS
新增LUIS的資料和條件(Add language understanding data and conditions)
本節中,將建立三個語意(cancel, help, weather),用於替換在系列3[https://www.cnblogs.com/lulight/p/14902267.html]中使用正規表示式來檢測使用者所輸入的指令。
第一步:選中“Cancel”觸發器,在屬性的觸發語句表示式中填入以下語句:
- cancel - please cancel - stop that - 取消對話 - 退出吧
第二步:在“Condition”部分,設定表示式條件為 = #Cancel.Score >= 0.8
設定LUIS的判斷結果分數要大於等於80%(0.8)的目的是避免不必要的觸發。因為LUIS是基於機器學習的意圖分類器,它會返回各種可能的匹配項,每一個匹配項都有一個評分。通過評分可以避免低可信度的結果。
第三步:同樣的操作為“help”觸發器。選中“help”觸發器,在屬性的觸發語句表示式中填入以下語句:
- help - I need help - please help me - can you help
第四步:在“Condition”部分,設定表示式條件為 = #Help.Score >= 0.5
第五步:最後在“weather“觸發器中。同樣用以下的語意替換舊的正規表示式關鍵字。
- get weather - weather - how is the weather
請檢視新增LUIS語意的演示動畫:
配置LUIS資源(Configure a Language Understanding resource)
正如上一節中配置了LUIS語意和條件後,Bot Composer會提示有兩個錯誤(在右上角)。這正是由於當前還沒有配置LUIS資源。需要在appsettings.json檔案中設定LUIS key和region資訊。
第一步:當在Azure門戶上已經建立好LUIS(Language Understanding)服務後,登入Azure LUIS資源的介面,檢視”Keys and Endpoint“。注意:LUIS資源建立好後,會有兩個型別,一個是Language Understanding Authoring (LUIS)創作資源,一個是Language Understanding (LUIS)資源,提供服務介面。這兩個資源的Keys和Endpoint都需要在Bot Composer中配置。
第二步:回到Bot Composer介面,可以直接點選錯誤提示中的”appsettings.json“進入檔案中為luis節點設定值:(最左側導航中選擇”Configure“,"Development resources",點選右上角的JOSN檢視檢視,填充第一步中的值)。
"luis": { "authoringEndpoint": "", "authoringRegion": "", "defaultLanguage": "en-us", "endpoint": "", "environment": "composer", "name": "weather_bot", "authoringKey": "", "endpointKey": "" },
注意:也可以在UI上通過按鈕”Set up Language Understanding“根據UI提示一步一步的登入到Global版Azure,選擇已有的LUIS或新建。但當前還不支援中國區的Azure。
第三步:填充完luis節點中的資訊後,回到”建立“目錄。此時,Bot Composer的錯誤提示訊息。表示已經可以測試Bot是否可以成功呼叫LUIS資源。
第四步(非常重要的驗證步驟):登入LUIS門戶(https://luis.azure.cn/applications), 驗證並測試weather_bot的LUIS App是否建立成功?語意和實體等是否同步過來?專案是否釋出?驗證呼叫結果(LUIS門戶 --> LUIS APP -->MANAGE --> Azure Resources -> )。如果在測試遇見 403 Forbidden -- "This application cannot be accessed with the current subscription." 最大的原因是在LUIS門戶中新建的weather_bot 沒有Publish。
LUIS偵測並提取文字中的實體(Using LUIS for entity extraction)
使用LUIS還可以在使用者的話語中來識別實體,如本文的郵政編碼。這樣就能更明確的知道使用者意圖,簡化詢問輸入郵政編碼的步驟。
例如:使用者輸入“How is the weather in 98052?”,機器人就不需要再次提醒使用者輸入郵政編碼,而是可以直接回復天氣資訊。雖然這是一個簡單的例子,但對於機器人來說這個功能是一個機器模式與人自然對話的一個巨大改進。
第一步:在Bot Composer的左側目錄中選擇“使用者輸入”,然後選中“weather_bot”對話元件(非根目錄),點選“顯示程式碼”,在最後部分加上以下內容:
> Define a postal code entity. Any time LUIS sees a five digit number, it will flag it as 'postal code' entity. $ postalcode:/[0-9]{5}/
第二步:設定完成後,回到機器人設計頁面,選中”getWeather“的BeginDialog元件。在這裡新增一個任務用來為屬性user.postalcode設定postalcode實體的值(由第一步中所設定的匹配規則從LUIS中獲取)
第三步:在詢問郵政編碼的任務模組之前,點選”+“號按鈕,新增一個設定屬性的任務(”管理屬性“ --> “設定屬性”)。
第四步:在“Set a property”元件的右側的屬性中,為Property設定為“ user.postalcode ”,為Value設定為 " =@postalcode "
當操作到這裡後,天氣機器人已經建立完成,就可以開啟測試的旅程了。
請檢視使用LUIS後,天氣機器人的完整版演示動畫:
感謝您看到了這裡。開啟實驗機器人的旅程。謝謝。
(微軟Azure Bot 編輯器系列的六個內容均是參考微軟官方的機器人文件進行的中文操作步驟,原文連線見參考資料)
參考資料
Tutorial: Add LUIS for language understanding:https://docs.microsoft.com/en-us/composer/tutorial/tutorial-luis?tabs=v2x
[微軟Azure Bot 編輯器系列 1~6完]