配置自动补全

本页介绍了 Agent Search 的基本自动补全功能。自动补全功能会根据您输入的查询的前几个字符生成查询建议。

自动补全功能生成的建议因搜索应用使用的数据类型而异:

  • 结构化数据和非结构化数据。默认情况下,自动补全功能会根据数据存储区中文档的内容生成建议。默认情况下,在导入文档后,自动补全功能不会立即开始生成建议,而是要等到有足够的高质量数据后才会开始生成建议,这通常需要几天时间。如果您通过 API 发出自动补全请求,自动补全功能可以根据搜索记录或用户事件生成建议。

  • 网站数据。默认情况下,自动补全功能会根据搜索记录生成建议。自动补全功能需要真实的搜索流量。在搜索流量开始后,自动补全功能需要一两天时间才能生成建议。建议可以根据公开网站上通过实验性高级文档数据模型抓取的网络数据生成。

  • 医疗保健数据。默认情况下,系统会使用规范的医疗数据源为医疗保健数据存储区生成自动补全建议。

查询建议模型决定了自动补全功能使用哪种类型的数据来生成建议。有四种查询建议模型:

  • 文档。文档模型可根据用户导入的文档生成建议。此模型不适用于网站数据或医疗保健数据。

  • 可补全字段。可补全字段模型建议直接从结构化数据字段中提取的文本。只有带有 completable 注释的字段才会用于自动补全建议。此模型仅适用于结构化数据。

  • 搜索记录。搜索记录模型会根据 SearchService.search API 调用的历史记录生成建议。如果没有可用于 servingConfigs.search 方法的流量,请勿使用此模型。此模型不适用于医疗保健数据。

  • 用户事件。用户事件模型会根据用户导入的 search 类型事件生成建议。此模型不适用于医疗保健数据。

自动补全请求使用 dataStores.completeQuery 方法发送。

或者,如果您不想使用查询建议模型,可以使用导入的建议,该功能可根据导入的建议列表提供自动补全建议。如需了解详情,请参阅使用导入的自动补全建议列表

可用的模型类型(按数据类型)

下表显示了每种数据类型可用的查询建议模型类型。


查询建议模型

数据源

网站数据

结构化数据

非结构化数据
文档 已导入 ✔* (默认) ✔(默认)
可补全字段 已导入
搜索记录 自动收集 ✔ (默认)
用户事件 由用户导入或由 widget 自动收集
网站抓取的内容 从您指定的公开网站内容中抓取

*:文档架构必须包含 titledescription 字段,或者必须包含已指定为 titledescription 键属性的字段。请参阅更新结构化数据的架构

:只有在启用用于自动补全的实验性高级文档数据模型后,才能将抓取的网页内容用作数据源。请参阅高级文档数据模型

如果您不想使用数据类型的默认模型,可以在发送自动补全请求时指定其他模型。自动补全请求使用 dataStores.completeQuery 方法发送。如需了解相关信息,请参阅 API 说明:发送自动补全请求以选择其他模型

自动补全功能

Agent Search 支持以下自动补全功能,可在搜索期间显示最有用的预测结果:

功能 说明 示例或更多信息
更正拼写错误 更正拼写错误的字词。 MilcMilk
移除不安全的字词
  • 由 Google 安全搜索提供支持。
  • 移除不当的查询。
  • 支持英语 (en)、法语 (fr)、德语 (de)、意大利语 (it)、波兰语 (pl)、葡萄牙语 (pt)、俄语 (ru)、西班牙语 (es) 和乌克兰语 (uk)。
令人反感的文字,例如色情、挑逗、粗俗、暴力内容。
防止显示基本个人身份信息 (PII) Agent Search 由 Sensitive Data Protection 提供支持,会尽力防止显示手机号码和邮箱等基本类型的 PII。

如果数据存储区中存在邮箱 jeffersonloveshiking@gmail.com,那么当用户在搜索栏中输入 jef 时,Agent Search 不会返回该邮箱作为自动补全建议。

