Dialogflow Documentation | Google Cloud
Virtual agents for bots, applications, services, and devices.
什麼是 DialogFlow?
下面是google doc 的簡單介紹 :
Dialogflow 是一個自然語言理解平台,可讓您輕鬆地設計出對話式界面並將其集成到您的移動應用、網頁應用、設備、聊天機器人、交互式語音響應系統等等中。借助 Dialogflow,您可以提供新穎且引人入勝的交互方式,供用戶與您的產品交互。
Dialogflow 可以分析來自客戶的多種輸入,包括來自電話或錄音等的文本或音頻輸入。它還可以通過文本或合成語音等多種方式響應您的客戶。
透過diagflow來建立聊天機器人,你需要先知道兩個重要的 terms :
-
intent (意圖),這個代表的是你的用戶想要做的事情,是一種行為。舉例來說:可以幫我預約嗎? 可以幫我連接客服嗎?
-
entities (形體),這裡因為跟語言相關,我就稱它作關鍵字吧! 如果我們當 intert是動詞的話,那 entities 就是名詞的聚集。舉例來說:語言的entities可以包含 German, French, English, Chinese, etc..
這邊我來舉個混合 intent 跟 entity 的例子如下 :
-
這個例子是客戶想要預約酒店
可以幫我預約威斯丁酒店嗎?
這裡的預約就是 intent, 而威斯丁酒店就是 entity
到這裡,你知道要使用dialogflow 做聊天機器人的兩個重要的 terms是什麼嗎? 答案是 intent and entity
在我們正式做我們的lab之前,讓我們再多聊一些完成 intent 需要的內容跟步驟 。
Intent 意圖
基本意圖包含以下內容: (我這邊用google dialogflow 的 terms, 也方便後面操作DialogFlow UI)
-
Training Pharase:這些是最終用戶可能會說的示例短語。當最終用戶的表述與其中某一短語類似時,Dialogflow 會匹配意圖。因為 Dialogflow 的內置機器學習功能可使用其他相似的短語擴展您的列表,所以您無需定義所有可能出現的示例。
-
Action:您可以為每個意圖定義一個操作。當匹配了相應意圖時,Dialogflow 會向系統提供該操作,您可以使用該操作觸發系統中定義的特定操作。
-
Parameters:在運行時中匹配了某個意圖時,Dialogflow 會將從最終用戶表述中提取的值作為“參數”提供。每個參數都有一個類型,稱為實體類型,用於確切規定提取該數據的方式。與原始的最終用戶輸入不同,參數是結構化數據,可以輕鬆用於執行某些邏輯或生成響應。
-
Response:您可以定義要返回給最終用戶的文本、語音或視覺響應。這些響應可能是為最終用戶提供解答、向最終用戶詢問更多信息或終止對話
-
intent 包含的內容有哪些? training phrase, action, parameters, response
Entity (關鍵字/語體)
每個意圖參數都有一個類型,稱為實體類型,該類型確切規定從最終用戶表述中提取數據的方式。
Dialogflow 提供預定義的系統實體,這些系統實體可以匹配許多常見數據類型。例如,有用於匹配日期、時間、顏色、電子郵件地址等類型的系統實體。您還可以自行創建自定義實體來匹配自定義數據。例如,您可以定義一個 vegetable 實體,來匹配雜貨店代理出售的蔬菜類型。
Context (上下文)
Dialogflow 上下文類似於自然語言上下文。如果有人告訴您“they are orange”,您需要通過上下文才能理解“they”指的是什麼。同樣,為了讓 Dialogflow 處理類似的最終用戶表述,您需要為其提供上下文以正確地與意圖匹配。
您可以使用上下文來控制對話流。您可以為意圖配置上下文,方法是設置由字符串名稱標識的輸入和輸出上下文。匹配了某個意圖時,為該意圖配置的所有輸出上下文都將變為活躍狀態。當所有上下文處於活躍狀態時,Dialogflow 更可能匹配配置了輸入上下文,且該上下文與當前活躍上下文匹配的意圖。
Google dialogflow 文件舉了一個 Bank user 的例子, 用戶問了第一個問題:
what's my checking account? -- user asked
checking account 包含的內容很多, 到底客戶想要知道的是什麼? 所以context (上下文)在這個時候就幫得上忙拉, 你可以定義context, 然後再問更深入的問題.
what's the information do you need for your checking account? -- chatbot replied
my balance - user replied.
所以我們的Dialogflow 透過follow-up intent, 終於知道客戶其實想知道他帳戶目前的結餘. 回覆如下
you balance is 1000
Dialogflow ES basics | Google Cloud
Follow-up Intent 後續意圖
您可以使用後續意圖自動設置意圖對的上下文。後續意圖是相關父意圖下的子意圖。創建後續意圖時,系統會將輸出上下文添加到父意圖中,並將同名的輸入上下文添加到子意圖中。只有父意圖在上一輪對話中匹配時,系統才會匹配後續意圖。您還可以創建多個級別的嵌套後續意圖。
Dialogflow 提供多個預定義後續意圖,旨在處理“是”、“否”或“取消”等常見的最終用戶回复。您還可以創建自己的後續意圖來處理自定義回复。
-
context 上下文是用來做什麼的?
-
context 上下文的對應跟配置要透過什麼機制? Follow-up Intent
接著,我們看看DialogFlow 的版本差異 - Standard and Enterprise,當然,Enterprise 的功能會多一些囉!還有遇到無法處理的狀況,想要開ticket 詢問的話,需要啟動 DialogFlow Enterprise,請各位看官牢記呀!
現在,我們可以來了解一下 Dialogflow 的服務區域,先到DialogFlow 的介面,在左上角,點一下倒三角形(如圖所示),目前有支援 US, Asia, Australia, EU2。其實,小編有個機器人是建立在US, 但是台灣用戶端響應速度飛快!
Create Agent
前面廢話了那麼多,終於可以開始創建 Agent 囉,我們現在就手把手給它做起來!
DialogFlow 控制台 - https://dialogflow.cloud.google.com/
-
選擇你將要運行的DialogFlow 的區域 - US, Asia, Au, EU-2, 選擇後會跳轉頁面喔! (不要怕, 沒事...)
-
幫你的Agent 命名
-
選擇語言
-
選擇 timezone
-
選擇你的 gcp project, 這邊小編有遇到一個小問題, 就是選不到自己的project. 懷疑人生的同時, 也發了張 ticket 問了gcp support, 不過, 目前得到的資訊是一個gcp project 似乎只能建立一個Agent在一個區域, 有更新的話, 小編在同步一下大家!
-
按下 "create" 按鈕, 創建完成
大家是不是建立好自己的Agent了? 我的設定如下 :
當你創建完agent後,因為小編沒有使用到audio,所以在speech 那邊有disable speech api,如果你有其他團員也要一起調校Agent,可以在Share裡面把email 跟role 加進來。其他的部分,我們這次不做任何的更動。後面如果要刪除Agent,按鈕在general 頁面的最下面,按下"DELETE THIS AGENT",然後手打字 "DELETE",就可以刪除囉!
-
General - 刪除的按鈕在這裡
-
Language - 小編選擇的是 繁體中文-台灣
-
ML Settings - 機器學習的設定
-
Export and Import - 你可以匯入或匯出Agent 的設定
-
Environment - 你可以為你的Agent 做版空
-
Speech - 語音設定在這裡
-
Share - 隊員設定在這裡喔!
-
Advanced - 這裡有個功能是判定客戶的心情 sentiment, 這邊並沒有使用到
你已經建立了自己的Agent 了嗎? 有了自己的Agent後, 我們接著來設定 intent 跟 entity吧! 大家還記得什麼是 intent 什麼是 entity吧?
首先 我們來設定 intent
-
Default Welcome Intent
-
training phrases - 我加了幾個大家常用的英文
-
responses - 我改了單純的問好,把它變成問句,是不是覺得有熟悉感? 沒錯,這裡我想做的事就是釐清客戶想問的問題,當客戶再次問問題,我們可以在其他的intent 處理!
-
完成設定後,記得按一下 "SAVE" 儲存,我們來試試看剛剛的修改是否已經被套用,response 小編設定了三個,它會隨機挑選做回覆(CURL 的例子也可以試試看喔!)
User Says: hi
Response: 安安,飯店小幫手在此為您服務,有什麼可以幫忙嗎?
小編在創建新的intent 前,請讓我先跳到 entities 的設定,因為我們要下training phrases 的時候,會用到的,嘿嘿...
設定Entities
-
按下 CREATE ENTITY
-
下面的兩個簡圖是我的 Hotel 跟ROOM entities
接著,我們回到intent,我們準備創建 新的 intent囉 !
創建新的intent - booking_room
要完成訂房的intent 需要 :
-
日期
-
人數
也因為我們需要這兩個資訊才能完成這個 intent。
1. 建立第一個intent - booking_room
2. 建立 follow-up intent,點一下黃色箭頭處, 建立一個新的booking_room-date 的intent
training phrases and response 如下 :
若我們想要在回覆的訊息(response)中,回應日期的話,可以透過呼叫變數達成 ($date-time)
3. 最後一個intent - booking_room-date-people,讓我們確定同行的人數,呼應上一個intent,設定如下:
-
到此為止, 我們除了welcome intent, 另外自己設定了三個intent, 你完成了嗎?
-
training phrase 裡面會抓取 entities, 你有發現了嗎?
-
response 可以透過提取變數的方式, 來加在回應裡面, 該如何呼叫變數?
進行chatbot 測試
我們將利用不同的方式來測試我們剛剛設定的agent,包含修改/新增的intent,entities。在上一個篇幅裡面有提到,客戶訂房是一個連續性的問題,所以我們的flow 如下:
在DialogFlow 上面,進行測試,試著將客戶要問的phrases 打進去,看看Agent 會如何回答:
在 web 上面測試,這時候小編發現了一件會GG爆裂的surprise,就是Asia 的DialogFlow 竟然跟US的不一樣,沒辦法直接使用web,有沒有很驚奇很開心? 好加在,我們可以試試export/import zip 的方式在其他 region 回復如下圖所示:
Web demo,需要在左邊side menu,選擇integration,然後在右邊的主選單,你會看到web-demo,別懷疑,給他選下去,如下圖所示,你可以embedded 到你的web 頁面,沒有網頁也沒關係,你可以用上方的連結,進行測試。
利用curl 來發問跟接收 response,可以透過copy CURL來進行測試
Line的測試 - 這裡需要你有 註冊 line developer才能使用的功能,這邊小編就不提供line developer 申請的細節囉,跟剛剛web demo 一樣,點擊 integration,然後找 line,如下圖:
總結
DialogFlow 確實是一個很便捷很聰明的服務,簡化了不少開發的工,在設計intent,follow-up intent其實蘊藏了很多細節,希望這個文件可以幫到大家,也歡迎大家可以給我反饋!