打造我的聊天機器人!
系列二:Wit-AI 的語句對話實作
Wit.ai 在2015年年初的時候加入 Facebook 家族,到2016年4月發佈了新版本的 Bot Engine,在本文將會介紹如何使用這新的Bot Engine。
首先到Wit.ai官網註冊帳號,我是選擇GitHub授權登入:
登入後可以從右上方menu區選擇New App新增一個機器人服務(App)。
填入 App名稱和描述後,記得把語言改成Chinese,因為我們將會使用中文來與機器人對話。
按下建立後,會來到App的Stories頁面,在這將要把可能的對話輸入給機器人,讓機器人知道該如何應對。
在以下範例將會示範如何製作一個點菜單的機器人,所以可能的情境就是會有客人來點餐,而遇到有禮貌的客人,可能會說你好,因此我們把這對話輸入給機器人:
其中最重要的關鍵字(entity)就是你好,所以我們把你好定義為hello變數:
接下來可以按Bot sends…,這樣就會出現say的區塊,意思是機器人聽到你好的話要回應什麼話。
接下來可以按下左邊的+ CREATE STORY按鈕,再來新增其他可能的對話:
接下來就可以新增其他對話,例如客人可能會說,我要鮭魚一份,這句話的關鍵字會有兩個,一個是產品種類,另外就是數量,所以我們就把產品種類宣告為sushi的變數,而數量就用內建的wit/number變數,最後是新增一筆機器人的回應。
最後一則對話則是我要結帳,本文先不介紹怎麼計算金額,先有機器人的回應就好。
產品的種類可能不只一種,所以可以到Understanding頁面編輯關鍵字的清單:
例如sushi,那就在sushi按鈕上點一下,這時可以看到關鍵字清單只有一個,意思是目前只支援一個產品種類:
假設想新增加一個產品種類,可在Add a new keyword區塊新增:
新增完成之後,可在別名(Aliases)欄位中新增其他可能性,意思是如果客人只有說比目魚一份,那也代表是點柚香比目魚握壽司:
如果全部菜單都新增完後,可在Settings頁面中看到Server Access Token,意思是可透過這組Token來與App互動:
在開始撰寫範例之前,先到以下網址下載我寫的「wit.ai 模組(witai-simple.js)」,這模組是修改自 wit.ai 的 quickstart.js,在使用這模組之前要先安裝 node-wit:
npm install node-wit
在 init 函數中,主要是兩個修改,第一個是say函數,新增加了26行,把機器人回應的對話存下來;第二個是merge函數,新增加了30到45行,意思是如果有從 wit.ai 的服務收到sushi、number、check、hello等變數,就把這些變數存下來:
wit.ai的實例(instance)建立好後,wit.ai可以支援三種方式對話(API):
- message:只會回傳關鍵字的值,剩下的對話回應就要自己產生。
- runActions:不只回傳關鍵字的值,也會得到機器人的回應對話,就是init函數中的message變數,也就是26行的位置。
- interactive:意思是wit.ai會直接從麥克風收音取得音訊資料,然後直接回傳到機器人服務(App)進行對話。
在目前的範例中,我們將使用runActions的對話方式:
最主要是67行,意思是如果從機器人服務(App)取得資料後,就把關鍵字資料(data)和機器人的對話(self.say)都回傳(callback)回去。
所以下載完wit.ai的模組(witai-simple.js)後,一樣可以可以放在lib資料夾中,接下來把機器人服務(App)的token填入模組中。
var WitAI = require('./lib/witai-simple');
var witai = new WitAI('AKV3RP6T6NXL7ZUVSWKNDQW22LWXIVJJ');
var str_hello = '你好';
var str_order = '我想要比目魚兩份';
var str_check = '我要結帳';witai.init();
witai.runActions(str_order, function(err, data, say){
if(data){
console.log('data:' + JSON.stringify(data));
console.log('say:' + JSON.stringify(say));
}
});
初始化witai模組之後,就可以執行runActions來測試機器人服務(App)是否正確。
詳細的程式範例可以參考以下連結:
如果客人來店裡打招呼的時候是說您好,或是老闆好,那可以把這些關鍵字加到hello變數的別名(Aliases)中,依此類推。