2018年12月13日 星期四

使用Dailogflow建立APS Q&A聊天機器人

前言
Dialogflow(前身為Api.ai)被google買下並開放給一般用戶,本身服務為處理NLP的自然語言
處理引擎,包含理解上下文會話的能力。
講白點其實就是聊天機器人(chatbot)的後台,目前比較耳熟能詳的服務例如Siri,卡米狗,google
助理等,其它像是淘寶文字客服,FB,Line,Skype等聊天機器人都算是此類的應用,大家應該都不
陌生。
那要怎樣建立聊天機器人? Google下會發現有非常多的Open Source的程式範例可參考,
前提是你需要寫程式,不管是後台前台都要。
那Dialogflow可以幹麻? 他可以允許用戶不需要寫程式就建立NLP引擎,只需要在網站上
建立多組QA,即可設計出屬於自己的交互式交談服務。

Dailogflow的基本組成:
Intent:使用者的意圖。
Entity:語句關鍵字。
Fulfillment:通過設置webhook,串API完整你設置的服務。


讓我們開始吧!
打開Dialogflow網站,新增一個agent命名為APSQQ,如下圖需要設定預設語言與時區。
我們會使用google提供的agent打造一個交談式服務,提供用戶問答並回饋基於業務規則的
回覆給用戶。







服務機器人流程圖
我們希望agent提供回覆訂單為何會遲交的原因? 假設用戶會問『請問訂單規劃交期為何?』,
『可以問訂單遲交原因嗎?』,『訂單遲交分析?』等,可以發現一個問題可以用很多種方式
表達,但是可以發現這些表達的語句都有相似的名詞在其中,這些名詞就是Entity
我們可以抽取entity為訂單及遲交兩個名詞,抽取的動作仰賴於業務規則,很需要人的domain know-how

先建立[訂單]的entity,如下圖,同時要定義訂單的相關同義詞(小技巧:可以用google翻譯
取得同義詞)


建立[遲交]的entity



接著建立Intent(意圖)
在Training phrases可以輸入用戶可能會問的語句,最好可以提供10~20組讓Dialogflow可以
學習,這邊要特別說明,交談式問答每個問題都算是一個Intent,其實滿囉唆的。
下圖中可以看出『可以幫我查訂單的遲交原因嗎?』, Dialogflow會自動標示其中對應的entity,
這些entity可能是我們自己建立的(如訂單,遲交原因),也可以是系統內建的,
像是時間,日期,區域等。

有標示到的entity會出現在Action and parameters區塊,這些parameters會傳遞給後台處理,
等於用戶用自然語言問的問題其實會拆解成intent+parameters給後台,會寫程式的人看到這邊
應該就知道是怎麼回事。



接著建立Intent對應的回覆(Responses)
預設提供文字回覆,也可以使用Custom payload自訂回覆的內容(Json格式)。
如下圖,這邊我們只需要回覆『請提供訂單單號』文字即可,在圖中還可以看到
set this intent as end of conversation是指此回覆後是否就結束整個交談。


接著建立提供訂單單號後的下一個交談(Intent),如下圖紅框。


可以看到此交談是期待用戶提供訂單單號,所以這邊要解析可能的訂單單號格式,如下圖提供
很多種不一樣格式供後台識別。


上面每個輸入的單號都要辨識為order_number(parameter),有時系統會辨識錯誤,像是
打12345678就會辨識成內建的號碼,這時可以手動辨識(更改)為order_number,可以看
到上面輸入的單號都是粉紅色底,表示都是辨識為同一個order_number。


這個Intent我們期望後台可以回覆訂單遲交的原因,很明顯後台必須根據傳入的
參數(order_number)查詢資料庫,然後回覆結果。文字回覆的內容無法滿足這項需
求,所以要改程式處理,Dailogflow提供Fulfillment可以讓你在線上寫程式(Node.js)
回覆結果,也可以使用外部網站提供的Webhook做這件事。這裡我們選擇用線上寫程式。


我們在FireBase(google提供的雲端資料庫)建立測試資料,如下圖


Fulfullment的線上編輯器如下圖,根據用戶提供的訂單單號查詢資料庫後回覆結果




模擬交談示意圖

沒有留言:

張貼留言

為APS產品添加智慧問答助理

  痛點 在現今服務至上環境下 , 即時回覆客戶問題以提升顧客滿意度儼然成為企業、服務業不可或缺的服務之一。但即時回覆問題所需付出成本內、外部分析如下, 如何解決此問題為本報告所要說明的部分。 Ø  因客服團隊人力需求較高且基本工資持續上升,人力資源成本持續上漲。 Ø  排程系統...