透過 Amazon Lex Conversation Logs 來監控和改善聊天機器人與使用者的互動
前言
大家或多或少都和聊天機器人對話過,像是 Facebook 粉專經常會有類似「按讚本篇貼文,並私訊粉專你想知道的大補帖,小編免費回覆給你!」的宣傳文,按照指示操作後,過不了 10 秒,粉專就會回覆你約定好的獎勵。而這其實就是聊天機器人的一種應用。
什麼是聊天機器人?聊天機器人又稱為 ChatBot,利用電腦程式模擬真人的說話方式來跟使用者對話。ChatBot 應用的層面相當廣泛,可用於網路購物、訂餐、線上客服等等服務,根據使用者提問中的關鍵字,給予制式化的回覆,例如:「我們有提供…的餐點/服務;您可以選擇…類型的產品」,藉此能幫助企業 24 小時與使用者聯繫,節省人力成本;也可幫助後台人員優先過濾已具有 SOP 解決方式的使用者需求,讓後台只需接收需要人工彈性判斷的請求,降低工作量。
然而,ChatBot 經常面臨的挑戰是「回覆的準確性」。由於 ChatBot 是回覆預先設定好的內容,一方面容易讓人感覺「缺少人的溫度」,一方面無法彈性的與人對話,有時會導致回覆的內容無助於解決問題。
以一個旅遊景點介紹的 ChatBot 為例,使用者想詢問「台北車站」的介紹,ChatBot 可以辨識「台北車站」為關鍵字,卻可能無法辨識像是「北車」這類當地人自行衍生出來的簡稱,所以當有人輸入「北車」就會導致 ChatBot 無法回覆使用者需要的內容。
面對上述的問題,開發者可以透過檢測 ChatBot 回覆的內容是否符合使用者的需求來優化 ChatBot。如果發現使用者經常提出的新需求,開發者也可考慮增加 ChatBot 其他的應對方式,才可提升 ChatBot 的實用度。
用 Amazon Lex 創建自己的 ChatBot
Amazon Lex 是一種可使用語音和文字在任何應用程式建立交談界面的服務。可用於建立 ChatBot,根據開發者預先定義的關鍵字,觸發對應的回覆內容,或是與 Lambda 串接以採取其他處理的動作。
Lex 主要由三個 Components 組成,分別為 Bot、Intent、Slot。
-
Bot:自動化執行的 ChatBot,開發者可依據使用情境命名 ChatBot 的名稱,例如:
CoffeeOrderBot
負責處理咖啡的訂單;BankCallCenter
負責銀行的客服;ScheduleAppointment
負責為使用者管理行事曆等等。 -
Intent:代表使用者想要執行的動作,類似於一個「情境」。例如:
OrderCoffee
表示「想要購買咖啡」的情境,當 Bot 接收到與OrderCoffee
這個 Intent 對應的觸發詞(例如:我想訂咖啡)時,就會進入「購買咖啡」的情境。至於如何處理 Intent,開發者可選擇開始一系列的對話、觸發另一個 Intent,或是串接 Lambda 做運算處理。 -
Slot:可當作 Intent 中的參數,類似於「情境中可接受的回覆」。Slot 會先提供引導式的問句,讓使用者較容易回覆 Slot 可以辨識的值。例如:在
Intent: OrderCoffee
裡有Slot: CoffeeSize
,而CoffeeSize
能接收的回覆有Small
、Medium
、Large
三種,因此當使用者收到提示句(例如:咖啡需要大杯、中杯,還是小杯?)時,使用者可以明顯知道選項有哪些,進而回覆Small
、Medium
、Large
三者之一。
在接下來的案例中,我們會建立一個用於接收咖啡訂單的 ChatBot,當使用者輸入"I want to order coffee."
時,會進入 Intent: OrderCoffee
,第一個 Slot: CoffeeType
會提示 "What kind of coffee would you like?"
,使用者僅能回覆 Latte
、Mocha
、Black
三種,接著才會進入下一個 Slot,全部 Slots 進行完才滿足這個 Intent。
實作方式
從案例中,我們可以發現 Slot 能接受的回覆不多,在提示詞中也沒有明確標示咖啡的種類,因此容易產生使用者不知道選項有哪些的情況,導致使用者輸入無法辨識的回覆,ChatBot 也就無法幫助使用者完成想執行的動作。
面對上述的情況,我們可以透過啟用 Conversation Logs 來記錄 ChatBot 與使用者對話的過程,藉此了解使用者需求,進而改善 ChatBot 回覆的內容。開發者可選擇將 Conversation Logs 放在 CloudWatch Log Group 或是 S3 Bucket 裡,這次我們選擇放在 CloudWatch Log Group,以利使用 CloudWatch Log Insights 來 query 出可用於分析的資料。
- 建立好 ChatBot 後,可以串接 Slack Workspace 或是 Facebook Messages 測試 ChatBot 的對話情形。
- 與 ChatBot 對話的紀錄都會記錄在 CloudWatch Log Group 裡,格式如下:
{
"messageVersion": "1.0",
"botName": "CoffeeOrderingBot",
"botAlias": "Prod",
"botVersion": "2",
"inputTranscript": "hi",
"botResponse": "What kind of coffee would you like?",
"intent": "OrderCoffee",
"slots": {
"SizeType": null,
"CoffeeType": null,
"SugarType": null
},
"missedUtterance": false,
"inputDialogMode": "Text",
"requestId": "666ff7ec-4702-444d-a71a-cdc72ea018a3",
"userId": "6e069ae7-8f78-4899-8666-ccb7d2c2a2d9:T01139D1FPZ:U010R7QMCQH",
"sessionId": "2020-04-30T02:05:33.739Z-EIjLxNqk"
}
- 透過 CloudWatch Log Insights 下 query 指令尋找
"missedUtterance": true
的 Logs 中,使用者輸入的"inputTranscript"
。
-
從中可以得知,使用者經常詢問咖啡的種類,我們可以透過提供更多說明性的文字來讓使用者了解選項;針對知道種類卻難以下決定的使用者,ChatBot 也可以提供當月推薦的品項給使用者,進而利用行銷策略推廣產品。
-
此外,也可以觀察
"inputTranscript"
跟"botResponse"
來檢測 ChatBot 的回覆是不是符合使用者的期望。
- 取得這些資料並優化 ChatBot 的回覆,使得 ChatBot 可以更貼近使用者的需求。
結語
ChatBot 固然方便,隨時隨地可幫助開發者回覆使用者的需求,但仍需要經過實測才可知道當前使用者是否能夠受惠於 ChatBot 的便利性。透過蒐集 Conversation Logs 來獲取使用者的回饋,我們可以得知更多改善的方向,不僅可以提升使用者體驗,也可以幫助節省人事成本。