歡迎來到微軟機器人編輯器使用教程,從這裡開始,建立一個簡單的機器人。
在該系列文章中,每一篇都将通過添加更多的功能來建構機器人。當完成教程中的全部内容後,你将成功的建立一個天氣機器人(Weather Bot)。在本系列中将學會以下内容:
1)建立一個簡單的對話天氣機器人
2)在機器人中提出問題,并擷取從HTTP API擷取響應
3)在機器人中增加幫助提示和取消功能
4)使用語言生成功能(LG: Language Generation)
5)把機器人的回複轉換為卡片
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 -> Example Query )。如果在測試遇見 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完]
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!