为了更全面地防范个人身份信息泄露,Google 建议您除了使用 Agent Search 提供的检测器之外,还应应用自己的数据泄露防护 (DLP) 解决方案。如需了解详情,请参阅防范 PII 泄露

拒绝名单
  • 移除拒绝名单中列出的字词。
如需了解详情,请参阅使用自动补全拒绝名单
术语去重
  • 由 AI 驱动的语义理解功能提供支持。
  • 对于近乎相同的字词,任一字词都可匹配,但系统只会建议更热门的字词。
系统会对 Shoes for WomenWomens ShoesWomans Shoes 进行去重处理,并仅建议最热门的那个。
尾部匹配建议
  • 在美国和欧盟多区域不可用。
  • 可选设置。
  • 如果整个查询没有自动补全匹配项,则仅针对查询的尾字词建议匹配项。
  • 不适用于医疗保健搜索。
如需了解详情,请参阅尾部匹配建议

尾部匹配建议

系统会根据查询字符串中最后一个字词的完全前缀匹配情况,提供尾部匹配建议。

例如,假设在自动补全请求中发送了查询“songs with he”。启用尾部匹配后,自动补全功能可能会发现完整前缀“songs with he”没有任何匹配项。不过,查询中的最后一个词“he”与“hello world”和“hello kitty”中的“hello”构成精确前缀匹配。在这种情况下,返回的建议是“包含 hello world 的歌曲”和“包含 hello kitty 的歌曲”,因为没有完全匹配的建议。

此功能可以减少空白建议、提升建议多样性,因此在用户事件数、搜索历史记录和文档主题覆盖范围等数据源有限的情况下尤为实用。不过,启用尾部匹配建议可能会降低建议的总体质量。由于尾部匹配仅匹配前缀的尾部字词,因此返回的部分建议可能没有意义。例如,对于“songs with he”这样的查询,系统可能会提供“songs with helpers guides”这样的尾部匹配建议。

仅在以下情况下返回尾部匹配建议:

  1. dataStores.completeQuery 请求中,include_tail_suggestions 设置为 true

  2. 没有与查询完全匹配的前缀建议。

防范 PII 泄露

个人身份信息的定义范围很广,并且可能难以检测。因此,Agent Search 无法保证自动补全建议中不会返回 PII。

Agent Search 会应用Sensitive Data Protection检查服务来查找并阻止常见类型的 PII 显示为建议。不过,如果您的数据存储区包含 PII,或者您使用的是搜索记录或用户事件查询建议模型,请查看以下内容并采取适当的措施:

  1. 如果您要保护的 PII 类型相当标准(例如手机号码和邮箱),请先广泛测试应用的自动补全建议。Agent Search 无法保证自动补全建议中不会返回 PII。

  2. 如果在自动补全测试期间发现 PII 泄露,或者您已经知道自己有非标准的 PII 需要保护(例如专有用户 ID),请尝试调整自动补全阈值和内容投放参数。如需了解详情,请参阅降低返回包含 PII 的建议的风险

  3. 如果调整参数不足以防止 PII 泄露,请自行实现 DLP 解决方案。针对数据存储区、用户事件或用户搜索查询中最有可能出现的 PII 类型自定义 DLP 解决方案。您可以使用 Sensitive Data Protection 或第三方 DLP 服务。根据需要,执行以下其中一项操作:

    • 在导入数据存储区中的文档和用户事件之前,请过滤掉个人身份信息。

    • 在提供服务时向用户显示建议之前,检查自动补全建议,并屏蔽包含任何 PII 的建议。

  4. 如果您使用搜索记录或用户事件模型,请在搜索栏中添加一些信息性文字,告知用户不要在搜索查询中输入 PII。

  5. 如果您在屏蔽 PII 方面有任何疑问或遇到特定问题,请与您的客户工程师 (CE) 或 Google 客户支持团队联系。

为 widget 开启或关闭自动补全功能

如需为 widget 启用或停用自动补全功能,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 AI Applications 页面。

    AI Applications

  2. 点击要修改的应用的名称。

  3. 点击配置

  4. 点击界面标签页。

  5. 切换显示自动补全建议选项,以启用或停用 widget 的自动补全建议。启用自动补全功能后,预计需要等待一两天才能开始显示建议。

