建立 Dialogflow ES 服務專員
本指南說明如何使用 Dialogflow 主控台建構及測試簡單的代理程式。
事前準備
閱讀本指南之前,請先完成下列工作:
- 詳閱 Dialogflow 基本概念。
- 執行設定步驟。
建立虛擬服務專員
如果您尚未建立服務帳戶,請立即建立:
- 前往 Dialogflow ES 主控台。
- 按照系統要求登入 Dialogflow 主控台。詳情請參閱 Dialogflow 主控台總覽。
- 按一下左側欄選單中的 [Create Agent] (建立代理程式)。(如果您已有其他代理程式,請按一下代理程式名稱然後捲動至底部,再按一下 [Create new agent] (建立新代理程式)。)
- 輸入代理程式的名稱、預設語言和預設時區。
- 如果您已建立專案,請輸入該項專案的資料。如要允許 Dialogflow 主控台建立專案,請選取 [Create a new Google project] (建立新 Google 專案)。
- 按一下 [Create] (建立) 按鈕。
將範例檔案匯入代理程式
本指南中的步驟會假設您的代理程式符合某些條件,因此您需要匯入為本指南準備的代理程式。匯入時,這些步驟會使用「還原」選項,覆寫所有介面設定、意圖和實體。
這份指南所用的服務專員是新服務專員,沒有使用者定義的意圖或實體。
如要匯入檔案,請按照下列步驟操作:
-
下載
new-agent.zip
檔案。 - 前往 Dialogflow ES 主控台。
- 選取所需的代理程式。
- 按一下代理程式名稱旁邊的「設定」settings 按鈕。
- 選取「Export and Import」分頁標籤。
- 選取「Restore From Zip」,然後按照操作說明還原下載的 ZIP 檔案。
意圖
「意圖」會針對一回合的對話來分類使用者的意圖。 您可為各個代理程式定義許多意圖,好讓這些意圖能夠合併起來處理完整的對話。
預設意圖
建立代理程式時,系統會為您建立兩個預設意圖:
- 預設歡迎意圖:當使用者開始與代理程式進行對話時,便符合此意圖。 而此意圖會傳回回應,讓使用者知道您的代理程式執行了哪些作業,或是可以說些什麼來展開對話。
- 預設備用意圖:當代理程式無法將使用者表達內容比對到任何其他意圖時,便符合此意圖。
如要查看這些意圖,請前往代理程式的意圖清單:
- 前往 Dialogflow ES 主控台。
- 選取您剛剛建立的代理程式。
- 按一下左側欄選單中的 [Intents] (意圖)。
主控台中間會列出代理程式的意圖。
測試預設備用意圖
Dialogflow 模擬工具位於主控台的右側,使用此模擬工具,您可透過語音或輸入訊息的方式來測試代理程式。
現在就來試用代理程式:
- 按一下「Try it now」欄位。
- 輸入
What is your name?
。 - 按下 Enter 鍵。
代理程式的回應會顯示在「Default Response」(預設回應) 區段。由於您的輸入與任何其他意圖都不相符,所以與預設備用意圖相符,因此會收到其中一個預設回覆。
建立新意圖
本節的步驟會建立可回答「what is your name?」(你的名字是什麼?) 這類問題的意圖。對於每一個意圖,您都要定義許多訓練詞組。訓練詞組是指使用者可能對代理程式輸入或說出的內容範例,也稱為「使用者表達內容」。 您應定義許多訓練詞組,為 Dialogflow 提供各種應與意圖相符的語句。
建立意圖:
- 按一下左側欄選單中位於 [Intents] (意圖) 旁的新增意圖 按鈕。
- 在「Intent name」(意圖名稱) 欄位中輸入
get-agent-name
。 - 在「Training Phrases」區段中,按一下「Add training phrases」。
輸入下列訓練詞組,每輸入一項後都要按 Enter 鍵:
What is your name?
Do you have a name?
Tell me your name
在「Responses」(回應) 區段的「Text Response」(文字回應) 部分中,輸入以下內容:
My name is Dialogflow!
按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
測試您的意圖
在模擬工具中輸入 What's your name?
,然後按 Enter 鍵。
即使該表達內容與您提供的訓練詞組稍有不同,您的代理程式還是能夠正確回應。
Dialogflow 使用訓練詞組做為範例,讓機器學習模型比對使用者表達內容與意圖。模型會將表達內容與代理程式中的每個意圖進行比對,並為每個意圖打分數,然後將分數最高的意圖判定為相符。如果得分最高的意圖分數很低,就是符合備用意圖。
參數與實體
當 Dialogflow 在執行階段比對出相符的意圖時,就會提供從使用者表達內容中擷取到的值做為參數。每個參數都有一個類型,稱為實體類型,此類型會明確指定資料的擷取方式。與原始使用者輸入內容不同,參數是結構化的資料,可輕鬆用於執行某些邏輯或產生回應。建構代理程式時,您可以為部分訓練詞組加註並設定相關參數,藉此控制資料的擷取方式。
建立參數
使用參數建立新的意圖:
- 在左側欄選單中,按一下「Intents」(意圖) 旁的加號 按鈕。
- 在意圖表單頂端,將意圖命名為
set-language
。 - 請新增以下訓練詞組:
I know English
I speak French
I know how to write in German
按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
Dialogflow 會自動偵測訓練詞組中屬於系統實體的參數。 這些實體由 Dialogflow 提供,適用於許多常見的資料類型,如地點、顏色和日期。
在「Training phrases」(訓練詞組) 區段下,Dialogflow 會在「Action & parameters」(動作和參數) 表格中建立資料列:
- Required (必要):核取方塊未勾選,因此這項參數不是必要的。
- Parameter Name (參數名稱):系統將參數判定為一種語言,因此自動將其命名為
language
。 - Entity (實體):這是實體類型。系統將之判定為
@sys.language
系統實體。 - Value (值):這是參照此參數值時所使用的識別碼。
- Is List (是清單):核取方塊未勾選,因此參數不是清單。
在回應中使用參數資料
參數的值可在回應中使用。
例如,建構代理程式時,您可在回應中使用 $language
參數參照。
在執行階段,系統會將其替換為使用者表達內容中指定的語言。
新增使用參數的回應:
- 向下捲動至「Responses」(回應) 部分。
- 新增以下文字回應:
Wow! I didn't know you knew $language.
- 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
測試您的參數
在模擬工具中輸入 I know Russian
。
您可以看到 Dialogflow 正確擷取值為 Russian
的 language
參數,然後在回應中使用參數參照處正確插入了 Russian
。
建立您自己的實體
在大部分情況下,您必須向使用者收集系統實體未提供的特定資料。 您可以建立自訂實體來因應這種情況。
建立自訂實體:
- 在左側欄選單中,按一下「Entities」(實體) 旁的新增實體 按鈕。
- 輸入
language-programming
做為實體名稱。 新增以下實體項目 (資料列):
參照值 同義詞 JavaScript JavaScript、js、ECMAScript Java Java Python Python、py 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
Dialogflow 可處理單複數和大小寫等簡單的差異,但請為項目新增所有可能的同義詞。 新增的同義詞越多,代理程式就越能正確判定實體。
使用新實體
請將訓練詞組新增到 set-language
意圖,以便利用新實體:
- 按一下左側欄選單中的 [Intents] (意圖)。
- 按一下
set-language
意圖。 - 請新增以下訓練詞組:
I know javascript
I know how to code in Java
- 請注意,系統會為這些訓練詞組中的程式設計語言自動加註,然後將其新增至「Action and Parameters」區段中的參數。
- 在「Responses」(回應) 區段中,新增以下第二個文字回應:
$language-programming is an excellent programming language.
。 - 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
測試您的新實體
在模擬工具中輸入 I know how to code in py
。
您可以看到 Dialogflow 正確擷取出 language-programming
參數的 py
,將其識別為 Python
實體,並在回應中插入該值。
背景資訊
如要控制對話的流程,您可以使用背景資訊。
新增後續追蹤意圖
「後續追蹤意圖」可讓您輕鬆控制對話,而不用手動建立和管理背景資訊。
當您建立後續追蹤意圖時,系統會將輸出背景資訊加到父項意圖,並將同名的輸入背景資訊加到子項意圖。 這代表只有在前一回合對話符合父項意圖時,後續追蹤意圖才會比對成功。
為 set-language
意圖新增自訂的後續追蹤意圖:
- 選取您在先前步驟中建立的
set-language
意圖。 - 在「Response」(回應) 區段,更新文字回應:
Wow! I didn't know you knew $language. How long have you known $language?
- 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
- 按一下左側欄選單中的 [Intents] (意圖)。
- 將滑鼠游標移至
set-language
意圖上,然後按一下 [Add follow-up intent] (新增後續追蹤意圖)。 - 在顯示的清單中,按一下 [custom] (自訂)。
- 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
Dialogflow 會自動將後續追蹤意圖命名為 set-language - custom
。
後續追蹤意圖的比對作業
只有在已有相符父項意圖時,系統才會比對後續追蹤意圖。
由於只有在 set-language
意圖之後才會比對 set-language - custom
意圖,因此您可以假設代理程式剛剛向使用者詢問的是 How long have you known $language?
問題。現在,您可以新增訓練詞組來表示使用者可能會針對該問題回答的內容。
- 按一下左側欄選單中的 [Intents] (意圖)。
- 按一下
set-language - custom
意圖。 - 請新增以下訓練詞組:
3 years
about 4 days
for 5 years
- 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
測試您的後續追蹤意圖
在模擬工具中輸入 I know French
,然後以 about 2 weeks
回答 How long have you known French
這個問題。
雖然第二個表達式 (about 2 weeks
) 沒有任何回應,但您可以看到系統將表達式配對至正確的意圖 (set-language - custom
),並正確剖析出時間長度參數 (2 weeks
)。
意圖和背景資訊
檢查 set-language
意圖可看到 set-language-followup
被列為輸出背景資訊,且前面有數字 2。這個數字稱做效期。
比對出 set-language
意圖後,set-language-followup
背景資訊就會啟用,並附加至對話的下「兩」個回合 (效期為 2)。因此,當使用者回應「How long have you known $language?
」這個問題時,set-language-followup
背景資訊就會啟用。
如果您檢查 set-language - custom
意圖,會發現系統將 set-language-followup
列為輸入背景資訊,與 set-language
意圖的輸出背景資訊相同。
如果意圖的輸入背景資訊與啟用的背景資訊相符,Dialogflow 在比對意圖時就會優先選擇此意圖。
背景資訊和參數
背景資訊會儲存參數值,當 set-language
意圖的輸出背景資訊啟用時,您便可存取該意圖所定義的參數值。
在 set-language - custom
意圖中,您只問了使用者學習該語言多久時間,而未要求使用者提及所參照的語言。
如何在回應中參照語言:
- 將
set-language - custom
意圖文字回應更新為I can't believe you've known #set-language-followup.language for $duration!
- 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
#set-language-followup.language
參照稱為已啟用背景資訊的參數參照。
測試背景資訊參數
在模擬工具中輸入 I know French
,然後以 1 week
回應問題。
請注意,language
參數值是擷取自背景資訊。
正式化
在實際工作環境中執行服務前,請務必實作實際工作環境最佳做法。