您可以設定提升和篩選規格,影響從 Dialogflow CX 資料儲存庫工具擷取的搜尋結果。這樣一來,當代理使用資料儲存庫尋找資訊時,就能提供更符合脈絡的個人化互動。
您也可以選擇加入動態運算式,根據對話情境微調結果。舉例來說,如果代理擷取的資訊指出使用者擁有「手機」,您可以設定資料儲存庫工具,在對話後續回答「如何查看語音留言?」等一般查詢時,提高與手機相關文件的排名。
您可以使用控制台、API 或 Dialogflow CX Messenger 整合,設定資料儲存庫搜尋結果。
搜尋條件輸入
如要設定搜尋結果,請使用 SearchConfig 物件中的提升規格 (BoostSpec) 和篩選規格 (FilterSpec) 欄位。這些設定會套用至工具中的各個資料儲存庫,方便您控管每個連結資料儲存庫的行為。
您可以透過下列兩種方式之一設定搜尋條件:使用控制台,或傳送直接 API 呼叫。
兩者有重要差異:
API 呼叫:您使用
DetectIntentAPI 呼叫,在SearchConfig中傳送BoostSpec和FilterSpec。您必須在要求中提供完整的SearchConfig物件。透過直接 API 呼叫傳送的SearchConfig一律會覆寫使用控制台傳送的SearchConfig。不支援動態運算式和參數參照。控制台:控制台會使用
BoostSpec和FilterSpec設定建構SearchConfig物件,並隨搜尋要求傳送。您也可以視需要加入參數參照和動態運算式,根據對話中記錄的比對內容資料,量身打造結果。您只需要提供ConditionBoostSpec物件和篩選器字串清單,即可建構FilterSpecs,而非完整的SearchConfig物件。
使用者資訊會以 JSON 格式提供,位於 detectIntentRequest 中。沒有預期的結構定義,因此您可以定義物件屬性。
增強規格
提升規格可讓您對特定文件套用提升值,藉此變更搜尋結果排名。您可以為單一資料儲存庫新增多個提升規格。
您輸入的每個提升規格都是代表單一 ConditionBoostSpec 物件的 JSON 字串。
關鍵欄位:
condition:(字串) 指定何時應套用提升的運算式。這會使用標準篩選運算式語法。您可以使用 Dialogflow CX 運算式,讓結果動態顯示,例如$session.params.YOUR_PARAM_NAME或$request.end-user-metadata.YOUR_KEY。boost:(數字) 介於 -1.0 和 1.0 之間的值,決定提升強度。- 正值會提高相符文件的排名,
1.0值會大幅提高排名。 - 負值會降低相符文件的排名。
-1.0值會大幅降低排名。 0.0值不會套用任何增幅,因此不允許使用。
- 正值會提高相符文件的排名,
boostControlSpec:相較於條件和提升的基本組合,提供更多自訂排名的控制項。如要進一步瞭解如何設定這個欄位,請參閱參考文件。
控制台輸入範例:
如果您在控制台中設定代理,請以下列格式提供 ConditionBoostSpecs 清單:
{
"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 CX 運算式,讓結果動態顯示,例如 $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 CX 動態運算式
BoostSpec 條件和 FilterSpec 字串都可以納入 Dialogflow CX 運算式,使其成為動態。這可讓您根據從進行中對話擷取的比對內容資料,自訂搜尋行為。直接 API 呼叫不支援動態運算式,只有在使用控制台設定時才能使用。
您可以透過兩種方式存取對話內容資料:
- 工作階段參數:使用
$session.params.YOUR_PARAMETER_ID在對話期間收集的值。 - 使用者中繼資料:使用
$request.end-user-metadata.YOUR_KEY在DetectIntentRequest中傳遞的使用者相關中繼資料。如要啟用這個選項,請確認DetectIntent呼叫的QueryParameters中包含end_user_metadata。詳情請參閱 endUserMetadata。
如要進一步瞭解可用的系統函式和運算式語法,請參閱條件和系統函式參考資料。
在執行階段套用的搜尋條件
資料儲存庫工具執行搜尋時:
- 評估您為提升規格提供的 JSON 字串。每個有效的 JSON 字串都會轉換為
ConditionBoostSpec物件。接著,這些資料會分組到特定資料儲存庫連線的BoostSpecs物件,並新增至整體SearchConfig。 - 將您為篩選器規格提供的字串,評估為 Dialogflow CX 運算式。每個產生的篩選器字串都會用於為資料儲存庫建立
FilterSpecs物件,該物件也會新增至SearchConfig。 - 將這個動態建構的
SearchConfig納入傳送至資料儲存庫的搜尋要求QueryParameters。
設定搜尋條件
如要設定搜尋條件,請務必完成下列必要條件:
- 現有的 Dialogflow CX 代理。
- 為代理設定資料儲存庫工具,並啟用一或多個資料儲存庫。
主控台設定
- 開啟 Conversational Agents 控制台,然後選擇Google Cloud 專案。
- 從下拉式選單中選取代理。
- 在左側選單中,按一下「工具」。選取要設定的資料儲存庫工具。
- 在工具編輯頁面中,前往「Data stores」(資料儲存庫) 部分。找出要修改的資料儲存庫,然後按一下旁邊的「Settings」(設定) 圖示 (⚙️)。
- 系統隨即會顯示「Configure Data Store」(設定資料儲存庫) 選單。您可以在這裡新增 Boost 規格和篩選器規格,修改搜尋結果。
- 新增並設定規格後,按一下側邊面板底部的「Confirm」(確認)。
- 在資料儲存庫工具編輯頁面,點選「儲存」即可儲存變更。
API 設定
傳送偵測意圖要求時,您可以向 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 |
| 小茹 | 不適用 | 不適用 |
Dialogflow CX Messenger 設定
您可以將搜尋設定資料提供給 Dialogflow CX Messenger 整合。詳情請參閱 setContext 方法。
如要套用搜尋規格或搜尋設定,您必須在將 Dialogflow CX Messenger 嵌入網站時,將下列程式碼片段新增至 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 字串包含無效的 Dialogflow CX 運算式 (例如語法不正確或參照不存在的參數),運算式編譯就會失敗。與運算式編譯相關的錯誤通常會傳回 diagnostic_info 欄位中 DetectIntentResponse 內的 SystemFunctionResults。
ConditionBoostSpec JSON 無效
儲存 ConditionBoostSpec JSON 字串時,Conversational Agents 控制台會執行一些驗證,檢查 JSON 是否有效,以及其結構是否能對應至 ConditionBoostSpec 物件。如果 JSON 有效,但根據基礎搜尋服務,JSON 會產生無效的 SearchConfig (例如參數替換後出現無效的條件字串),搜尋服務會傳回錯誤。
執行階段替代錯誤
如果 ConditionBoostSpec JSON 字串有效且可剖析,但在執行階段替換其欄位 (例如條件字串) 中的 Dialogflow CX 運算式時發生錯誤,這些錯誤會回報在 diagnostic_info 中,並顯示為 SystemFunctionResults。
查看編譯的 SearchConfig
執行查詢時套用的SearchConfig,會顯示在回應的 search_signals 中。查看 SearchConfig 可深入瞭解此處未列出的其他問題。
後續步驟
- 如要進一步瞭解
SearchConfig的結構和元件,請參閱search_config說明文件。 - 如要進一步瞭解運算式語法,請參閱「Dialogflow CX 條件和系統函式參考資料」。
- 如要進一步瞭解搜尋的篩選運算式語法,請參閱「篩選及排序結果」。