建立 Dialogflow ES 虛擬服務專員
使用 Dialogflow ES 主控台建構及測試代理程式。
事前準備
開始之前,請先完成下列步驟:
- 詳閱 Dialogflow 基本概念。
- 完成設定步驟。
建立虛擬服務專員
- 前往 Dialogflow ES 主控台。
- 如果系統提示,請登入 Dialogflow 主控台。詳情請參閱「Dialogflow 主控台總覽」。
- 按一下側欄選單中的「代理程式」。
- 選取「已部署的代理程式」分頁標籤。
- 按一下「建立代理」。
- 輸入代理程式名稱、預設語言和預設時區。
- 輸入現有專案。如要讓 Dialogflow 主控台建立專案,請選取「建立新的 Google 專案」。
- 按一下「Create」(建立)。
意圖
「意圖」會針對一回合的對話來分類使用者的意圖。您可為各個代理程式定義許多意圖,好讓這些意圖能夠合併起來處理完整的對話。
預設意圖
建立代理程式時,Dialogflow 會為您建立兩個預設意圖:
- 預設歡迎意圖:當使用者開始與代理程式對話時,系統就會比對此意圖。此意圖會傳回回應,讓使用者知道代理程式的功能,或可說出什麼內容開始對話。
- 預設備用意圖:當代理程式無法將使用者表達內容比對到任何其他意圖時,便符合此意圖。
如要查看這些意圖,請前往代理程式的意圖清單:
- 前往 Dialogflow ES 主控台。
- 選取您建立的代理程式。
- 按一下側欄選單中的「意圖」。
Dialogflow 主控台中間會列出代理程式的意圖。

測試預設備用意圖

Dialogflow 模擬工具位於主控台的右側,使用此模擬工具,您可透過語音或輸入訊息的方式來測試代理程式。
現在就來試用代理程式:
- 按一下「立即試用」欄位。
- 輸入「
What is your name?」。 - 按下 Enter 鍵。
代理程式的回應會顯示在「Default Response」(預設回應) 區段。由於您的輸入與任何意圖都不相符,所以與預設備用意圖相符,因此會收到其中一個預設回覆。
建立意圖
本節的步驟會建立意圖,回答「你的名字是什麼?」這個問題。您必須為每個意圖定義許多訓練詞組。訓練詞組是指使用者可能對代理程式輸入或說出的內容範例,也稱為使用者表達內容。定義訓練詞組有助於 Dialogflow 將表達內容與意圖相符。
建立意圖:
- 在側邊欄選單中,按一下「Intents」(意圖) 旁的新增意圖 按鈕。
- 在「Intent name」(意圖名稱) 欄位中輸入
get-agent-name。 - 在「Training Phrases」(訓練詞組) 區段中,按一下「Add training phrases」(新增訓練詞組)。
輸入下列訓練詞組:
What is your name?Do you have a name?Tell me your name

在「Responses」(回應) 區段的「Text Response」(文字回應) 區段中,輸入下列內容:
My name is Dialogflow!

按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
測試您的意圖

在模擬工具中輸入 What's your name?,然後按 Enter 鍵。
即使該表達內容與提供的訓練詞組稍有不同,代理程式還是能夠正確回應。
Dialogflow 會使用訓練詞組做為範例,讓機器學習模型比對使用者表達內容與意圖。模型會將表達內容與代理程式中的每個意圖進行比對,並為每個意圖打分數,然後將分數最高的意圖判定為相符。如果得分最高的意圖分數很低,就是符合備用意圖。
參數與實體
當 Dialogflow 在執行階段比對出相符的意圖時,就會提供從使用者表達內容中擷取到的值做為參數。每個參數都有一個類型,稱為實體類型,此類型會明確指定資料的擷取方式。不同於原始使用者輸入內容,您可以輕鬆使用參數這類結構化資料來執行特定的邏輯或產生回應。如要控制建構代理程式時的資料擷取方式,請為部分訓練詞組加註,並設定相關聯的參數。
建立參數
建立意圖參數:
- 在側邊選單中,按一下「Intents」(意圖) 旁的加號 按鈕。
- 在意圖表單頂端,將意圖命名為
set-language。 - 請新增以下訓練詞組:
I know EnglishI speak FrenchI know how to write in German
按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。

