以下這篇文章主要介紹微軟的對話機器人架構,轉載自
https://blog.csdn.net/weixin_33979745/article/details/85926649
實作的大緻效果是可以詢問微軟俱樂部的相關情況,并且查詢天氣。效果示範如下:
下面我會将整個過程進行詳細的表述。
1. 什麼是Bot Framework?
Bot Framework就是幫你快速搭建智能服務的後端,快速在各種終端和服務上提供服務。包括三大元件。
Bot Builder SDKs:
這個是Bot的生成器,快速生成一個ASP.NET和Node.js的後端服務,提供了像Dialog、FormFlow幫你管理與使用者的會話。
Bot Connector:
這是個Bot的Channel,幫你把你的服務快速釋出到各個管道,比如說Skype,Facebook Messager等等。這樣使用者就可以在Skype等Channel上使用你的服務了。
Bot Directory:
這個算是Bot 的商店,在這裡可以找到各個bot,你也可以把自己的Bot釋出出來,進而大家都可以看到你的Bot。
官方網址:https://docs.microsoft.com/zh-cn/bot-framework,用你的微軟賬戶登入就行。
界面如圖所示:
2. 什麼是LUIS?
說到LUIS,我們首先談一下Cognitive Services(認知服務)。
Cognitive Services(認知服務)的前身是Project Oxford(牛津計劃),正式釋出的時候更名的。這是微軟将研究院研究的技術以API和SDK的形式開放給開發者的一系列智能化服務。
主要包括5大類的服務:視覺、語言、語言、知識和搜尋。
其實就包括我們今天要講的"語言了解(Language Understanding Intelligent Service,簡稱LUIS)"。
LUIS的官網介紹:https://www.luis.ai,用你的微軟賬戶登入就行。
界面如圖所示:
點選"App"這一欄,咱們先點選"new App"建立一個app。
建立完成後,點選應用的名稱,進入編輯這個應用。
我們先看以下左邊的tab,可以看到有儀表盤,意圖(Intents),實體(Entities),功能以及釋出應用。。。。
Intents:就是意圖,比如咱們現在要提供天氣查詢的服務,那麼咱們就建立一個"查詢天氣"的Intent。
實體裡頭有兩類:
Entities:實體,比如在查詢天氣的時候需要有地理位置資訊,需要把使用者的語言裡頭的地點提取出來,這個地點就是這個句子裡頭的執行個體,咱們建立一個"地點"的執行個體。
Pre-built Entities(預建實體):這個是預置好的執行個體,比如說時間,數字等等,我加了一個datetime的預置執行個體。
在功能裡頭會有:
Phrase List Features(短語清單功能):固定的一些短語,能夠直接識别,比如說航空公司的名字等已知資訊
Pattern Features(模式功能):正規表達式,可以比對出相應的一些字段,比如說航班号。
咱們現在來建立一個能夠識别查詢天氣的語言了解服務。
首先,查詢天氣需要地點資訊,咱們先建立一個"地點"的執行個體。
點選到“實體”裡頭,“添加自定義實體”:
添加一個“預建實體” datetime:
再建立一個叫做"查詢天氣"的Intent。
點選save之後會出現以下界面:
在“句式”中,輸入幾個例子,比如說“北京天氣怎麼樣”,可以多輸入幾個句子的類型,比如“北京今天有霧霾嗎?”等等,沒輸入完一句按一下回車。
如果北京等地點資訊沒有顯示标記的話,選中北京兩個字,然後選擇"地點"标注。然後點選"儲存"。
之後點選"釋出應用",點選該界面裡頭的"Train"按鈕。
開始訓練,可能需要點時間,你可以做點其他事情。
訓練完成之後,Publish按鈕,釋出成api的形式。
大家可以看到有“Endpoint url”這個選項,這個url後面加上查詢語句就是API了。
如:https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/LUIS_APP_ID?subscription-key=LUIS_subscription-key&timezoneOffset=0.0&verbose=true&q=北京今天天氣怎麼樣?
把LUIS的ID(就是apps後面那串字元)和subscription-key記下來,後面需要用到。
在URL後面可以輸入相關的語句,然後回車,就可以看到傳回的json字元串了。
3. 什麼是QnA Maker?
QnA Maker可以建立、訓練并釋出一個基于問題對的智能比對,可以通過簡單的訓練來組織問題對,特别适合處理的就是标準問答的形式,比如“微軟學生俱樂部是什麼?”“如何加入微軟俱樂部?”等等,後面比對上标準的答案。
官方網址:https://qnamaker.ai
界面如下:
第一次進入,我們點選Create new Service,進入建立界面。
SERVICE NAME:随便起,我起的BOPdemo。
FAQ URL(S):如果你有相關的URL,可以填寫,沒有可以不寫。樣式參考:http://studentclub.msra.cn/bop2017/qa這種格式。
FAQ FILES:如果有相關檔案可以直接導入,沒有可以不導入,因為最後還可以手動導入。樣例檔案如下:
中間記得用tab鍵隔開。至此,就建立完了。
建立完了之後,你會發現在My services多了一個剛才建立的服務,如下:
點進去之後,效果如圖:
還可以通過Add new QnA pair添加單獨的問題對。添加完了之後别忘了Save and retrain,之後你就可以通過Test進行測試,比如我輸入Hi,機器人回複Hello。
通過URL,File以及單獨添加的問題對都訓練完并且測試滿足條件之後,你就可以Publish釋出了。
這時你肯定想問,怎麼通過自己的代碼進行通路啊?我以C#為例:參考文檔:https://qnamaker.ai/Documentation/ApiReference
Publish之後,會形成如下HTTP樣式:
POST /knowledgebases/<Your KB ID>/generateAnswer HTTP/1.1
Host: https://westus.api.cognitive.microsoft.com/qnamaker/v1.0
Ocp-Apim-Subscription-Key: <Your Subscription key>
Content-Type: application/json
Cache-Control: no-cache
{"question": "Question goes here"}
請求的代碼:
string responseString = string.Empty;
var query = “hi”; //User Query
var knowledgebaseId = “YOUR_KNOWLEDGE_BASE_ID”; // Use knowledge base id created.
var qnamakerSubscriptionKey = “YOUR_SUBSCRIPTION_KEY”; //Use subscription key assigned to you.
//Build the URI
Uri qnamakerUriBase = new Uri(“https://westus.api.cognitive.microsoft.com/qnamaker/v1.0”);
var builder = new UriBuilder($"{qnamakerUriBase}/knowledgebases/{knowledgebaseId}/generateAnswer");
//Add the question as part of the body
var postBody = $"{{“question”: “{query}”}}";
//Send the POST request
using (WebClient client = new WebClient())
{
//Set the encoding to UTF8
client.Encoding = System.Text.Encoding.UTF8;
</span><span style="color:#008000;">//</span><span style="color:#008000;">Add the subscription key header</span>
client.Headers.Add(<span style="color:#800000;">"</span><span style="color:#800000;">Ocp-Apim-Subscription-Key</span><span style="color:#800000;">"</span><span style="color:#000000;">, qnamakerSubscriptionKey);
client.Headers.Add(</span><span style="color:#800000;">"</span><span style="color:#800000;">Content-Type</span><span style="color:#800000;">"</span>, <span style="color:#800000;">"</span><span style="color:#800000;">application/json</span><span style="color:#800000;">"</span><span style="color:#000000;">);
responseString </span>=<span style="color:#000000;"> client.UploadString(builder.Uri, postBody);
}
View Code
得到的響應格式是JSON,如下:
{ "Answer": "Sample response", "Score": "0" }
4. 開發流程
1) 首先擷取Bot Builder SDK和Bot模拟器
可以去https://docs.microsoft.com/en-us/bot-framework/resources-tools-downloads進行參考。
首先,請下載下傳Bot Framework的SDK,建議下載下傳Bot Framework的Visual Studio的模闆Bot Application。
下載下傳下來的模闆(不用解壓)請直接放置到C:\Users\你的使用者名\Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C# 下面,這樣你在C#下面就可以看到有Bot Application的模闆了。
如果是使用NuGet來下載下傳SDK,請參考:
- 右鍵你的C#項目,選擇"Manage NuGet Packages".
- 在"Browse"的tab頁,輸入"Microsoft.Bot.Builder".
- 點選"Install"的按鈕.
下載下傳模拟器的位址為:https://github.com/Microsoft/BotFramework-Emulator/releases/tag/v3.5.31
選擇.exe那個,直接下一步,下一步就行了。
2)建立一個新項目
快速開始,參考:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-quickstart
建立完之後,預設就是一個完整的項目,可以直接運作。直接點選運作,會打開一個web頁面,位址欄如下:
打開模拟器輸入URL:http://localhost:3979/api/messages
直接點選Connect即可。此時,你輸入一段話,對方就會回一段話,顯示你發送的内容,并說明這句話有多少字元。
這個基本的模型就建好了。
看一下項目目錄,我們需要寫的就是在Dialogs檔案夾下建立Dialog,每次新增完在Controllers檔案夾下的MessagesController.cs中記得更改一下,如圖:
3)将應用釋出到Azure雲
首先注冊中國區Azure雲并申請1元訂閱。
第一步:搜尋引擎輸入關鍵字“世紀互聯Azure”,進入世紀互聯azure官網,并點選申請試用,如下圖紅色框所示
圖1:中國區Azure官網頁面
第二步:點選申請試用後,彈對外連結接,填寫電話号碼與手機收到的驗證碼。
第三步:填寫完驗證碼後将彈出下圖頁面,将必要資訊填入到網頁中。身份證正反面掃描件或者照片均可,建議選手在身份證正反面照片中打上水印,如“僅限申請Azure賬戶使用”,但不應該遮蔽身份證号碼等必要的驗證資訊。
圖2:Azure試用申請表
第四步:送出之後,你将收到一封郵件(可能稍有延遲)。打開你上圖中填寫的郵箱,檢視主題為“Azure一進制試用激活碼”的郵件,郵件正文如下圖所示:
圖3:Azure一進制試用激活碼郵件内容
第五步:執行郵件的正文中的第一步“點選進入輸入激活碼頁”
第六步:執行郵件正文中的第二步,建立使用者賬号并付費完成注冊。第七步的具體過程如下:
- 點選郵件中的連結進入如下界面,填寫相關資訊,由此生成登入賬号。 圖4:填寫資訊
- 設定賬号密碼(密碼需要包含大小寫字母、符号和數字),并填寫手機号擷取驗證碼。 圖5:填寫資訊
- 自動跳轉登入界面,輸入密碼登入。 圖6:登入頁面
- 選擇支付寶,支付一進制錢。 圖7:一進制訂閱支付頁面
第七步:收到主題為“由世紀互聯營運的 Windows Azure 購買确認”郵件以及主題為“歡迎使用 Windows Azure Active Directory”表示azure注冊成功。具體圖檔分别如下圖8和9所示:
圖8:郵件主題為“由世紀互聯營運的 Windows Azure 購買确認”截圖
圖9:郵件主題為“歡迎使用 Windows Azure Active Directory”截圖
申請完之後,需要用VS連結到中國區Azure,參考:
https://www.azure.cn/documentation/articles/developerdifferences/
也許這一塊你還會有其他很多問題,别着急,在http://studentclub.msra.cn/bop2017/qa肯定能找到答案。
回到VS,點選項目名,右鍵,釋出,最後效果:
此時已經部署到雲了。
4)在Bot Framework網站上注冊應用
登入 Bot Fraework網站,https://dev.botframework.com/ 如果你還沒有賬号,請先注冊一個。
點選"Register a Bot"https://dev.botframework.com/bots/new 注冊一個
填寫相關的資訊:
"Name":你的bot的名字,比如我的叫做"萌萌"。
"Bot Handle":随便寫一串字母,比如我的寫"mengmeng",其實就是你的Bot的id。
"Description":你的Bot的描述,會在你的publish之後首頁上顯示。
下面需要填寫你的endpoint,就是你背景服務的位址:https://你的伺服器位址/api/messages (剛才咱們釋出的template的預設接口)
你需要點選"Create Microsoft App ID and password",建立App ID和Password(注意,切記把這個app password記下來,隻顯示一次)
下面的必填的一些選項随便填一下就可以了。
點選儲存。
在右邊的"Channels"裡頭可以看到"Web Chat",這個網頁端的一個channel,已經幫你寫好的一個frame,咱們點選"Edit"更新。
生成Web Chat的密鑰之後,把密鑰複制,點選"I'm done configuring Web Chat"。
5)更新你的後端服務
在你的Web.config裡,填上你的botId,剛才建立的App ID和app password。
打開網站的起始頁default.htm
複制以下代碼:
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<html>
<head>
<title>小馳</title>
<meta charset="utf-8" />
</head>
<body style="font-family:'Segoe UI'">
<iframe name="myframe" scrolling="auto" width="100%" height="100%"
onload="document.all['myframe'].style.height=myframe.document.body.scrollHeight"
src="https://webchat.botframework.com/embed/mengmeng?s=你 自 己 的 Web Chat 密 鑰 " style="height: 502px; max-height: 502px;"></iframe>
</body>
</html>
然後右鍵項目工程,點選"publish",之後你就可以擁有一個簡單的Bot啦。
注意:此時你再想通過模拟器調試,需要加上app id和password了。
學習資料:
http://studentclub.msra.cn/bop2017/qa
http://studentclub.msra.cn/bop2017/rules/learning
以下這篇文章主要介紹微軟的對話機器人架構,轉載自
https://blog.csdn.net/weixin_33979745/article/details/85926649
實作的大緻效果是可以詢問微軟俱樂部的相關情況,并且查詢天氣。效果示範如下:
下面我會将整個過程進行詳細的表述。
1. 什麼是Bot Framework?
Bot Framework就是幫你快速搭建智能服務的後端,快速在各種終端和服務上提供服務。包括三大元件。
Bot Builder SDKs:
這個是Bot的生成器,快速生成一個ASP.NET和Node.js的後端服務,提供了像Dialog、FormFlow幫你管理與使用者的會話。
Bot Connector:
這是個Bot的Channel,幫你把你的服務快速釋出到各個管道,比如說Skype,Facebook Messager等等。這樣使用者就可以在Skype等Channel上使用你的服務了。
Bot Directory:
這個算是Bot 的商店,在這裡可以找到各個bot,你也可以把自己的Bot釋出出來,進而大家都可以看到你的Bot。
官方網址:https://docs.microsoft.com/zh-cn/bot-framework,用你的微軟賬戶登入就行。
界面如圖所示:
2. 什麼是LUIS?
說到LUIS,我們首先談一下Cognitive Services(認知服務)。
Cognitive Services(認知服務)的前身是Project Oxford(牛津計劃),正式釋出的時候更名的。這是微軟将研究院研究的技術以API和SDK的形式開放給開發者的一系列智能化服務。
主要包括5大類的服務:視覺、語言、語言、知識和搜尋。
其實就包括我們今天要講的"語言了解(Language Understanding Intelligent Service,簡稱LUIS)"。
LUIS的官網介紹:https://www.luis.ai,用你的微軟賬戶登入就行。
界面如圖所示:
點選"App"這一欄,咱們先點選"new App"建立一個app。
建立完成後,點選應用的名稱,進入編輯這個應用。
我們先看以下左邊的tab,可以看到有儀表盤,意圖(Intents),實體(Entities),功能以及釋出應用。。。。
Intents:就是意圖,比如咱們現在要提供天氣查詢的服務,那麼咱們就建立一個"查詢天氣"的Intent。
實體裡頭有兩類:
Entities:實體,比如在查詢天氣的時候需要有地理位置資訊,需要把使用者的語言裡頭的地點提取出來,這個地點就是這個句子裡頭的執行個體,咱們建立一個"地點"的執行個體。
Pre-built Entities(預建實體):這個是預置好的執行個體,比如說時間,數字等等,我加了一個datetime的預置執行個體。
在功能裡頭會有:
Phrase List Features(短語清單功能):固定的一些短語,能夠直接識别,比如說航空公司的名字等已知資訊
Pattern Features(模式功能):正規表達式,可以比對出相應的一些字段,比如說航班号。
咱們現在來建立一個能夠識别查詢天氣的語言了解服務。
首先,查詢天氣需要地點資訊,咱們先建立一個"地點"的執行個體。
點選到“實體”裡頭,“添加自定義實體”:
添加一個“預建實體” datetime:
再建立一個叫做"查詢天氣"的Intent。
點選save之後會出現以下界面:
在“句式”中,輸入幾個例子,比如說“北京天氣怎麼樣”,可以多輸入幾個句子的類型,比如“北京今天有霧霾嗎?”等等,沒輸入完一句按一下回車。
如果北京等地點資訊沒有顯示标記的話,選中北京兩個字,然後選擇"地點"标注。然後點選"儲存"。
之後點選"釋出應用",點選該界面裡頭的"Train"按鈕。
開始訓練,可能需要點時間,你可以做點其他事情。
訓練完成之後,Publish按鈕,釋出成api的形式。
大家可以看到有“Endpoint url”這個選項,這個url後面加上查詢語句就是API了。
如:https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/LUIS_APP_ID?subscription-key=LUIS_subscription-key&timezoneOffset=0.0&verbose=true&q=北京今天天氣怎麼樣?
把LUIS的ID(就是apps後面那串字元)和subscription-key記下來,後面需要用到。
在URL後面可以輸入相關的語句,然後回車,就可以看到傳回的json字元串了。
3. 什麼是QnA Maker?
QnA Maker可以建立、訓練并釋出一個基于問題對的智能比對,可以通過簡單的訓練來組織問題對,特别适合處理的就是标準問答的形式,比如“微軟學生俱樂部是什麼?”“如何加入微軟俱樂部?”等等,後面比對上标準的答案。
官方網址:https://qnamaker.ai
界面如下:
第一次進入,我們點選Create new Service,進入建立界面。
SERVICE NAME:随便起,我起的BOPdemo。
FAQ URL(S):如果你有相關的URL,可以填寫,沒有可以不寫。樣式參考:http://studentclub.msra.cn/bop2017/qa這種格式。
FAQ FILES:如果有相關檔案可以直接導入,沒有可以不導入,因為最後還可以手動導入。樣例檔案如下:
中間記得用tab鍵隔開。至此,就建立完了。
建立完了之後,你會發現在My services多了一個剛才建立的服務,如下:
點進去之後,效果如圖:
還可以通過Add new QnA pair添加單獨的問題對。添加完了之後别忘了Save and retrain,之後你就可以通過Test進行測試,比如我輸入Hi,機器人回複Hello。
通過URL,File以及單獨添加的問題對都訓練完并且測試滿足條件之後,你就可以Publish釋出了。
這時你肯定想問,怎麼通過自己的代碼進行通路啊?我以C#為例:參考文檔:https://qnamaker.ai/Documentation/ApiReference
Publish之後,會形成如下HTTP樣式:
POST /knowledgebases/<Your KB ID>/generateAnswer HTTP/1.1
Host: https://westus.api.cognitive.microsoft.com/qnamaker/v1.0
Ocp-Apim-Subscription-Key: <Your Subscription key>
Content-Type: application/json
Cache-Control: no-cache
{"question": "Question goes here"}
請求的代碼:
string responseString = string.Empty;