更新自动补全设置

如需在界面中配置自动补全设置,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 AI Applications 页面。

    AI Applications

  2. 点击要修改的应用的名称。

  3. 点击配置

  4. 点击自动补全标签页。

  5. 为要更新的自动补全设置输入或选择新值:

    • 建议数量上限:可为查询提供的自动补全建议数量上限。
    • 触发自动补全的最小长度:在提供自动补全建议之前可输入的最小字符数。
    • 匹配顺序:查询字符串中自动补全功能可以开始匹配建议的位置。
    • 查询建议模型:用于生成检索到的建议的查询建议模型。您可以在 dataStores.completeQuery 中使用 queryModel 参数替换此设置。
    • 启用自动补全:默认情况下,自动补全功能在获得足够优质的数据(通常需要几天时间)之前不会开始提供建议。如果您想替换此默认设置,并更快地开始获取一些自动补全建议,请选择立即

      即使您选择立即,系统也可能需要一天的时间来生成建议,并且在获得足够优质的数据之前,仍会缺少一些自动补全建议或建议质量不佳。

    • 拒绝名单:以 JSON 文件的形式在 Cloud Storage 存储桶中导入拒绝名单。如需详细了解拒绝名单限制和规范,请参阅使用自动补全拒绝名单

  6. 点击保存并发布。对于已开启自动补全功能的应用,所做更改会在几分钟内生效。

降低返回包含 PII 的建议的风险

最终用户拥有各种 PII 信息,例如驾照和电话号码,这些信息本应保密。不过,用户有可能会在搜索栏中输入此类 PII 信息,以查找与自己相关的结果。

如果您使用搜索记录或用户事件模型,并且用户很可能会在搜索栏中输入 PII,那么您可以通过调整以下参数来减少 PII 泄露:

  • queryFrequencyThreshold:查询必须被输入过这么多次,才能作为自动补全建议返回。

  • numUniqueUsersThreshold:在查询可作为自动补全建议返回之前,必须有这么多唯一身份用户输入过该查询。搜索用户事件userPseudoId 字段的值决定了用户是否是唯一身份用户。

应用场景示例

例如,假设用户拥有应保密的账号。

如果使用的是搜索记录或用户事件建议模型,那么这些账号以及最终用户搜索的所有其他字词都会用于生成建议。因此,如果用户 A 的账号 YZ-46789A 被反复输入到搜索栏中,而用户 B 的账号为 YZ-42345B,那么当用户 B 在搜索栏中输入 YZ-4 时,系统返回的自动补全建议可能就是用户 A 的账号。

为了降低发生此类泄露的可能性,Agent Search 管理员决定:

  • queryFrequencyThreshold 参数的值增加到 30。在这种情况下,一个账号被输入如此多次的可能性非常小。不过,热门搜索查询的输入频率至少会达到该值。

  • numUniqueUsersThreshold 参数的值增加到 6。管理员认为,同一个账号不太可能在 6 次分别与不同 userPseudoId 关联的搜索事件中都被输入到搜索栏。

过程

自动补全功能有两个阈值参数。这些参数无法在 Google Cloud 控制台中设置,但可以通过对 updateCompletionConfig 方法的 REST API 调用来设置。

如需配置自动补全阈值设置,请按以下步骤操作。每个步骤都是可选的,具体取决于您要更改的参数。

REST

  1. 更新 CompletionConfig.queryFrequencyThreshold 字段:

    curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "X-Goog-User-Project: PROJECT_ID" \
      https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig?updateMask=queryFrequencyThreshold \
      -d '{
        "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig",
        "queryFrequencyThreshold": QUERY_FREQUENCY_THRESHOLD
      }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的编号或 ID。

    • DATA_STORE_ID:与您的应用关联的数据存储区 ID。

    • QUERY_FREQUENCY_THRESHOLD:一个整数值,表示搜索查询必须输入的最小次数,之后才能作为自动补全建议返回。该计数是在一个为期数月的滚动时间窗口内汇总的。默认值为 8

  2. 更新 CompletionConfig.numUniqueUsersThreshold 字段:

    curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "X-Goog-User-Project: PROJECT_ID" \
      https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig?updateMask=numUniqueUsersThreshold \
      -d '{
        "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig",
        "numUniqueUsersThreshold": UNIQUE_USERS
      }'
    

    UNIQUE_USERS 替换为一个整数值,该值表示必须输入指定搜索查询的唯一用户数量下限,达到该下限后,系统才能将该搜索查询作为自动补全建议返回。该计数是在一个为期数月的滚动时间窗口内汇总的。默认值为 3

