您可以設定提升和篩選條件規格,影響從 Conversational Agents (Dialogflow CX) 資料儲存庫工具擷取的搜尋結果。這樣一來,代理使用資料存放區尋找資訊時,就能提供更符合脈絡的個人化互動。
您也可以視需要加入動態運算式,根據對話內容微調結果。舉例來說,代理程式已擷取資訊,指出使用者擁有「手機」。您可以設定資料儲存區工具,在稍後對話中回答一般查詢 (例如「如何查看語音信箱?」) 時,優先提供與手機相關的文件。
您可以使用控制台、API 或 Dialogflow CX Messenger 整合,設定資料存放區搜尋結果。
搜尋條件輸入內容
搜尋結果是使用 SearchConfig
物件中的提升規格 (BoostSpec
) 和篩選規格 (FilterSpec
) 欄位設定。這些設定會套用至工具中的每個資料儲存庫,讓您精細控管每個已連結資料儲存庫的行為。
您可以透過兩種方式設定搜尋條件:使用控制台,或傳送直接 API 呼叫。這兩者之間有重要差異。
API 呼叫:
BoostSpec
和FilterSpec
會透過DetectIntent
API 呼叫,以SearchConfig
形式傳送。要求中必須提供完整的SearchConfig
物件。透過直接 API 呼叫傳送的SearchConfig
一律會覆寫透過控制台傳送的SearchConfig
。系統不支援動態運算式和參數參照。控制台:系統會使用
BoostSpec
和FilterSpec
設定建構SearchConfig
物件,並隨搜尋要求傳送。您也可以視需要加入參數參照和動態運算式,根據對話記錄的內容資料調整結果。您只需要提供ConditionBoostSpec
物件和篩選器字串清單來建構FilterSpecs
,不需要提供完整的SearchConfig
物件。
以 JSON 格式提供使用者資訊。 沒有預期的結構定義,因此您可以自由定義物件屬性。
增強規格 (增強規格)
提升規格可讓您對特定文件套用提升值,藉此變更搜尋結果排名。您可以在單一資料儲存庫中新增多個增強規格。
每個加成規格都以 JSON 字串形式輸入。這個 JSON 字串必須代表單一 ConditionBoostSpec
物件。
關鍵欄位:
condition
:(字串) 指定何時應套用加成。這會使用標準篩選運算式語法。 您可以使用 Dialogflow 運算式動態產生結果,例如$session.params.YOUR_PARAM_NAME
或$request.end-user-metadata.YOUR_KEY
。boost
:(數字) 介於 -1.0 和 1.0 之間的值,決定升幅強度。- 正值會促使系統比對文件。值為
1.0
時,系統會大幅提高排名。 - 負值會降低相符文件的優先順序。
-1.0
值會大幅降低排名。 0.0
值不會套用任何增幅,且不允許使用。
- 正值會促使系統比對文件。值為
boostControlSpec
:提供比條件和升幅基本組合更完善的控制項,可自訂排名。如要進一步瞭解如何設定這個欄位,請參閱參考說明文件。
Console 輸入範例:
如果您在主控台中設定代理程式,則必須提供 ConditionBoostSpecs
清單,格式如下。
在本範例中,URI 符合 $session.params.doc_id
工作階段參數值的檔案,會以 0.5 的強度提升。此格式的 JSON
{
"condition": "uri: ANY(\"http://www.example.com/docs/$session.params.doc_id\")",
"boost": 0.5
}
API 輸入內容範例:
如果您直接呼叫 API,則必須在完整的 SearchConfig
物件中提供 ConditionBoostSpecs
。下列搜尋設定說明瞭加成規格:
"searchConfig": {
"boostSpecs": [
{
"dataStores": [ "DATASTORE_ID" ],
"spec": [
{
"conditionBoostSpecs": {
"condition": "CONDITION",
"boost": "1.0"
}
}
]
}
]
}
篩選規格
篩選規格會限制搜尋結果,只顯示符合定義條件的文件。您可以在單一資料存放區中新增多個篩選條件。
每個「篩選器規格」都必須以字串運算式輸入。字串必須符合標準篩選運算式語法。您可以在這個字串中使用 Dialogflow 運算式,讓結果動態顯示,例如 $session.params.YOUR_PARAM_NAME
或 $request.end-user-metadata.YOUR_KEY
。
控制台篩選器規格字串範例:
如果您使用主控台設定代理程式,必須提供 filter
字串清單,以形成 FilterSpec
物件。
在本例中,篩選條件只會傳回 numeric_field
大於或等於 $session.params.min_value
值的文件,且 stock_availability
為 "IN_STOCK"
。
"numeric_field >= $session.params.min_value AND stock_availability: ANY(\"IN_STOCK\")"
API 篩選器設定範例:
如果您直接呼叫 API,則必須在完整的 SearchConfig
物件中提供 filter
字串:
"searchConfig": {
"filterSpecs": [
{
"dataStores": [ "DATASTORE_ID" ],
"filter": "CONDITION"
}
]
}
Dialogflow 動態運算式
BoostSpec
條件和 FilterSpec
字串都可以納入 Dialogflow 運算式,使其成為動態。您可以根據從進行中的對話擷取的內容資料,調整搜尋行為。直接 API 呼叫不支援動態運算式,只有透過控制台設定時才能使用。
您可以透過以下兩種方式存取對話內容資料:
- 工作階段參數:使用
$session.params.YOUR_PARAMETER_ID
在對話期間收集的值。 - 使用者中繼資料:透過
$request.end-user-metadata.YOUR_KEY
在DetectIntentRequest
中傳遞的使用者相關中繼資料。如要使用這項選項,請確認end_user_metadata
包含在DetectIntent
通話的QueryParameters
中。詳情請參閱 endUserMetadata。
如要進一步瞭解可用的系統函式和運算式語法,請參閱條件和系統函式參考資料。
在執行階段套用的搜尋條件
資料儲存庫工具執行搜尋時:
- 系統會評估你為 Boost 規格提供的 JSON 字串。每個有效的 JSON 字串都會轉換成
ConditionBoostSpec
物件。接著,這些項目會分組為特定資料儲存區連線的BoostSpecs
物件,並新增至整體SearchConfig
。 - 系統會將您提供的篩選器規格字串評估為 Dialogflow 運算式。每個產生的篩選器字串都會用於為資料儲存庫建立
FilterSpecs
物件,該物件也會新增至SearchConfig
。 - 這個動態建構的
SearchConfig
隨後會納入傳送至資料儲存庫的搜尋要求QueryParameters
中。
設定搜尋條件
設定搜尋條件前,請確認您具備下列項目:
- 現有的 Conversational Agents (Dialogflow CX) 服務專員。
- 為代理程式設定資料儲存庫工具,並啟用一或多個資料儲存庫。
主控台設定
- 開啟 Conversational Agents 控制台,然後選擇專案 Google Cloud。
- 從下拉式選單中選取代理程式。
- 前往左側選單並按一下「工具」。選取要設定的資料儲存工具。
- 在工具編輯頁面中,前往「資料儲存庫」部分。點按要修改的資料儲存庫旁的「設定」圖示 (⚙️)。
- 「設定資料儲存庫」選單隨即顯示。您可以在這裡新增 Boost Specs 和 Filter Specs,修改搜尋結果。
- 新增及設定規格後,按一下側邊面板底部的「確認」。
- 在資料儲存庫工具編輯頁面中,按一下「儲存」即可儲存變更。
API 設定
傳送偵測意圖要求時,您可以提供搜尋設定資料給 Conversational Agents (Dialogflow CX)。這項資訊不會保留在工作階段中,因此每次偵測意圖要求都必須提供。
請在 Sessions.detectIntent
方法的 queryParams.searchConfig
欄位中提供這項資訊。
選取工作階段參照的通訊協定和版本:
通訊協定 | V3 | V3beta1 |
---|---|---|
REST | 工作階段資源 | 工作階段資源 |
RPC | 工作階段介面 | 工作階段介面 |
C++ | SessionsClient | 不適用 |
C# | SessionsClient | 不適用 |
Go | SessionsClient | 不適用 |
Java | SessionsClient | SessionsClient |
Node.js | SessionsClient | SessionsClient |
PHP | 不適用 | 不適用 |
Python | SessionsClient | SessionsClient |
Ruby | 不適用 | 不適用 |
設定 Dialogflow CX Messenger
您可以將搜尋設定資料提供給 Dialogflow CX Messenger 整合服務。詳情請參閱 setContext 方法。
如要套用搜尋規格或搜尋設定,將 Dialogflow CX Messenger 嵌入網站時,必須在程式碼中加入下列程式碼片段:
<script>
document.addEventListener('df-messenger-loaded', () => {
const dfMessenger = document.querySelector('df-messenger');
const searchConfig = { ... }
dfMessenger.setQueryParameters(searchConfig);
});
</script>
請參閱 setQueryParameters 方法。
疑難排解
本節列出設定期間遇到的一些常見問題,以及解決方法。請務必模擬會觸發不同工作階段參數和使用者中繼資料值的對話,徹底測試設定。
無效運算式
如果 Boost Spec 條件或 Filter Spec 字串包含無效的 Conversational Agents (Dialogflow CX) 運算式 (例如語法有誤或參照不存在的參數),運算式編譯就會失敗。與運算式編譯相關的錯誤通常會以 SystemFunctionResults
形式,在 diagnostic_info 欄位中傳回。DetectIntentResponse
無效的 ConditionBoostSpec
JSON
儲存 ConditionBoostSpec
JSON 字串時,對話式代理程式控制台會執行一些驗證。這是為了檢查 JSON 是否有效,以及其結構是否可對應至 ConditionBoostSpec
物件。如果 JSON 有效,但根據基礎搜尋服務,JSON 會產生無效的 SearchConfig
(例如參數替換後出現無效的條件字串),搜尋服務就會傳回錯誤。
執行階段替換錯誤
如果 ConditionBoostSpec
JSON 字串有效且可剖析,但在其欄位中執行 Dialogflow 運算式替代作業時發生錯誤 (例如條件字串),這些錯誤會以 SystemFunctionResults
形式回報至 diagnostic_info。
查看已編譯的 SearchConfig
查詢執行時套用的 SearchConfig
會顯示在回應的 search_signals 中。查看 SearchConfig
可能有助於瞭解這裡未列出的其他問題。
後續步驟
- 如要進一步瞭解
SearchConfig
的結構及其元件,請參閱search_config
說明文件。 - 如要進一步瞭解運算式語法,請參閱 Dialogflow 條件和系統函式參考資料。
- 如要進一步瞭解搜尋的篩選運算式語法,請參閱「篩選及排序結果」。