利用搜索调参,提高搜索结果的准确性

与基本搜索模型相比,经过调优的搜索模型可以提供更优质的结果。

如果您有特定于行业或公司的查询,而一般的大语言模型无法很好地处理这些查询,那么搜索调参特别有用。它可用于进一步训练搜索模型。

限制

搜索优化只能应用于非结构化数据存储区。

训练数据简介

如需调优搜索模型,您首先需要汇总训练数据。

训练数据应包含您预计最终用户会询问的问题,以及包含回答这些问题所需相关信息的 250 到 500 字的文字摘要。一个查询可以与多个摘要相关联,前提是每个摘要都包含可回答该查询的信息。

训练数据还应包含与询问不匹配但在风格和长度方面与回答类似的文本片段。这些没有关联查询的摘要会提供随机的否定样本来调整模型。Google 建议您至少提供 10,000 个此类摘要。

下面列出了一些术语,用于描述您需要提供的训练数据:

  • 训练查询:您预计最终用户会询问的查询。请务必重点关注包含特定领域或公司术语的查询。

    请提供至少 100 个字符。

  • 提取片段:摘要(通常是多个段落)必须从数据存储区中的文档中逐字提取。数据存储区中的所有文档统称为“语料库”。

    您必须提供两种类型的摘要片段:

    • 包含回答训练查询所需相关信息的片段。这些细分受众群与查询存在正匹配。

    • 未与任何训练查询相关联的细分。这些片段在模型调优中用作随机负例。

    一两句话的长度不足以成为提取片段;片段需要包含足够的上下文以进行训练。例如,在回答“谁创立了 Google”这样的查询时,仅提供“Larry Page”这样的简短摘要是不够的。如需查看足够长的细分示例,请参阅下表中的示例。

    请为每个查询提供至少一个摘要片段,并提供至少 1 万个其他摘要片段。

  • 相关性得分:相关性得分是指非负整数,用于估算摘要片段与查询的相关性。您需要为每个查询和摘要片段对提供一个得分值。得分为 0 表示摘要片段与查询完全不相关。得分大于零表示存在一定相关性。对于简单的评分,Google 建议为所有相关细分受众群体分配 1 分,为不相关细分受众群体分配 0 分。或者,如果您想对相关性进行排名,可以为相关性分配 0 到 10 的评分(例如),其中 10 表示相关性最高,0 表示完全不相关。

    提供至少 100 个相关得分,以及(可选)其他不相关得分。

查询和提取式片段对示例

下表提供了一些查询和提取式片段对的示例。以下一般示例摘自维基百科。不过,为了进行有用的优化,您需要提供来自专有数据集的文档,其中包含特定于贵商家的信息,并且在网络上不易找到。

此表中的最后一对是得分为零的示例对,其中答案与询问无关。