Dialogflow 會自動偵測訓練詞組中屬於系統實體的參數。這些實體由 Dialogflow 提供,適用於許多常見的資料類型,如地點、顏色和日期。
新增訓練詞組後,Dialogflow 會在「動作和參數」表格中建立資料列:

- Required (必要):未勾選,因此這項參數不是必要的。
- Parameter Name (參數名稱):系統將參數判定為一種語言,因此自動將其命名為
language。 - 實體:系統會將其視為
@sys.language系統實體。 - Value (值):參照此參數值時所使用的 ID。
- Is List (是清單):未勾選,因此這項參數不是清單。
在回應中使用參數資料
您可以在回應中使用參數的值。舉例來說,建構代理程式時,您可以在回應中使用 $language 參數參照。在執行階段,代理程式會將其替換為終端使用者運算式中指定的語言。
新增使用參數的回覆:
- 前往「Responses」(回應) 部分。
- 在「Text Response」(文字回應) 區段中,新增以下內容:
Wow! I didn't know you knew $language. - 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
測試您的參數

在模擬工具中輸入 I know Russian。您可以看到 Dialogflow 正確擷取值為「Russian」的 language 參數,然後在回應中使用參數參照處正確插入了「Russian」。
建立您自己的實體
在大部分情況下,您必須向使用者收集系統實體未提供的特定資料。您可以建立自訂實體來處理這類情況。
建立自訂實體:
- 在側邊選單中,按一下「Entities」(實體) 旁的新增實體 按鈕。
- 輸入
language-programming做為實體名稱。 新增以下實體項目 (資料列):
參照值 同義詞 JavaScript JavaScript、js、ECMAScript Java Java Python Python、py 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。

Dialogflow 可處理單複數和大小寫等簡單的差異。請為項目新增所有可能的同義詞。新增的同義詞越多,代理程式就越能正確識別實體。
使用新實體
將訓練詞組新增至 set-language 意圖,並使用新實體:
- 按一下側欄選單中的「意圖」。
- 按一下
set-language意圖。 - 請新增以下訓練詞組:
I know javascriptI know how to code in Java
- 請注意,系統會為這些訓練詞組中的程式設計語言自動加註,然後將其新增到「動作和參數」區段的參數。
- 在「Responses」(回應) 區段中,新增以下第二個文字回應:
$language-programming is an excellent programming language。 - 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
測試您的新實體

在模擬工具中輸入 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?
- 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
- 按一下側欄選單中的「意圖」。
- 將游標移至
set-language意圖上,然後按一下「新增後續追蹤意圖」。 - 按一下清單中的「自訂」。
- 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
Dialogflow 會自動將後續追蹤意圖命名為 set-language - custom。

後續追蹤意圖的比對作業
只有在已有相符父項意圖時,系統才會比對後續追蹤意圖。由於只有在 set-language 意圖之後才會比對出 set-language - custom 意圖,因此代理程式剛剛向使用者詢問的是「How long have you known $language?」(您學 $language 多久了?)。請為該問題新增使用者可能會回答的訓練詞組:
- 按一下側欄選單中的「意圖」。
- 按一下
set-language - custom意圖。 - 請新增以下訓練詞組:
3 yearsabout 4 daysfor 5 years
- 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
測試您的後續追蹤意圖
在模擬工具中輸入 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! - 按一下「儲存」按鈕,然後等待「代理程式訓練」對話方塊顯示訓練完成訊息。
#set-language-followup.language 參照是已啟用背景資訊的參數參照。
測試背景資訊參數
在模擬工具中輸入 I know French,然後以 1 week 回答問題。請注意,language 參數值是擷取自背景資訊。
正式環境
在正式環境中執行代理程式前,請先實作正式環境最佳做法。
後續步驟
請嘗試出貨快速入門導覽課程。