資料儲存庫搜尋設定

您可以設定提升和篩選條件規格,影響從 Conversational Agents (Dialogflow CX) 資料儲存庫工具擷取的搜尋結果。這樣一來,代理使用資料存放區尋找資訊時,就能提供更符合脈絡的個人化互動。

您也可以視需要加入動態運算式,根據對話內容微調結果。舉例來說,代理程式已擷取資訊,指出使用者擁有「手機」。您可以設定資料儲存區工具,在稍後對話中回答一般查詢 (例如「如何查看語音信箱?」) 時,優先提供與手機相關的文件。

您可以使用控制台APIDialogflow CX Messenger 整合,設定資料存放區搜尋結果。

搜尋條件輸入內容

搜尋結果是使用 SearchConfig 物件中的提升規格 (BoostSpec)篩選規格 (FilterSpec) 欄位設定。這些設定會套用至工具中的每個資料儲存庫,讓您精細控管每個已連結資料儲存庫的行為。

您可以透過兩種方式設定搜尋條件:使用控制台,或傳送直接 API 呼叫。這兩者之間有重要差異。

  • API 呼叫BoostSpecFilterSpec 會透過 DetectIntent API 呼叫,以 SearchConfig 形式傳送。要求中必須提供完整的 SearchConfig 物件。透過直接 API 呼叫傳送的 SearchConfig 一律會覆寫透過控制台傳送的 SearchConfig。系統不支援動態運算式和參數參照。

  • 控制台:系統會使用 BoostSpecFilterSpec 設定建構 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_KEYDetectIntentRequest 中傳遞的使用者相關中繼資料。如要使用這項選項,請確認 end_user_metadata 包含在 DetectIntent 通話的 QueryParameters 中。詳情請參閱 endUserMetadata

如要進一步瞭解可用的系統函式和運算式語法,請參閱條件和系統函式參考資料

在執行階段套用的搜尋條件

資料儲存庫工具執行搜尋時:

  1. 系統會評估你為 Boost 規格提供的 JSON 字串。每個有效的 JSON 字串都會轉換成 ConditionBoostSpec 物件。接著,這些項目會分組為特定資料儲存區連線的 BoostSpecs 物件,並新增至整體 SearchConfig
  2. 系統會將您提供的篩選器規格字串評估為 Dialogflow 運算式。每個產生的篩選器字串都會用於為資料儲存庫建立 FilterSpecs 物件,該物件也會新增至 SearchConfig
  3. 這個動態建構的 SearchConfig 隨後會納入傳送至資料儲存庫的搜尋要求 QueryParameters 中。

設定搜尋條件

設定搜尋條件前,請確認您具備下列項目:

  • 現有的 Conversational Agents (Dialogflow CX) 服務專員。
  • 為代理程式設定資料儲存庫工具,並啟用一或多個資料儲存庫。

主控台設定

  1. 開啟 Conversational Agents 控制台,然後選擇專案 Google Cloud。
  2. 從下拉式選單中選取代理程式。
  3. 前往左側選單並按一下「工具」。選取要設定的資料儲存工具。
  4. 在工具編輯頁面中,前往「資料儲存庫」部分。點按要修改的資料儲存庫旁的「設定」圖示 (⚙️)。
  5. 「設定資料儲存庫」選單隨即顯示。您可以在這裡新增 Boost Specs 和 Filter Specs,修改搜尋結果。
    • 如果是升幅規格,請提供定義 ConditionBoostSpec 的 JSON 物件。詳情請參閱「Boost 規格」。
    • 如果是篩選器規格,請提供定義篩選器條件的字串。詳情請參閱「篩選規格」。
  6. 新增及設定規格後,按一下側邊面板底部的「確認」
  7. 在資料儲存庫工具編輯頁面中,按一下「儲存」即可儲存變更。

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 可能有助於瞭解這裡未列出的其他問題。

後續步驟