更新架构中的可补全字段注释

如需为结构化数据架构中的字段启用自动补全功能,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 AI Applications 页面。

    AI Applications

  2. 点击要修改的应用的名称。必须使用结构化数据。

  3. 点击数据

  4. 点击架构标签页。

  5. 点击修改,选择要标记为 completable 的架构字段。

  6. 点击保存以保存更新后的字段配置。这些建议大约需要一天时间才能生成并返回。

发送自动补全请求

以下示例展示了如何发送自动补全请求。

REST

如需使用 API 发送自动补全请求,请按以下步骤操作:

  1. 查找数据存储区 ID。如果您已有数据存储区 ID,请跳至下一步。

    1. 在 Google Cloud 控制台中,前往 AI Applications 页面,然后在导航菜单中点击数据存储区

      前往“数据存储区”页面

    2. 点击您的数据存储区的名称。

    3. 在数据存储区的数据页面上,获取数据存储区 ID。

  2. 调用 dataStores.completeQuery 方法。

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:completeQuery?query=QUERY_STRING"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的编号或 ID。

    • DATA_STORE_ID:与您的应用关联的数据存储区 ID。

    • QUERY_STRING:用于获取建议的已输入内容。

向其他模型发送自动补全请求

如需使用其他查询建议模型发送自动补全请求,请按以下步骤操作:

  1. 查找您的数据存储区 ID。如果您已有数据存储区 ID,请跳至下一步。

    1. 在 Google Cloud 控制台中,前往 AI Applications 页面,然后在导航菜单中点击数据存储区

      前往“数据存储区”页面

    2. 点击您的数据存储区的名称。

    3. 在数据存储区的数据页面上,获取数据存储区 ID。

  2. 调用 dataStores.completeQuery 方法。

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:completeQuery?query=QUERY_STRING&query_model=QUERY_SUGGESTIONS_MODEL"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的编号或 ID。

    • DATA_STORE_ID:与您的应用相关联的数据存储区的唯一 ID。

    • QUERY_STRING:用于获取建议的已输入内容。

    • QUERY_SUGGESTIONS_MODEL:用于请求的查询建议模型:documentdocument-completablesearch-historyuser-event。对于医疗保健数据,请使用 healthcare-default

C#

如需了解详情,请参阅 Agent Search C# API 参考文档

如需向 Agent Search 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

using Google.Cloud.DiscoveryEngine.V1;

public sealed partial class GeneratedCompletionServiceClientSnippets
{
    /// <summary>Snippet for CompleteQuery</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void CompleteQueryRequestObject()
    {
        // Create client
        CompletionServiceClient completionServiceClient = CompletionServiceClient.Create();
        // Initialize request argument(s)
        CompleteQueryRequest request = new CompleteQueryRequest
        {
            DataStoreAsDataStoreName = DataStoreName.FromProjectLocationDataStore("[PROJECT]", "[LOCATION]", "[DATA_STORE]"),
            Query = "",
            QueryModel = "",
            UserPseudoId = "",
            IncludeTailSuggestions = false,
        };
        // Make the request
        CompleteQueryResponse response = completionServiceClient.CompleteQuery(request);
    }
}

Go

如需了解详情,请参阅 Agent Search Go API 参考文档

如需向 Agent Search 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


//go:build examples

package main

import (
	"context"

	discoveryengine "cloud.google.com/go/discoveryengine/apiv1"
	discoveryenginepb "cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := discoveryengine.NewCompletionClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}