您可以通过配置加权和过滤条件规范,影响从 Dialogflow CX 数据存储区工具检索到的搜索结果。这样一来,当智能体使用数据存储区查找信息时,便可实现更加个性化且情境感知能力更强的互动。
(可选)您可以添加动态表达式,以便根据对话上下文对结果进行微调。例如,您的代理已捕获信息,表明最终用户拥有“手机”。您可以配置数据存储区工具,以便在对话中稍后回答“如何查看语音信息?”等一般查询时,提高与手机相关的文档的排名。
您可以使用控制台、API 或 Dialogflow CX Messenger 集成来配置数据存储区搜索结果。
搜索条件输入
搜索结果使用 SearchConfig 对象中的提升规范 (BoostSpec) 和过滤规范 (FilterSpec) 字段进行配置。这些配置会应用于工具中的每个数据存储区,让您可以精细控制每个已连接数据存储区的行为。
您可以通过以下两种方式之一配置搜索条件:使用控制台或发送直接 API 调用。这两者之间存在重要区别。
API 调用:
BoostSpec和FilterSpec通过DetectIntentAPI 调用在SearchConfig中发送。必须在请求中提供完整的SearchConfig对象。通过直接 API 调用发送的SearchConfig始终会替换使用控制台发送的SearchConfig。不支持动态表达式和参数引用。控制台:您的
BoostSpec和FilterSpec配置用于构建随搜索请求发送的SearchConfig对象。您可以选择添加参数引用和动态表达式,以便根据对话中记录的上下文数据定制结果。您只需提供ConditionBoostSpec对象和过滤字符串列表来构建FilterSpecs,而无需提供完整的SearchConfig对象。
最终用户信息以 JSON 格式提供。没有预期架构,因此您可以随意定义对象属性。
提升规范(提升规范)
借助提升规范,您可以为特定文档应用提升值,从而更改搜索结果排名。您可以向单个数据存储区添加多个提升规范。
每个提升规范都以 JSON 字符串的形式输入。此 JSON 字符串必须表示单个 ConditionBoostSpec 对象。
关键字段:
condition:(String) 一种表达式,用于指定何时应用加权。此方法使用标准的过滤条件表达式语法。 您可以使用 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 列表。
在此示例中,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 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中传递。如需使用此选项,请验证end_user_metadata是否包含在DetectIntent通话的QueryParameters中。如需了解详情,请参阅 endUserMetadata。
如需详细了解可用的系统函数和表达式语法,请参阅条件和系统函数参考。
在运行时应用的搜索条件
当数据存储区工具执行搜索时:
- 系统会评估您为提升规范提供的 JSON 字符串。每个有效的 JSON 字符串都会转换为
ConditionBoostSpec对象。然后,这些数据会分组到特定数据存储区连接的BoostSpecs对象中,并添加到总体SearchConfig中。 - 您为过滤条件规范提供的字符串会被评估为 Dialogflow CX 表达式。每个生成的过滤字符串都用于为数据存储区创建
FilterSpecs对象,该对象也会添加到SearchConfig中。 - 然后,将动态构建的
SearchConfig包含在发送到数据存储区的搜索请求的QueryParameters中。
配置搜索条件
在配置搜索条件之前,请验证您是否已执行以下操作:
- 现有的 Dialogflow CX 代理。
- 为智能体配置的数据存储区工具,其中启用了一个或多个数据存储区。
控制台配置
- 打开对话式代理控制台,然后选择一个 Google Cloud项目。
- 从下拉菜单中选择客服人员。
- 找到左侧的菜单,然后点击工具。选择要配置的数据存储区工具。
- 在工具修改页面中,前往数据存储区部分。点击要修改的数据存储区旁边的设置图标 (⚙️)。
- 系统会显示配置数据存储区菜单。您可以在此处添加提升规范和过滤规范,以修改搜索结果。
- 添加并配置规范后,点击侧边栏底部的确认。
- 在数据存储区工具修改页面上,点击保存以保存更改。
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 |
| 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 表达式(例如语法不正确或引用不存在的参数),则表达式编译将失败。与表达式编译相关的错误通常在 diagnostic_info 字段内的 DetectIntentResponse 中以 SystemFunctionResults 的形式返回。
无效的 ConditionBoostSpec JSON
在保存 ConditionBoostSpec JSON 字符串时,对话式代理控制台会对其执行一些验证。这是为了检查它是否为有效的 JSON,以及其结构是否可以映射到 ConditionBoostSpec 对象。如果 JSON 有效,但根据底层搜索服务,它会导致 SearchConfig 无效(例如,参数替换后的条件字符串无效),则搜索服务会返回错误。
运行时替换错误
如果 ConditionBoostSpec JSON 字符串有效且可解析,但在运行时替换其字段(例如条件字符串)中的 Dialogflow CX 表达式时发生错误,这些错误将以 SystemFunctionResults 的形式在 diagnostic_info 中报告。
查看已编译的 SearchConfig
运行查询时应用的 SearchConfig 可在响应的 search_signals 中找到。查看 SearchConfig 可能会发现此处未列出的其他问题。
后续步骤
- 如需详细了解
SearchConfig的结构及其组件,请参阅search_config文档。 - 如需详细了解表达式语法,请参阅 Dialogflow CX 条件和系统函数参考文档。
- 如需详细了解搜索的过滤条件表达式语法,请参阅过滤和排序结果。