培训查询 提取片段 得分
谁创立了 Google? Google 由美国计算机科学家拉里·佩奇和谢尔盖·布林于 1998 年 9 月 4 日创立,当时他们还是加利福尼亚州斯坦福大学的博士生。他们合计持有 Google 约 14% 的已上市股票,并通过拥有超级投票权的股票控制着 56% 的股东投票权。该公司于 2004 年通过首次公开募股 (IPO) 上市。2015 年,Google 重组为 Alphabet Inc. 的一家全资子公司。Google 是 Alphabet 的最大子公司,也是 Alphabet 互联网资产和利益的控股公司。Sundar Pichai 于 2015 年 10 月 24 日被任命为 Google 首席执行官,接替了成为 Alphabet 首席执行官的 Larry Page。2019 年 12 月 3 日,Pichai 还成为了 Alphabet 的首席执行官。[...] 在最具价值的品牌列表中,Google 在《福布斯》杂志的排名中位列第二,在 Interbrand 的排名中位列第四。 1
血液离开右心室后会被泵到哪里? 含氧血液会通过肺静脉离开肺部,然后肺静脉会将其送回心脏的左侧,从而完成肺循环。然后,这些血液进入左心房,左心房将其通过二尖瓣泵入左心室。从左心室,血液会通过主动脉瓣进入主动脉。然后,血液会通过全身循环分布到身体,然后再次返回到肺循环。动脉 主要条目:肺动脉 从右心室,血液会通过半月形肺动脉瓣进入左侧和右侧主肺动脉(每个肺一个),然后分支成更小的肺动脉,遍布整个肺部。[...] 心脏分流是心脏各部分之间的不自然连接,会导致血液绕过肺部流动。 1
保龄球名人堂位于何处? 世界保龄球作家协会 ( WBW) 国际保龄球名人堂成立于 1993 年,位于德克萨斯州阿灵顿市国际保龄球校园内的国际保龄球博物馆和名人堂内。历史 国际保龄球博物馆和名人堂位于美国密苏里州圣路易斯的 11 Stadium Plaza,与圣路易斯红雀队名人堂博物馆共用同一栋建筑,一直持续到 2008 年 11 月 8 日。该博物馆搬到了阿灵顿,并于 2010 年初重新开业。2012 年,WBW 与国际保龄媒体协会合并。合并后,WBW 名人堂入选者成为了 IBMA Luby 名人堂的成员。世界保龄球作家协会的官员组成了名人堂的董事会。][...] 获得最多选票的男女会员将当选。 1
为什么天空是蓝色的? “Hello, World!”程序通常是一个简单的计算机程序,它会向屏幕(通常是控制台)输出(或显示)类似于“Hello, World!”的消息,同时忽略任何用户输入。在大多数通用编程语言中,此程序是一小段代码,用于说明语言的基本语法。“Hello, World!” 程序通常是新编程语言的学生编写的第一个程序,但此类程序还可用作检查工具,以确保用于编译或运行源代码的计算机软件已正确安装,并且其操作员了解如何使用该软件。[...] 在 C 语言版本之前,Kernighan 在 1972 年出版了《A Tutorial Introduction to the Language B》(对语言 B 的简介),其中包含一个示例,该示例用于说明外部变量,其中就包含该程序的第一个已知版本 0

测试简介

训练完成后,系统会对经过调优的搜索进行测试,以确定调优是否提高了结果的准确性。您可以明确提供要测试的查询。如果您未提供测试查询,Vertex AI Search 会将 20% 的训练查询用作测试查询。

训练文件

训练数据需要分三个(可选四个)特定文件上传:

三个训练文件(语料库文件、查询文件和训练标签文件)以及(可选)测试标签文件都需要位于 Cloud Storage 中。文件的路径由 trainCustomMethod 调用中的字段定义。

语料库文件

语料库文件包含提取式片段:包含用于回答查询文件中查询的信息的片段,以及许多其他片段,这些片段在调整模型时用作随机负例。您应至少有 100 个包含查询回答的细分;多个细分可以回答一个查询。此外,您还应至少有 10,000 个随机细分。

如果数据存储区中的文档包含的字词少于 500 个,您可以将整个文档用作片段。否则,请以程序化方式从数据存储区中的文档中随机创建 250-500 个字的片段,并将其添加到语料库文件中。

语料库文件是 JSONL(JSON 行)文件,其中每一行都包含具有字符串值的字段 _idtext。例如:

  {"_id": "doc1", "text": "Google was founded on September 4, 1998, by American computer scientists Larry Page and Sergey Brin while they were PhD students at Stanford University in California. Together they own about 14% of its publicly listed shares and control 56% of its stockholder voting power through super-voting stock. The company went public via an initial public offering (IPO) in 2004. In 2015, Google was reorganized as a wholly owned subsidiary of Alphabet Inc. Google is Alphabet's largest subsidiary and is a holding company for Alphabet's internet properties and interests. Sundar Pichai was appointed CEO of Google on October 24, 2015, replacing Larry Page, who became the CEO of Alphabet. On December 3, 2019, Pichai also became the CEO of Alphabet. [...] On the list of most valuable brands, Google is 105 ranked second by Forbes and fourth by Interbrand."}
  {"_id": "doc2", "text": "Oxygenated blood leaves the lungs through pulmonary veins, which return it to the left part of the heart, completing the pulmonary cycle. This blood then enters the left atrium, which pumps it through the mitral valve into the left ventricle. From the left ventricle, the blood passes through the aortic valve to the aorta. The blood is then distributed to the body through the systemic circulation before returning again to the pulmonary circulation. Arteries Main article: Pulmonary artery From the right ventricle, blood is pumped through the semilunar pulmonary valve into the left and right main pulmonary artery (one for each lung), which branch into smaller pulmonary arteries that spread throughout the lungs. [...] Cardiac shunt is an unnatural connection between parts of the heart that leads to blood flow that bypasses the lungs."}
  {"_id": "doc3", "text": "The World Bowling Writers ( WBW ) International Bowling Hall of Fame was established in 1993 and is located in the International Bowling Museum and Hall of Fame , on the International Bowling Campus in Arlington , Texas. History The International Bowling Museum and Hall of Fame was located at 11 Stadium Plaza, St. Louis, Missouri, USA, and shared the same building with the St. Louis Cardinals Hall of Fame Museum, until November 8, 2008. It moved to Arlington and reopened in early 2010. In 2012, the WBW was merged with the International Bowling Media Association. After the merger, the WBW Hall of Fame inductees became part of the IBMA Luby Hall of Fame.  officers of the World Bowling Writers, which formed the Hall's Board.][...] The man and woman who receive the most votes are elected."}
  {"_id": "doc4", "text": "A \"Hello, World!\" program is generally a simple computer program which outputs (or displays) to the screen (often the console) a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.  [...] The C-language version was preceded by Kernighan's own 1972 A Tutorial Introduction to the Language B, where the first known version of the program is found in an example used to illustrate external variables."}

