最新資訊
DialogFlow

輕鬆建立屬於你的聊天機器人!

科技趨勢

【技術文章】DialogFlow輕鬆建立屬於你的聊天機器人!

Dialogflow Documentation  |  Google Cloud 

Virtual agents for bots, applications, services, and devices. 

cloud.google.com 

什麼是 DialogFlow?  

下面是google doc 的簡單介紹 :

Dialogflow 是一個自然語言理解平台,可讓您輕鬆地設計出對話式界面並將其集成到您的移動應用、網頁應用、設備、聊天機器人、交互式語音響應系統等等中。借助 Dialogflow,您可以提供新穎且引人入勝的交互方式,供用戶與您的產品交互。 

‌Dialogflow 可以分析來自客戶的多種輸入,包括來自電話或錄音等的文本或音頻輸入。它還可以通過文本或合成語音等多種方式響應您的客戶。 

‌透過diagflow來建立聊天機器人,你需要先知道兩個重要的 terms :

  1. intent (意圖),這個代表的是你的用戶想要做的事情,是一種行為。舉例來說:可以幫我預約嗎? 可以幫我連接客服嗎? 

  2. 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:您可以定義要返回給最終用戶的文本、語音或視覺響應。這些響應可能是為最終用戶提供解答、向最終用戶詢問更多信息或終止對話 

GetImage.png

  • 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 

cloud.google.com 


Follow-up Intent 後續意圖 

‌您可以使用後續意圖自動設置意圖對的上下文後續意圖是相關父意圖下的子意圖。創建後續意圖時,系統會將輸出上下文添加到父意圖中,並將同名的輸入上下文添加到子意圖中。只有父意圖在上一輪對話中匹配時,系統才會匹配後續意圖。您還可以創建多個級別的嵌套後續意圖。 

‌Dialogflow 提供多個預定義後續意圖,旨在處理“是”、“否”或“取消”等常見的最終用戶回复。您還可以創建自己的後續意圖來處理自定義回复。 

  • context 上下文是用來做什麼的? 

  • context 上下文的對應跟配置要透過什麼機制? Follow-up Intent 

接著,我們看看DialogFlow 的版本差異 - Standard and Enterprise,當然,Enterprise 的功能會多一些囉!還有遇到無法處理的狀況,想要開ticket 詢問的話,需要啟動 DialogFlow Enterprise,請各位看官牢記呀! 

GetImage (1).png

現在,我們可以來了解一下 Dialogflow 的服務區域,先到DialogFlow 的介面,在左上角,點一下倒三角形(如圖所示),目前有支援 US, Asia, Australia, EU2。其實,小編有個機器人是建立在US, 但是台灣用戶端響應速度飛快! 

目前DialogFlow 的服務區域有哪些地方

目前DialogFlow 的服務區域有哪些地方


Create Agent 

前面廢話了那麼多,終於可以開始創建 Agent 囉,我們現在就手把手給它做起來!

‌DialogFlow 控制台 - https://dialogflow.cloud.google.com/ 

  1. 選擇你將要運行的DialogFlow 的區域 - US, Asia, Au, EU-2, 選擇後會跳轉頁面喔! (不要怕, 沒事...) 

  2. 幫你的Agent 命名 

  3. 選擇語言 

  4. 選擇 timezone 

  5. 選擇你的 gcp project, 這邊小編有遇到一個小問題, 就是選不到自己的project. 懷疑人生的同時, 也發了張 ticket 問了gcp support, 不過, 目前得到的資訊是一個gcp project 似乎只能建立一個Agent在一個區域, 有更新的話, 小編在同步一下大家!  

  6. 按下 "create" 按鈕, 創建完成 

GetImage (3).png

大家是不是建立好自己的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 處理!

GetImage (5).png

完成設定後,記得按一下 "SAVE" 儲存,我們來試試看剛剛的修改是否已經被套用,response 小編設定了三個,它會隨機挑選做回覆(CURL 的例子也可以試試看喔!) 

User Says: hi 

Response: 安安,飯店小幫手在此為您服務,有什麼可以幫忙嗎? 

你的welcome intent 是否也改好測試好了呢?

你的welcome intent 是否也改好測試好了呢?

小編在創建新的intent 前,請讓我先跳到 entities 的設定,因為我們要下training phrases 的時候,會用到的,嘿嘿... 


設定Entities 

GetImage (7).png

  1. 按下 CREATE ENTITY 

  2. 下面的兩個簡圖是我的 Hotel 跟ROOM entities 

GetImage (8).png

你設定好了 room 跟 hotel 的 entities 嗎?

你設定好了 room 跟 hotel 的 entities 嗎?

接著,我們回到intent,我們準備創建 新的 intent囉 !


創建新的intent - booking_room 

‌ 要完成訂房的intent 需要 :

  • 日期 

  • 人數 

‌ 也因為我們需要這兩個資訊才能完成這個 intent。

1. 建立第一個intent - booking_room 

GetImage (10).png

GetImage (11).png

2. 建立 follow-up intent,點一下黃色箭頭處, 建立一個新的booking_room-date 的intent 

GetImage (12).png

training phrases and response 如下 :

GetImage (13).png

若我們想要在回覆的訊息(response)中,回應日期的話,可以透過呼叫變數達成 ($date-time) 

GetImage (14).png

3. 最後一個intent - booking_room-date-people,讓我們確定同行的人數,呼應上一個intent,設定如下:

GetImage (15).png

  • 到此為止, 我們除了welcome intent, 另外自己設定了三個intent, 你完成了嗎? 

  • training phrase 裡面會抓取 entities, 你有發現了嗎? 

  • response 可以透過提取變數的方式, 來加在回應裡面, 該如何呼叫變數? 


進行chatbot 測試  

‌我們將利用不同的方式來測試我們剛剛設定的agent,包含修改/新增的intent,entities。在上一個篇幅裡面有提到,客戶訂房是一個連續性的問題,所以我們的flow 如下: 

GetImage (16).png

在DialogFlow 上面,進行測試,試著將客戶要問的phrases 打進去,看看Agent 會如何回答:

GetImage (17).png

在 web 上面測試,這時候小編發現了一件會GG爆裂的surprise,就是Asia 的DialogFlow 竟然跟US的不一樣,沒辦法直接使用web,有沒有很驚奇很開心? 好加在,我們可以試試export/import zip 的方式在其他 region 回復如下圖所示:

GetImage (18).png

Web demo,需要在左邊side menu,選擇integration,然後在右邊的主選單,你會看到web-demo,別懷疑,給他選下去,如下圖所示,你可以embedded 到你的web 頁面,沒有網頁也沒關係,你可以用上方的連結,進行測試。

GetImage (20).png

GetImage (21).png

利用curl 來發問跟接收 response,可以透過copy CURL來進行測試 

GetImage (22).png

GetImage (23).png

Line的測試 - 這裡需要你有 註冊 line developer才能使用的功能,這邊小編就不提供line developer 申請的細節囉,跟剛剛web demo 一樣,點擊 integration,然後找 line,如下圖:

GetImage (24).png

GetImage (25).png

GetImage (26).png

GetImage (27).png


總結 

‌DialogFlow 確實是一個很便捷很聰明的服務,簡化了不少開發的工,在設計intent,follow-up intent其實蘊藏了很多細節,希望這個文件可以幫到大家,也歡迎大家可以給我反饋!