本頁面說明意圖的「動作」和「參數」設定,以及當系統在執行階段比對出相符的意圖時會如何使用這兩項設定。
這項資料的所在位置
建構代理程式時,最常見的做法是使用 Dialogflow ES 主控台 (請參閱說明文件並開啟主控台)。以下操作說明重點介紹如何使用主控台。如要存取動作和參數資料:
- 前往 Dialogflow ES 主控台。
- 選取代理程式。
- 選取左側欄選單中的 [Intents] (意圖)。
- 選取一個意圖。
- 向下捲動至「Action and parameters」(動作及參數) 區段。
如果您要使用 API (而非主控台) 建構代理程式,請參閱意圖參照的相關說明。API 欄位名稱與主控台欄位名稱類似。下方的操作說明會指出主控台和 API 之間所有的重要差異。
動作
「動作」是一個簡便的欄位,可協助執行您服務中的邏輯。
建構代理程式時,您可以將這個欄位設為任何有幫助的文字。
當 Dialogflow 在執行階段比對出相符的意圖時,就會將動作值提供給執行要求 Webhook 要求,或提供給 API 互動回應。動作值可用來觸發服務中的特定邏輯。
參數
當 Dialogflow 在執行階段比對出相符的意圖時,就會提供從使用者表達內容中擷取到的值做為參數。每個參數都有一個類型,稱為實體類型,此類型會明確指定資料的擷取方式。與原始使用者輸入內容不同,參數是結構化的資料,可輕鬆用於執行某些邏輯或產生回應。建構代理程式時,您可以在訓練詞組的一些部分中為文字加註,並設定相關聯的參數,藉此控制資料的擷取方式。
以下列出參數設定的欄位,並以「book a room on Tuesday」(預訂星期二的會議室) 這個訓練詞組為例,其中「Tuesday」(星期二) 已加註。
- 「Required」 (必要):如果意圖需要這項參數才算完整,請勾選這個方塊。請參閱下方的使用必要參數進行運算單元填充一節。
- 「Parameter Name」 (參數名稱):用於識別參數的名稱,範例:
date
。 - 「Entity」 (實體):與參數相關聯的實體類型,範例:
@sys.date
。 - 「Value」 (值):在大多數情況下,這個欄位是設為參數參照,例如
$parameter-name
(此參照用來做為執行階段擷取值的預留位置)。但是,此欄位也可用於選取替代值。請參閱下方的參數值和參數參照一節。範例:$date
。 - 「Is List」 (是清單):如果值應以清單形式傳回,請勾選這個方塊。請參閱下方的列出參數一節。
- 「Prompts」 (提示):未提供這項參數時,代理程式會向使用者詢問的問題。只有在已勾選 [Required] (必填) 欄位時才會使用這個欄位。請參閱下方的使用必要參數進行運算單元填充一節。
- 「Default value」 (預設值):這是使用者未提供參數值時的參數預設值。如要使用主控台變更預設值,請將滑鼠懸停在參數列上,然後按一下右側的選單。
當 Dialogflow 在執行階段比對出相符的意圖時,就會將參數資料提供給執行要求 Webhook 要求,或提供給 API 互動回應。提供參數資料時,Dialogflow 會將其當做參數名稱與參數值之間的對應關係。
建構代理程式時,您的回應可包含參數值。請參閱下方的參數值和參數參照一節。
列出參數
使用主控台建構代理程式時,勾選 [Is List] (是清單) 選項會將參數設為清單形式。清單可以包含多個元素。例如,農產品訂購代理程式可能預期會有以下使用者表達內容:
- 「I want apples」(我想訂蘋果)
- 「I want apples and oranges」(我想訂蘋果和柳丁)
- 「I want apples, oranges, and bananas」(我想訂蘋果、柳丁和香蕉)
使用清單參數加註訓練詞組時,詞組可包含一或多個參數範例,您可以分別為每個參數範例加註:
在單一訓練詞組中,如果至少有兩個字詞或詞組含有相同的參數,系統就會自動啟用「Is List」選項。如果您停用這個選項,但保留相同的註解,只要您開啟含有此註解的網頁,系統就會再次勾選「Is List」。
參數值和參數參照
參數參照是存放執行階段所擷取之參數值的變數。建構代理程式時,您可以在意圖回應、參數提示和參數「Value」(值) 欄位中使用參數參照。
例如,您可以在意圖回應中使用 $parameter-name
。Dialogflow 回應使用者時,會以執行階段擷取的參數值取代參數參照。如要提及使用者先前提供的資訊,這種做法就能派上用場。舉例來說,您的意圖回應看起來可能與以下內容類似:「Okay, I booked a room for you on $date」(好的,我幫您預訂了 $date 的會議室」。
基本參數參照
如要參照由相關聯實體擷取的參數值,請使用下列格式:
$parameter-name
例如,如果參數名稱為 date
,則能以 $date
形式參照該參數值。
原始值的參數參照
當系統將文字對應至特定實體時,通常會將其轉換成更方便處理的文字。例如,針對水果實體,系統可能會將使用者表達內容中的「apples」(蘋果) 這個字擷取為「apple」。如要完全按照使用者撰寫或說出內容的方式參照參數值,請使用以下格式:
$parameter-name.original
舉例來說,如果參數名稱為 date
,則可使用 $date.original
來參照原始值。
含糊日期的參數參照
當參數與 @sys.date
系統實體相關聯,且使用者提供部分日期 (未指定月份、日期和年份) 時,Dialogflow 會比對最近的未來日期。不過,您也可以擷取這個日期的變化版本。
您可以擷取明確的部分比對結果,在這種情況下,Dialogflow 會使用下列格式將不明部分替換為 U
:
$parameter-name.partial
您可以使用下列格式,擷取最近的過去日期:
$parameter-name.recent
舉例來說,假設今天是 2021 年 8 月 11 日,您的參數名稱為 date
,而使用者說「8 月 13 日」:
參數參照 | 解析值 |
---|---|
$date | 2021-08-13 |
$date.partial | UUUU-08-13 |
$date.recent | 2020-08-13 |
複合式實體的參數參照
複合式實體是包含其他子實體的實體。如要參照參數子實體的值,請使用以下格式:
$parameter-name.sub-entity-name
舉例來說,如果參數名稱為 move
,且子實體名稱為 direction
,則可使用 $move.direction
來參照子實體值。
已啟用之背景資訊的參數參照
背景資訊可以用於暫時儲存參數值。如要參照從已啟用之背景資訊取得的參數值,請使用以下格式:
#context-name.parameter-name
例如,如果參數名稱為 room
,而 reservation
是已啟用的背景資訊,則可使用 #reservation.room
來參照參數值。
事件參數的參數參照
如要參照事件參數,請使用以下格式:
#event-name.parameter-name
例如,如果參數名稱為 duration
,事件名稱為 alarm
,則可使用 #alarm.duration
來參照參數。
參數值欄位
參數「Value」(值) 欄位中的參數參照具有特殊的重要性,因為此欄位的內容決定 $parameter-name
在意圖回應和參數提示中的解析值。Dialogflow 會以下列順序處理參數資料:
- 使用相關聯的實體從使用者表達內容中擷取參數值。
- 解析參數「Value」(值) 欄位的內容。
- 將
$parameter-name
設為參數「Value」(值) 欄位的解析內容。如果「Value」(值) 欄位未設為$parameter-name
,系統會將$parameter-name
的值重設為其他值。 - 解析意圖回應和參數提示的內容。
以下以「I want to buy a "small" shirt」(我想買一件「S 號」上衣) 這個使用者表達內容為例,提供幾個範例來說明這種順序的影響。
參數參照位置 | 設定內容 | 解析內容 |
---|---|---|
參數「Value」(值) 欄位 | $size | S |
意圖回應 | 您選擇的尺寸:$size | 您選擇的尺寸:S |
參數參照位置 | 設定內容 | 解析內容 |
---|---|---|
參數「Value」(值) 欄位 | $size.original | S 號 |
意圖回應 | 您選擇的尺寸:$size | 您選擇的尺寸:S 號 |
參數參照位置 | 設定內容 | 解析內容 |
---|---|---|
參數「Value」(值) 欄位 | $size | S |
意圖回應 | 您選擇的尺寸:$size.original | 您選擇的尺寸:S 號 |
使用必要參數進行運算單元填充
建構代理程式時,您可以將參數標示為必要。使用者必須為每個必要參數提供資料,意圖才算完整。
如果 Dialogflow 代理程式在執行階段比對出相符的意圖,則會繼續向使用者收集資訊,直到使用者為每個必要參數提供資料為止。這個過程稱為「運算單元填充」。
除非啟用使用 Webhook 進行運算單元填充功能,否則 Dialogflow 會在向使用者收集到所有必要資料後,才傳送執行要求 Webhook 要求。
Dialogflow 會針對運算單元填充的每個步驟傳送 API 互動回應。每一則運算單元填充回應的意圖和動作都相同,而且系統會提供目前為止收集到的參數。
建構代理程式時,您必須提供提示,讓代理程式使用這些提示來向使用者索取參數資料。您也可以提供提示變化版本,這樣代理程式才不會老是問一樣的問題。
舉例來說,假設您服飾店代理程式的意圖包含下列資訊的必要參數:
- clothing type (服飾類型)
- quantity (數量)
- size (尺寸)
- color (顏色)
以下舉例說明意圖處理完成的對話過程:
使用者:I'd like to buy a t-shirt (我想買 T 恤)
代理程式:How many do you want? (您要買幾件?)
使用者:3 (3 件)
代理程式:What color would you like? (您要什麼顏色的?)
使用者:Black (黑色)
代理程式:What size? (什麼尺寸?)
使用者:Medium (M 號)
代理程式:Got it, that was three black t-shirts in medium (我知道了,三件 M 號的黑色 T 恤)
如果使用者在單一表達內容中針對多項參數提供資料,Dialogflow 會收集使用者提供的資料,並繼續提問以取得缺少的資料。例如,使用者可能會說「I'd like to buy three black t-shirts」(我想買三件黑色 T 恤)。這時,Dialogflow 便會請使用者提供尺寸。
為參數排序
建構代理程式時,您可以為參數排序,決定代理程式提示使用者提供缺少資料的先後順序。
使用主控台建構代理程式時,如將滑鼠懸停在參數上,右側就會顯示重新排序圖示。您可以拖曳這個圖示來變更參數在清單中的位置。
提示中的參數參照
建構代理程式時,您可以在提示中使用參數參照,但必須是順序在提示之前的必要參數之參照。例如,如果 color
參數在 quantity
參數之前,則可以對 quantity
參數使用以下提示:How many $color t-shirts would you like to buy?
取消運算單元填充
使用者說出「Cancel」(取消)、「Stop it」(停止)、「That's enough」(這樣就好了) 等結束詞組時,代理程式會回覆「Okay, canceled」(好的,已取消) 並清除運算單元填充背景資訊。
如果您使用 API,當預留時段填入作業取消時,DetectIntentResponse.queryResult.cancelsSlotFilling
欄位會設為 true
。詳情請參閱 Sessions
類型的 detectIntent
說明文件。