文件的大小上限为 50 万行。

查询文件

查询文件包含将用于调优模型的示例查询。每个查询都应在语料库文件中有一个或多个相应的提取片段。您应至少提供 100 个正例匹配查询。您还可以提供不相关的查询:这些查询对应于相关性得分为零的提取式细分。

查询文件采用 JSONL 格式,并且与语料库文件具有相同的字段。

例如:

  {"_id": "query1", "text": "who founded Google?"}
  {"_id": "query2", "text": "where is blood pumped after it leaves the right ventricle?"}
  {"_id": "query3", "text": "where is the bowling hall of fame located?"}
  {"_id": "query4", "text": "why is the sky blue?"}

文件中允许的查询数量上限为 4 万个。

训练标签

训练标签文件会将查询与提取片段相关联,并为每个查询和片段对评分。

如果没有测试标签文件,则会将训练标签文件中 20% 的查询预留用于在训练后评估经过调整的模型。

该文件包含查询的 ID 及其匹配(或不匹配)的提取片段的 ID,以及该片段与查询的相关性得分。每个查询必须至少包含一行;如果某个查询由两个片段回答,则该查询有两行。Score 是非负整数值。任何大于零的分数都表示文档与查询相关。数字越大表示相关性越高。如果省略得分,则默认值为 1。

训练标签文件是带有标题的 TSV(制表符分隔值)文件。该文件必须包含 query-idcorpus-idscore 列。query-id 是一个字符串,与查询文件中的 _id 键匹配,corpus-id 是一个字符串,与语料库文件中的 _id 匹配。

例如:

query-id    corpus-id   score
query1  doc1    1
query2  doc2    1
query3  doc3    1
query3  doc9    1
query4  doc4    0

训练标签文件必须至少包含 100 个唯一查询 ID。训练标签文件中的查询 ID 数量加上测试标签文件中的查询数量必须小于 500,000。

测试标签

与训练标签文件一样,此可选文件包含查询和提取片段的 ID 以及相关性得分。与训练标签文件相比,它包含的查询更少且不同。如果存在,文件中的查询和提取式片段对将用于评估调整。如果没有测试标签文件,则系统会使用训练标签文件中的查询和摘要片段对进行评估。

此文件的格式与训练标签文件的格式相同。

例如:

query-id    corpus-id   score
query200    doc200  1
query201    doc201  1
query202    doc202  1

虽然测试标签文件是可选的,但如果您提供此文件,则其中必须包含至少三个唯一的查询 ID。

准备工作

为应用启用企业版功能

如需使用您自己的训练数据对搜索模型进行调优,请按以下步骤操作。

控制台

如需使用 Google Cloud 控制台调优模型,请按以下步骤操作:

  1. 准备训练数据和(可选)测试数据文件。使用训练文件中所述的格式。

  2. 将文件上传到 Cloud Storage

  3. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

    Agent Builder

  4. 应用页面上,点击您要为其训练模型的应用的名称。

  5. 在导航菜单中,点击配置

  6. 点击调整标签页。

  7. 点击对基本模型进行调参

  8. 指定您在上一步骤 1 和 2 中准备的语料库、查询、训练和(可选)测试文件。

  9. 点击开始调优

  10. 刷新页面,然后在优化标签页的近期优化活动表格中查看状态。

