手把手教你搭建聊天機器人(LineBot+Python+QnAMaker+Heroku)-01建造QnaMaker
近期於下班後打造了幾個Chatbot累積了一些心得。
有感自己從0到組裝出一個可以動的聊天機器人,學習資料皆是來自各大網站資源,自己也應該做一些貢獻及回饋。
系統目標
我們希望開發一個LINE聊天機器人,能夠回答使用者的問題
在這個Scenario,我們假設這是一個日本雪場基本資料聊天機器人。
當使用者輸入雪場名字時,會回答有關日本各大雪場的基本資料。
(不好意思因為我最近很迷滑雪,哈哈)
系統規劃
以下是我們完整的系統規劃。
前置技能
- 基礎Python能力(Linebot後端)
- Command Line能力(Heroku部署,Run Django)
- Git能力(Heroku部署)
需要使用到的工具
- Microsoft Azure: QnAMaker:AI語意識別模組,透過輸入題庫及答案,丟進去給QnAMaker訓練,輸入類似問題時會自動比對出對應的答案。
- Python + Django:搭配Python Line Bot API ,開發自動回應LINE訊息的後端服務Server。
(我沒基礎怎麼辦,請參考:Django Girls教學,我也是從這網站學的) - Heroku + Git:部署我們的Linebot後端服務Server
- Line Developer管理:須申請Line Developer帳號(或Line生活圈帳號)
Workshop 01:建置QnAMaker
在這個章節,我們可以不用寫程式!!!(撒花撒花)
QnaMaker是什麼?
這是一個微軟提供的人工智慧服務,會將匯入的題庫丟進去訓練,當使用者詢問類似問題的時候,透過自然語言分析,找出對應的問題及答案。
現在很多聊天機器人,其實大多在做知識庫的Question & Answer。
例如很多客服人員,其實手上都有針對各個問題的處理SOP。而QnAMaker就是把問題及處理SOP(答案)存在他的資料庫裡面。再進行語義分析及訓練。
假設題庫裡有個問題叫:「我的信用卡掉了怎麼辦」,
答案是:「請立即撥打XXX電話,為您暫時停卡...」
下次有其他使用者問:「信用卡不見了。」
即使問的問題略微不同,在語義訓練之後,QnAMaker也能給出正確的答案喔。答案是:「請立即撥打XXX電話,為您暫時停卡…」
當我們有充分的知識庫,若使用者問到我們知識庫裡面有的問題,我們透過自然語言分析,找到知識庫裡面對應的問題及答案,立刻就可以回答他囉!
為什麼我們要使用QnAMaker?
- 我不會做自然語言分析
- 操作簡單,不用寫程式!!
QnAMaker解決我們上述兩個問題,他後面的演算法是個黑盒子,我們只需要把題目匯入,點選訓練,就可以得到我們的知識庫 Model囉!
在這個教學我們會先使用QnAMaker Preview教學,而不是Genarally Available版本。兩個的服務差別在於一個不要錢一個要錢。GA如果不想付費使用免費版,有很多request的限制(一秒內request的次數)以及可上傳的問題檔案數量。
開工囉!(請先申請Microsoft帳號)
前往QnaMaker網站:https://www.qnamaker.ai/old(preview)
1. 點選Create new service
2. 開始建置自己的QnaService
我們輸入ServiceName之後,可以選擇匯入FAQ網頁連結,以及自製的FAQ檔案。
QnAService可以處理的Faq網頁範例,通常是格式良好,問答清楚得網頁,直接貼到URL(S)就可以囉。在這邊因為我沒有建置相關FAQ網頁所以跳過此步驟,僅匯入自己的snowqna.tsv檔案建置知識庫。(大家還是可以測試看看貼上Faq類型的網頁,QnaMaker會幫你做的處理,我覺得超級強大的啊啊啊)
3. 上傳我的知識庫檔案
在此我建立了一個用Tab(鍵盤上)分隔的snowqna.tsv檔案。裡面存的就是很單純的問題(Question?)答案(Answer),中間用Tab鍵區隔。
4. 建立知識庫
很好!有沒有看到你的知識庫及微軟版聊天機器人已經建立好了!
我:恭喜你已經完成你的人工智慧聊天機器人了!!!!!
讀者:什麼?我只是上傳我的問題跟答案檔案啊!
我:那讓我們來測試看看吧!
4. 測試知識庫QnA聊天機器人
點選Test頁籤,會看到一個長得像聊天室的視窗。裡面已經內建一個問題Hi跟Hello的答案(預設建置在你的知識庫)
你輸入剛才匯入的問題(類似的問題也可),QnA服務剛才訓練的Model,就能為你找出對應的答案並自動回答喔。
其實訓練完之後,微軟為了讓你能夠進行輕鬆測試訓練成果,接了他們另一個服務(Microsoft Bot Framework,建議參考maduka大大的教學文章),也就是可以串接各大平台的聊天機器人服務(FB, Skype, Slack等等),這邊串接的就是微軟自己的Chatbot。
不過因為我們要串接的是LINE BOT,且不打算使用Bot Framework,所以我們要部署(Deploy)成一個Service,讓其他程式可以呼叫使用。
5. 部署QnAService
部署成功後會看到一個Service相關Endpoint資料。
(服務的地址及Key記得要藏好不要被別人知道啊,注意Preview版及GA版的Header及Host位置略有不同。)
有了這之後就能發問題request過去,QnAService就會找答案給我們了。
可以透過Chrome插件(Rest Client)進行Endpoint測試。
- 設定(Preview版本)EndPoint(https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/{你的QnAMaker UUID}/generateAnswer)
- 設定Header(Content-Type, Ocp-Apim-Subscription-Key)
- 於Body輸入問題
- 點選Send即可於下方看到200 OK Response及對應答案
在下一個章節,我會會透過Python程式去發Request(問題),跟這個Endpoint要資料(答案)喔!
次回預告:
使用Python去發送問題及取得答案,並Parse成我們想要的格式