配置自动补全

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

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

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

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

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

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

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

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

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

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

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

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

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

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


搜索查询建议模型

数据源

网站数据

结构化数据

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

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

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

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

自动补全功能

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

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

如果数据存储区中存在电子邮件地址 [email protected],那么当用户在搜索栏中输入 jef 时,Vertex AI Search 不会返回该电子邮件地址作为自动补全建议。

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

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

尾部匹配建议

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

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

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

仅在满足以下条件时,系统才会返回尾部匹配建议:

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

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

防范 PII 泄露

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

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

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

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

  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. 点击 UI 标签页。

  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 的账号。

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

  • 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:用于获取建议的预输入内容。

    • AUTOCOMPLETE_MODEL:自动补全数据

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

C#

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

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

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

如需了解详情,请参阅 AI Applications Go API 参考文档

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

 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. 	} 	defer c.Close()  	req := &discoveryenginepb.CompleteQueryRequest{ 		// TODO: Fill request struct fields. 		// See https://pkg.go.dev/cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb#CompleteQueryRequest. 	} 	resp, err := c.CompleteQuery(ctx, req) 	if err != nil { 		// TODO: Handle error. 	} 	// TODO: Use resp. 	_ = resp } 

Java

如需了解详情,请参阅 AI Applications Java API 参考文档

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

import com.google.cloud.discoveryengine.v1.CompleteQueryRequest; import com.google.cloud.discoveryengine.v1.CompleteQueryResponse; import com.google.cloud.discoveryengine.v1.CompletionServiceClient; import com.google.cloud.discoveryengine.v1.DataStoreName;  public class SyncCompleteQuery {    public static void main(String[] args) throws Exception {     syncCompleteQuery();   }    public static void syncCompleteQuery() throws Exception {     // 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/java/docs/setup#configure_endpoints_for_the_client_library     try (CompletionServiceClient completionServiceClient = CompletionServiceClient.create()) {       CompleteQueryRequest request =           CompleteQueryRequest.newBuilder()               .setDataStore(                   DataStoreName.ofProjectLocationDataStoreName(                           "[PROJECT]", "[LOCATION]", "[DATA_STORE]")                       .toString())               .setQuery("query107944136")               .setQueryModel("queryModel-184930495")               .setUserPseudoId("userPseudoId-1155274652")               .setIncludeTailSuggestions(true)               .build();       CompleteQueryResponse response = completionServiceClient.completeQuery(request);     }   } }

Node.js

如需了解详情,请参阅 AI Applications Node.js API 参考文档

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

/**  * 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.  * TODO(developer): Uncomment these variables before running the sample.  */ /**  *  Required. The parent data store resource name for which the completion is  *  performed, such as  *  `projects/* /locations/global/collections/default_collection/dataStores/default_data_store`.  */ // const dataStore = 'abc123' /**  *  Required. The typeahead input used to fetch suggestions. Maximum length is  *  128 characters.  */ // const query = 'abc123' /**  *  Specifies the autocomplete data model. This overrides any model specified  *  in the Configuration > Autocomplete section of the Cloud console. Currently  *  supported values:  *  * `document` - Using suggestions generated from user-imported documents.  *  * `search-history` - Using suggestions generated from the past history of  *  SearchService.Search google.cloud.discoveryengine.v1.SearchService.Search   *  API calls. Do not use it when there is no traffic for Search API.  *  * `user-event` - Using suggestions generated from user-imported search  *  events.  *  * `document-completable` - Using suggestions taken directly from  *  user-imported document fields marked as completable.  *  Default values:  *  * `document` is the default model for regular dataStores.  *  * `search-history` is the default model for site search dataStores.  */ // const queryModel = 'abc123' /**  *  A unique identifier for tracking visitors. For example, this could be  *  implemented with an HTTP cookie, which should be able to uniquely identify  *  a visitor on a single device. This unique identifier should not change if  *  the visitor logs in or out of the website.  *  This field should NOT have a fixed value such as `unknown_visitor`.  *  This should be the same identifier as  *  UserEvent.user_pseudo_id google.cloud.discoveryengine.v1.UserEvent.user_pseudo_id   *  and  *  SearchRequest.user_pseudo_id google.cloud.discoveryengine.v1.SearchRequest.user_pseudo_id.  *  The field must be a UTF-8 encoded string with a length limit of 128  *  characters. Otherwise, an `INVALID_ARGUMENT` error is returned.  */ // const userPseudoId = 'abc123' /**  *  Indicates if tail suggestions should be returned if there are no  *  suggestions that match the full query. Even if set to true, if there are  *  suggestions that match the full query, those are returned and no  *  tail suggestions are returned.  */ // const includeTailSuggestions = true  // Imports the Discoveryengine library const {CompletionServiceClient} = require('@google-cloud/discoveryengine').v1;  // Instantiates a client const discoveryengineClient = new CompletionServiceClient();  async function callCompleteQuery() {   // Construct request   const request = {     dataStore,     query,   };    // Run request   const response = await discoveryengineClient.completeQuery(request);   console.log(response); }  callCompleteQuery();

Python

如需了解详情,请参阅 AI Applications Python API 参考文档

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

# 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://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import discoveryengine_v1   def sample_complete_query():     # Create a client     client = discoveryengine_v1.CompletionServiceClient()      # Initialize request argument(s)     request = discoveryengine_v1.CompleteQueryRequest(         data_store="data_store_value",         query="query_value",     )      # Make the request     response = client.complete_query(request=request)      # Handle the response     print(response) 

Ruby

如需了解详情,请参阅 AI Applications Ruby API 参考文档

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

require "google/cloud/discovery_engine/v1"  ## # Snippet for the complete_query call in the CompletionService service # # 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/ruby/docs/reference. # # This is an auto-generated example demonstrating basic usage of # Google::Cloud::DiscoveryEngine::V1::CompletionService::Client#complete_query. # def complete_query   # Create a client object. The client can be reused for multiple calls.   client = Google::Cloud::DiscoveryEngine::V1::CompletionService::Client.new    # Create a request. To set request fields, pass in keyword arguments.   request = Google::Cloud::DiscoveryEngine::V1::CompleteQueryRequest.new    # Call the complete_query method.   result = client.complete_query request    # The returned object is of type Google::Cloud::DiscoveryEngine::V1::CompleteQueryResponse.   p result end

使用自动补全拒绝名单

您可以使用拒绝名单来防止特定词条显示为自动补全建议。

例如,以一家制药公司为例。如果某种药物不再获得 FDA 批准,但在其数据存储区中的文档中提及了该药物,他们可能希望阻止该药物显示为建议的查询。公司可以将相应药物的名称添加到禁止名单中,以防止系统建议该药物。

适用的限制如下:

  • 每个数据存储区一个拒绝名单
  • 上传拒绝名单会覆盖相应数据存储区的所有现有拒绝名单
  • 每个禁止列表最多可包含 1000 个字词
  • 搜索字词不区分大小写
  • 导入拒绝名单后,需要 1-2 天才能生效

您的禁止列表中的每个条目都包含 blockPhrasematchOperator

  • blockPhrase:输入一个字符串作为禁止列表中的字词。字词不区分大小写。
  • matchOperator:接受以下值:
    • EXACT_MATCH:防止拒绝名单中的词条完全匹配时显示为建议的查询。
    • CONTAINS:防止显示包含拒绝名单中的字词的任何建议。

以下是包含四项内容的禁止列表示例:

{     "entries": [         {"blockPhrase":"Oranges","matchOperator":"CONTAINS"},         {"blockPhrase":"bAd apples","matchOperator":"EXACT_MATCH"},         {"blockPhrase":"Cool as A Cucumber","matchOperator":"EXACT_MATCH"},         {"blockPhrase":"cherry pick","matchOperator":"CONTAINS"}     ] }

在导入禁止名单之前,请验证是否已为 Discovery Engine 编辑者访问权限设置必要的访问权限控制

您可以从本地 JSON 数据Cloud Storage 导入拒绝名单。如需从数据存储区中移除禁止名单,请完全清除禁止名单

从本地 JSON 数据导入禁止名单

如需从包含您的禁止列表的本地 JSON 文件导入禁止列表,请执行以下操作:

  1. 以以下格式在本地 JSON 文件中创建禁止列表。请确保每个禁止列表条目都位于新行中,且不包含换行符。

    {     "inlineSource": {         "entries": [             { "blockPhrase":"TERM_1","matchOperator":"MATCH_OPERATOR_1" },             { "blockPhrase":"TERM_2","matchOperator":"MATCH_OPERATOR_2" }         ]     } }
  2. suggestionDenyListEntries:import 方法发送 POST 请求,并提供 JSON 文件的名称。

    curl -X POST \     -H "Authorization: Bearer $(gcloud auth print-access-token)" \     -H "Content-Type: application/json; charset=utf-8" \     --data @DENYLIST_FILE \   "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/suggestionDenyListEntries:import" 

    替换以下内容:

    • DENYLIST_FILE:包含禁止列表字词的 JSON 文件的本地路径。
    • PROJECT_ID:您的 Google Cloud 项目的编号或 ID。

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

导入禁止列表后,系统需要 1-2 天的时间才能开始过滤建议。

从 Cloud Storage 导入拒绝名单

如需从 Cloud Storage 中的 JSON 文件导入禁止列表,请执行以下操作:

  1. 以以下格式在 JSON 文件中创建禁止名单,然后将其导入到 Cloud Storage 存储桶。确保每个禁止列表条目都位于单独的一行,没有换行符。

    { "blockPhrase":"TERM_1","matchOperator":"MATCH_OPERATOR_1" } { "blockPhrase":"TERM_2","matchOperator":"MATCH_OPERATOR_2" }
  2. 创建一个包含 gcsSource 对象的本地 JSON 文件。使用此参数指向 Cloud Storage 存储桶中禁止名单文件的位置。

    {     "gcsSource": {         "inputUris": [ "DENYLIST_STORAGE_LOCATION" ]     } }

    DENYLIST_STORAGE_LOCATION 替换为 Cloud Storage 中您的禁止列表的位置。您只能输入一个 URI。必须按以下格式输入 URI:gs://BUCKET/FILE_PATH

  3. suggestionDenyListEntries:import 方法发出 POST 请求,并添加 gcsSource 对象。

    curl -X POST \     -H "Authorization: Bearer $(gcloud auth print-access-token)" \     -H "Content-Type: application/json; charset=utf-8" \     --data @GCS_SOURCE_FILE \    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/suggestionDenyListEntries:import" 

    替换以下内容:

    • GCS_SOURCE_FILE:包含指向您的禁止列表的 gcsSource 对象的文件的本地路径。
    • PROJECT_ID:您的 Google Cloud 项目的编号或 ID。

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

导入禁止列表后,系统需要 1-2 天的时间才能开始过滤建议。

清除拒绝名单

如需从数据存储区中清除禁止名单,请执行以下操作:

  1. suggestionDenyListEntries:purge 方法发出 POST 请求。

    curl -X POST \     -H "Authorization: Bearer $(gcloud auth print-access-token)" \    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/suggestionDenyListEntries:purge" 

    替换以下内容:

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

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

使用导入的自动补全建议列表

您可以选择提供自己的自动补全建议列表,而不是使用从自动补全数据模型生成的自动补全建议。

对于大多数应用,使用来自某个自动补全数据模型的生成建议可获得更好的结果。不过,在极少数情况下,模型的建议可能无法满足您的需求,而提供离散的建议列表可以为用户带来更好的自动补全体验。

例如,一家小型在线书店将其图书目录导入为自动补全建议。当客户开始在搜索栏中输入内容时,自动补全建议始终是导入列表中的图书标题。当图书列表发生变化时,书店会清除当前列表并导入新列表。该列表的摘录可能如下所示:

{"suggestion": "Wuthering Heights", "globalScore": "0.52" }, {"suggestion": "The Time Machine", "globalScore": "0.26" }, {"suggestion": "Nicholas Nickleby", "globalScore": "0.38" }, {"suggestion": "A Little Princess", "globalScore": "0.71" }, {"suggestion": "The Scarlet Letter", "globalScore": "0.32" } 

globalScore 是一个介于 [0, 1] 范围内的浮点数,用于对建议进行排名。或者,您也可以使用大于 1 的整数 frequency 分数。当 globalScore 不可用(设置为 null)时,系统会使用 frequency 得分对建议进行排名。

设置和导入自动补全建议

如需设置并从 BigQuery 导入自动补全建议列表,请按以下步骤操作:

  1. 创建建议列表并将其加载到 BigQuery 表中。

    您至少需要以字符串形式提供每个建议,并提供全局得分或频次。

    请使用以下表格架构来列出建议:

    [   {     "description": "The suggestion text",     "mode": "REQUIRED",     "name": "suggestion",     "type": "STRING"   },   {     "description": "Global score of this suggestion. Control how this suggestion would be scored and ranked. Set global score or frequency; not both.",     "mode": "NULLABLE",     "name": "globalScore",     "type": "FLOAT"   },   {     "description": "Frequency of this suggestion. Used to rank suggestions when the global score is not available.",     "mode": "NULLABLE",     "name": "frequency",     "type": "INTEGER"   } ] 

    如需了解如何创建 BigQuery 表并使用自动补全建议列表加载该表,请参阅 BigQuery 文档

  2. 从 BigQuery 导入列表。

    completionSuggestions:import 方法发出 POST 请求,其中包含 bigquerySource 对象。

    curl -X POST \  -H "Authorization: Bearer $(gcloud auth print-access-token)" \  -H "Content-Type: application/json; charset=utf-8" \  -H "X-Goog-User-Project: PROJECT_ID" \  "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/completionSuggestions:import" \  -d '{       "bigquery_source": {"project_id": "PROJECT_ID_SOURCE", "dataset_id": "DATASET_ID", "table_id": "TABLE_ID"}  }' 

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的编号或 ID。
    • DATA_STORE_ID:Vertex AI Search 数据存储区的 ID。
    • PROJECT_ID_SOURCE:包含要导入的数据集的项目。
    • DATASET_ID:要导入的建议列表的数据集 ID
    • TABLE_ID:要导入的建议列表的表格 ID
  3. 可选:记下返回的 name 值,然后按照获取长时间运行的操作的详细信息中的说明查看导入操作何时完成。

  4. 如果您尚未为该应用启用自动补全功能,请按照更新自动补全设置中的步骤操作。请务必将启用自动补全设置为立即

  5. 等待几天,以便完成编入索引流程并使导入的建议可供使用。

发送自动补全请求

如需发送自动补全请求,以返回导入的建议,而不是来自自动补全模型的建议,请执行以下操作:

  1. 按照相应步骤向其他模型发送自动补全请求,并将 AUTOCOMPLETE_MODEL 设置为 imported-suggestion

清除导入的自动补全建议列表

在导入新的自动填充建议列表之前,请先移除现有列表。

如需清除现有的自动填充建议列表,请按以下步骤操作:

  1. completionSuggestions:purge 方法发出 POST 请求。

    curl -X POST \     -H "Authorization: Bearer $(gcloud auth print-access-token)" \    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/completionSuggestions:purge" 

    替换以下内容:

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

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

高级文档数据模型

AI Applications 提供用于自动补全的高级数据模型。此数据模型基于您导入的文档,通过利用 Google 大语言模型 (LLM) 生成高质量的自动补全建议。

此功能尚处于实验阶段。如果您有兴趣使用此功能,请与您的 Google Cloud 客户支持团队联系,并要求将您添加到许可名单中。

高级文档数据模型不适用于医疗保健搜索,也不适用于美国和欧盟多区域。