REST

如需使用 trainCustomModel 方法调整数据存储区,请按以下步骤操作:

  1. 准备训练数据(以及可选的测试数据)文件。使用训练文件中所述的格式。

  2. 将文件放入 Cloud Storage 存储桶中。

  3. 运行以下 curl 命令,将文件从 Cloud Storage 存储桶上传到 Vertex AI Search:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:trainCustomModel" \
    -d '{
    "gcsTrainingInput": {
     "corpusDataPath": "CORPUS_JSONL_GCS_PATH",
     "queryDataPath": "QUERY_JSONL_GCS_PATH",
     "trainDataPath": "TRAIN_TSV_GCS_PATH",
     "testDataPath": "TEST_TSV_GCS_PATH"
    },
    "modelType": "search-tuning"
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。

    • DATA_STORE_ID:您要调整的数据存储区的 ID。

    • CORPUS_JSONL_GCS_PATH:Cloud Storage 中的语料库 JSONL 文件路径,例如 gs://my-bucket/corpus.jsonl

    • QUERY_JSONL_GCS_PATH:Cloud Storage 中的查询 JSONL 文件路径,例如 gs://my-bucket/query.jsonl

    • TRAIN_TSV_GCS_PATH:Cloud Storage 中的训练标签 TSV 文件路径,例如 gs://my-bucket/train.tsv

    • TEST_TSV_GCS_PATH:一个可选字段,用于指定测试标签 TSV 文件的 Cloud Storage 路径,例如 gs://my-bucket/test.tsv。如果您没有测试标签文件,请移除 testDataPath 字段或将其留空。

    如需了解此方法的一般信息,请参阅 trainCustomModel

    上传数据文件后,系统会自动开始调整。

    点击查看 curl 命令和响应示例。

    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321:trainCustomModel"
    -d '{
    "dataStore":
    "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321",
    "gcsTrainingInput": {
    "corpusDataPath": "gs://my-bucket/corpus.jsonl",
    "queryDataPath": "gs://my-bucket/query.jsonl",
    "trainDataPath": "gs://my-bucket/train.tsv"
    },
    "modelType": "search-tuning"
    }
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/operations/train-custom-model-6071430366161939774",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelMetadata"
      },
      "response": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelResponse",
        "modelStatus": "in-progress"
      }
    }
  4. 记下 trainCustomModel 方法返回的 name 值,然后按照获取长时间运行的操作的详细信息中的说明,查看搜索优化操作何时完成。

Python

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

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


from google.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# corpus_data_path = "gs://my-bucket/corpus.jsonl"
# query_data_path = "gs://my-bucket/query.jsonl"
# train_data_path = "gs://my-bucket/train.tsv"
# test_data_path = "gs://my-bucket/test.tsv"


def train_custom_model_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    corpus_data_path: str,
    query_data_path: str,
    train_data_path: str,
    test_data_path: str,
) -> Operation:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.SearchTuningServiceClient(client_options=client_options)

    # The full resource name of the data store
    data_store = f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{data_store_id}"

    # Make the request
    operation = client.train_custom_model(
        request=discoveryengine.TrainCustomModelRequest(
            gcs_training_input=discoveryengine.TrainCustomModelRequest.GcsTrainingInput(
                corpus_data_path=corpus_data_path,
                query_data_path=query_data_path,
                train_data_path=train_data_path,
                test_data_path=test_data_path,
            ),
            data_store=data_store,
            model_type="search-tuning",
        )
    )

    # Optional: Wait for training to complete
    # print(f"Waiting for operation to complete: {operation.operation.name}")
    # response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    # metadata = discoveryengine.TrainCustomModelMetadata(operation.metadata)

    # Handle the response
    # print(response)
    # print(metadata)
    print(operation)

    return operation

测试经过优化的搜索功能,并将其用于各个搜索查询

调优完成后,您可以通过比较使用调优模型的查询结果与使用基准模型的相同查询的结果来测试调优效果。

