数据存储区搜索配置

您可以通过配置加权和过滤条件规范,影响从 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 格式提供。 没有预期架构,因此您可以随意定义对象属性。

Boost 规范(Boost 规范)

借助提升规范,您可以为特定文档应用提升值,从而更改搜索结果排名。您可以向单个数据存储区添加多个提升规范。

每个提升规范都以 JSON 字符串的形式输入。此 JSON 字符串必须表示单个 ConditionBoostSpec 对象。

关键字段:

  • condition:(String) 用于指定应何时应用加权的表达式。此方法使用标准过滤条件表达式语法。 您可以使用 Dialogflow 表达式使结果动态化,例如 $session.params.YOUR_PARAM_NAME$request.end-user-metadata.YOUR_KEY
  • boost:(数字)一个介于 -1.0 和 1.0 之间的值,用于确定加推的强度。
    • 正值会提升匹配文档。值为 1.0 时,促销力度较大。
    • 负值会降低匹配文档的相关性。值为 -1.0 时,会大幅降低排名。
    • 0.0 表示不应用任何提升,并且不允许使用。
  • boostControlSpec:与条件和加权的简单组合相比,可提供更多控件来实现自定义排名。如需详细了解如何配置此字段,请参阅参考文档

控制台输入示例

如果您在控制台中配置代理,则需要提供以下格式的 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. 系统会评估您为提升规范提供的 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. 系统会显示配置数据存储区菜单。您可以在此处添加提升规范和过滤规范,以修改搜索结果。
    • 对于提升规范,请提供定义 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 方法。

问题排查

本部分概述了配置期间遇到的一些常见问题的解决方案。请务必通过模拟触发不同会话参数和最终用户元数据值的对话来全面测试配置。

无效表达式

如果提升规范条件或过滤规范字符串包含无效的对话式代理 (Dialogflow CX) 表达式(例如,语法不正确或引用了不存在的参数),则表达式编译将失败。与表达式编译相关的错误通常以 SystemFunctionResults 的形式在 diagnostic_info 字段的 DetectIntentResponse 中返回。

无效的 ConditionBoostSpec JSON

在保存 ConditionBoostSpec JSON 字符串时,对话式代理控制台会对其执行一些验证。这是为了检查它是否是有效的 JSON,以及其结构是否可以映射到 ConditionBoostSpec 对象。如果 JSON 有效,但根据底层搜索服务,它会导致 SearchConfig 无效(例如,参数替换后的条件字符串无效),则搜索服务会返回错误。

运行时替换错误

如果 ConditionBoostSpec JSON 字符串有效且可解析,但在运行时替换其字段(例如条件字符串)中的 Dialogflow 表达式时发生错误,这些错误将以 SystemFunctionResults 的形式在 diagnostic_info 中报告。

查看已编译的 SearchConfig

运行查询时应用的 SearchConfig 可在响应的 search_signals 中找到。查看 SearchConfig 可能会发现此处未列出的其他问题。

后续步骤