控制台

如需使用 Google Cloud 控制台预览经过调优的模型的行为,请按以下步骤操作:

  1. 前往调整标签页:

    1. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

      Agent Builder

    2. 点击要预览的应用的名称。

    3. 点击配置

    4. 点击调整标签页。

  2. 点击经过调优的模型,然后使用右侧的预览面板发出使用经过调优的模型的查询。

  3. 点击基准模型,然后使用右侧的预览面板使用原始模型进行查询。

  4. 比较结果的质量。

REST

如需评估调整效果,您可以将 enableSearchAdaptor 字段先设置为 true,然后再设置为 false,然后比较结果。将 enableSearchAdaptor 字段设置为 true 表示针对该查询使用经过优化的搜索版本。

如需发出使用经过调优的模型的搜索查询,请执行以下操作:

  1. 在查询方法调用中,将 customFineTuningSpec 字段中的 enableSearchAdaptor 字段设置为 true

    例如:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "customFineTuningSpec": { "enableSearchAdaptor": true }
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:您要查询的应用的 ID。

如需详细了解搜索查询,请参阅获取搜索结果servingConfigs.search 方法。

Python

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

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

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"          # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"
# search_query = "YOUR_SEARCH_QUERY"


def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
) -> discoveryengine.services.search_service.pagers.SearchPager:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.SearchServiceClient(client_options=client_options)

    # The full resource name of the search app serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_config"

    # Optional - only supported for unstructured data: Configuration options for search.
    # Refer to the `ContentSearchSpec` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
    content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
        # For information about snippets, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/snippets
        snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
            return_snippet=True
        ),
        # For information about search summaries, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
        summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
            summary_result_count=5,
            include_citations=True,
            ignore_adversarial_query=True,
            ignore_non_summary_seeking_query=True,
            model_prompt_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelPromptSpec(
                preamble="YOUR_CUSTOM_PROMPT"
            ),
            model_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelSpec(
                version="stable",
            ),
        ),
    )

    # Refer to the `SearchRequest` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        page_size=10,
        content_search_spec=content_search_spec,
        query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
            condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
        ),
        spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
            mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
        ),
        # Optional: Use fine-tuned model for this request
        # custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
        #     enable_search_adaptor=True
        # ),
    )

    page_result = client.search(request)

    # Handle the response
    for response in page_result:
        print(response)

    return page_result

开启“优化搜索”功能

测试经过优化的搜索功能后,如果您决定要将其用于所有搜索查询,可以将其设为默认搜索模型。

控制台

如需将经过调优的模型设为默认模型并将其应用于“预览”主页面、微件和 API 调用,请按以下步骤操作:

  1. 前往调整标签页:

    1. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

      Agent Builder

    2. 点击该应用的名称。

    3. 点击配置

    4. 点击调整标签页。

  2. 点击经过调优的模型

  3. 点击发布

REST

将经过调优的模型设为默认模型后,您无需像上一个步骤中那样在搜索查询中指定 customFineTuningSpec 字段。

如需默认针对所有搜索查询使用经过优化的搜索版本,请按以下步骤操作:

  1. 如需将经过优化的搜索设置为默认模型,请运行以下 curl 命令:

    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/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": true
    }
    }'
    

    如需了解此方法的一般信息,请参阅 servingConfigs.patch

Python

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

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


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

关闭“个性化搜索”

如果您不想再使用经过优化的搜索版本(例如,您发现结果与优化前没有任何改善或变得更差),则可以停用经过优化的搜索。

控制台

如需恢复使用基准模型作为默认模型,请按以下步骤操作:

  1. 前往调整标签页:

    1. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

      Agent Builder

    2. 点击该应用的名称。

    3. 点击配置

    4. 点击调整标签页。

  2. 点击基本模型

  3. 点击发布

REST

如需停止使用经过调优的模型,请运行与上一个类似的 curl 调用,但将 enableSearchAdaptor 设置为 false

  1. 运行以下 curl 命令:

    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/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": false
    }
    }'
    

    如需了解此方法的一般信息,请参阅 servingConfigs.patch

Python

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

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


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

后续步骤

  • 如需了解搜索优化对搜索质量的影响,请评估搜索质量。如需了解详情,请参阅评估搜索质量