Melhore os resultados da pesquisa com a otimização da pesquisa

Um modelo de pesquisa otimizado pode oferecer resultados de melhor qualidade do que o modelo de pesquisa base.

A otimização da pesquisa é particularmente valiosa se tiver consultas específicas da indústria ou da empresa que são menos bem abordadas por MDIs gerais. Pode ser usado para formar ainda mais o modelo de pesquisa.

Limitações

A otimização da pesquisa só pode ser aplicada a repositórios de dados não estruturados.

Acerca dos dados de preparação

Para otimizar um modelo de pesquisa, começa por reunir dados de aprendizagem.

Os dados de preparação devem conter consultas que espera que os utilizadores finais façam e fragmentos de texto com 250 a 500 palavras que contenham informações relevantes necessárias para responder às consultas. Uma consulta pode ser associada a vários fragmentos, desde que cada fragmento contenha informações que respondam à consulta.

Os dados de preparação também devem conter fragmentos de texto que não estejam associados a consultas, mas que sejam semelhantes às respostas em termos de estilo e comprimento. Estes fragmentos sem consultas associadas fornecem negativos aleatórios para ajustar o modelo. A Google recomenda que forneça, pelo menos, 10 000 destes fragmentos.

Seguem-se alguns termos para descrever os dados de preparação que tem de fornecer:

  • Consultas de preparação: consultas que prevê que os utilizadores finais façam. Certifique-se de que se foca em consultas com terminologia específica da empresa ou do domínio.

    Forneça, pelo menos, 100.

  • Segmentos extrativos: os fragmentos (normalmente, vários parágrafos) têm de ser retirados literalmente dos documentos no armazenamento de dados. Todos os documentos juntos no repositório de dados são denominados "o corpus".

    Tem de fornecer dois tipos de segmentos extrativos:

    • Segmentos que contêm informações relevantes necessárias para responder às consultas de preparação. Estes são segmentos que têm uma correspondência positiva com as consultas.

    • Segmentos que não estão associados a nenhuma consulta de preparação. Estes segmentos são usados como negativos aleatórios no ajuste do modelo.

    Uma ou duas frases não são suficientemente longas para serem um segmento de extração. O segmento tem de conter contexto suficiente para a preparação. Por exemplo, em resposta a uma consulta como "quem fundou o Google", um excerto curto como "Larry Page" é insuficiente. Para ver exemplos de segmentos suficientemente longos, consulte a tabela de exemplos seguinte.

    Forneça, pelo menos, um segmento extrativo por consulta e, pelo menos, 10 000 segmentos extrativos adicionais.

  • Pontuações de relevância: as pontuações de relevância são números inteiros não negativos que estimam a relevância do segmento extrativo para a consulta. Fornece um valor de pontuação para cada par de consulta e segmento extrativo. Uma pontuação de 0 significa que o segmento extrativo não é relevante para a consulta. Uma pontuação superior a zero indica alguma relevância. Para uma pontuação simples, a Google recomenda 1 para todos os segmentos relevantes e 0 para os não relevantes. Em alternativa, se quiser classificar a relevância, pode atribuir pontuações de relevância de 0 a 10 (por exemplo), com 10 para os segmentos mais relevantes e 0 para os segmentos que não são relevantes.

    Forneça, pelo menos, 100 classificações relevantes e, opcionalmente, classificações não relevantes adicionais.

Exemplos de pares de consultas e segmentos extrativos

A tabela seguinte apresenta alguns exemplos de pares de consultas e segmentos de extração. Estes exemplos gerais foram retirados da Wikipédia. No entanto, para uma otimização útil, é recomendável fornecer documentos de conjuntos de dados proprietários que contenham informações específicas da sua empresa e que sejam menos fáceis de encontrar na Web.

O último par nesta tabela é um exemplo de um par com pontuação zero, em que a resposta não é relevante para a consulta.

Consulta de preparação Segmento extrativo Pontuação
Quem fundou a Google? O Google foi fundado a 4 de setembro de 1998 pelos cientistas informáticos americanos Larry Page e Sergey Brin enquanto eram estudantes de doutoramento na Universidade de Stanford, na Califórnia.Juntos, detêm cerca de 14% das ações cotadas em bolsa e controlam 56% do poder de voto dos acionistas através de ações com direito a voto. A empresa tornou-se pública através de uma oferta pública inicial (OPI) em 2004. Em 2015, a Google foi reorganizada como uma subsidiária detida na totalidade pela Alphabet Inc. A Google é a maior subsidiária da Alphabet e uma holding para as propriedades e os interesses da Alphabet na Internet. Sundar Pichai foi nomeado CEO da Google a 24 de outubro de 2015, substituindo Larry Page, que se tornou CEO da Alphabet. A 3 de dezembro de 2019, Pichai também se tornou CEO da Alphabet. [...] Na lista das marcas mais valiosas, a Google ocupa o segundo lugar na classificação da Forbes e o quarto lugar na classificação da Interbrand. 1
Para onde é bombeado o sangue depois de sair do ventrículo direito? O sangue oxigenado sai dos pulmões através das veias pulmonares, que o devolvem à parte esquerda do coração, concluindo o ciclo pulmonar. Este sangue entra então no aurículo esquerdo, que o bombeia através da válvula mitral para o ventrículo esquerdo. Do ventrículo esquerdo, o sangue passa pela válvula aórtica para a aorta. O sangue é então distribuído ao corpo através da circulação sistémica antes de regressar novamente à circulação pulmonar. Artérias Artigo principal: artéria pulmonar A partir do ventrículo direito, o sangue é bombeado através da válvula pulmonar semilunar para a artéria pulmonar principal esquerda e direita (uma para cada pulmão), que se ramificam em artérias pulmonares mais pequenas que se espalham pelos pulmões. [...] O desvio cardíaco é uma ligação não natural entre partes do coração que leva a um fluxo sanguíneo que contorna os pulmões. 1
Onde se encontra o Hall da Fama do Bowling? O World Bowling Writers ( WBW) International Bowling Hall of Fame foi estabelecido em 1993 e está localizado no International Bowling Museum and Hall of Fame , no International Bowling Campus em Arlington, no Texas. História O International Bowling Museum and Hall of Fame estava localizado em 11 Stadium Plaza, St. Louis, Missouri, EUA, e partilhava o mesmo edifício com o St. Louis Cardinals Hall of Fame Museum até 8 de novembro de 2008. Mudou-se para Arlington e reabriu no início de 2010. Em 2012, a WBW foi unida à International Bowling Media Association. Após a fusão, os membros do WBW Hall of Fame passaram a fazer parte do IBMA Luby Hall of Fame.][...] Os homens e as mulheres que recebem mais votos são eleitos. 1
por que motivo o céu é azul? Um programa "Olá, mundo!" é geralmente um programa de computador simples que envia (ou apresenta) para o ecrã (frequentemente a consola) uma mensagem semelhante a "Olá, mundo!" ignorando qualquer entrada do utilizador. Um pequeno fragmento de código na maioria das linguagens de programação de uso geral, este programa é usado para ilustrar a sintaxe básica de uma linguagem. Um programa "Olá, mundo!" é frequentemente o primeiro escrito por um aluno de uma nova linguagem de programação, mas esse programa também pode ser usado como uma verificação para garantir que o software de computador destinado a compilar ou executar o código fonte está corretamente instalado e que o respetivo operador compreende como usá-lo. [...] A versão em linguagem C foi precedida pelo próprio tutorial de Kernighan de 1972, A Tutorial Introduction to the Language B, onde a primeira versão conhecida do programa se encontra num exemplo usado para ilustrar variáveis externas 0

Acerca dos testes

Após o treino, a pesquisa otimizada é testada para determinar se a otimização melhorou os resultados. Pode fornecer explicitamente as consultas que quer testar. Se não fornecer consultas de teste, o Vertex AI Search usa 20% das consultas de preparação como consultas de teste.

Ficheiros de preparação

Os dados de preparação têm de ser carregados em três (opcionalmente quatro) ficheiros específicos:

Os três ficheiros de preparação (ficheiro de corpus, ficheiro de consulta e ficheiro de etiquetas de preparação) e o ficheiro de etiquetas de teste (opcional) têm de estar no Cloud Storage. Os caminhos dos ficheiros são definidos por campos na chamada trainCustomMethod.

Ficheiro de corpus

O ficheiro de corpus contém segmentos extrativos: segmentos que contêm informações para responder às consultas no ficheiro de consultas e muitos segmentos adicionais a serem usados como negativos aleatórios ao otimizar o modelo. Deve ter, pelo menos, 100 segmentos que contenham respostas a consultas. As consultas podem ser respondidas por vários segmentos. Também deve ter, pelo menos, 10 000 segmentos aleatórios.

Se os documentos no seu repositório de dados contiverem menos de 500 palavras, pode usar documentos completos como segmentos. Caso contrário, crie programaticamente segmentos aleatórios de 250 a 500 palavras a partir dos documentos no seu repositório de dados e adicione-os ao ficheiro de corpus.

O ficheiro de corpus é um ficheiro JSONL (JSON lines) em que cada linha tem os campos _id e text com valores de string. Por exemplo:

  {"_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."}

O tamanho máximo do ficheiro é de 500 000 linhas.

Ficheiro de consulta

O ficheiro de consulta contém as consultas de exemplo que vão ser usadas para otimizar o modelo. Cada consulta deve ter um ou mais segmentos extrativos correspondentes no ficheiro do corpus. Deve fornecer, pelo menos, 100 consultas de correspondência positiva. Também pode fornecer consultas não relevantes: estas são consultas que correspondem a segmentos extrativos com uma pontuação de relevância de zero.

O ficheiro de consulta está no formato JSONL e tem os mesmos campos que o ficheiro de corpus.

Por exemplo:

  {"_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?"}

O número máximo de consultas permitidas no ficheiro é de 40 000.

Etiquetas de preparação

O ficheiro de etiquetas de preparação associa as consultas aos segmentos extrativos e classifica cada par de consulta e segmento.

Se o ficheiro de etiquetas de teste não estiver presente, 20% das consultas no ficheiro de etiquetas de preparação são reservadas para avaliar o modelo otimizado após a preparação.

O ficheiro contém o ID de uma consulta e o ID do respetivo segmento de extração com correspondência (ou sem correspondência) e uma classificação da relevância do segmento para a consulta. Tem de existir, pelo menos, uma linha por consulta. Se uma consulta for respondida por dois segmentos, existem duas linhas para essa consulta. Score é um valor inteiro não negativo. Qualquer pontuação superior a zero indica que o documento está relacionado com a consulta. Os números maiores indicam um nível de relevância mais elevado. Se a classificação for omitida, o valor predefinido é 1.

O ficheiro de etiquetas de preparação é um ficheiro TSV (valores separados por tabulações) com um cabeçalho. O ficheiro tem de ter as colunas query-id, corpus-id e score. O elemento query-id é uma string que corresponde à chave _id do ficheiro de consulta e o elemento corpus-id é uma string que corresponde ao elemento _id no ficheiro de corpus.

Por exemplo:

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

O ficheiro de etiquetas de preparação tem de incluir, pelo menos, 100 IDs de consultas únicos. O número de IDs de consultas no ficheiro de etiquetas de preparação, combinado com o número de consultas no ficheiro de etiquetas de teste, tem de ser inferior a 500 000.

Etiquetas de teste

Tal como o ficheiro de etiquetas de preparação, este ficheiro opcional contém os IDs da consulta e do segmento extrativo, bem como as classificações de relevância. Contém menos consultas e consultas diferentes do que no ficheiro de etiquetas de preparação. Se estiverem presentes, os pares de consultas e segmentos extrativos no ficheiro são usados para avaliar o ajuste. Se o ficheiro de etiquetas de teste não estiver presente, são usados pares de segmentos de consulta e extrativos do ficheiro de etiquetas de preparação para avaliação.

Este ficheiro tem o mesmo formato que o ficheiro de etiquetas de preparação.

Por exemplo:

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

Embora o ficheiro de etiquetas de teste seja opcional, se o fornecer, tem de conter, pelo menos, três IDs de consultas únicos.

Antes de começar

Ative as funcionalidades da edição Enterprise para a app.

Para otimizar um modelo de pesquisa com os seus próprios dados de preparação, siga estes passos.

Consola

Para usar a Google Cloud consola para otimizar um modelo, siga estes passos:

  1. Prepare os dados de preparação e, opcionalmente, os ficheiros de dados de teste. Use os formatos descritos em Ficheiros de preparação.

  2. Carregue os ficheiros para o Cloud Storage.

  3. Na Google Cloud consola, aceda à página Aplicações de IA.

    Aplicações de IA

  4. Na página Apps, clique no nome da app para a qual quer um modelo com formação.

  5. No menu de navegação, clique em Configurações.

  6. Clique no separador Ajuste.

  7. Clique em Ajustar o modelo base.

  8. Especifique os ficheiros de corpus, consulta, preparação e, opcionalmente, teste que preparou nos passos 1 e 2 anteriores.

  9. Clique em Iniciar otimização.

  10. Atualize a página para ver o estado na tabela Atividade de otimização recente no separador Otimização.

REST

Para usar o método trainCustomModel para otimizar um repositório de dados, siga estes passos:

  1. Prepare os ficheiros de dados de preparação (e, opcionalmente, os dados de teste). Use os formatos descritos em Ficheiros de preparação.

  2. Coloque os ficheiros num contentor do Cloud Storage.

  3. Carregue os ficheiros do contentor do Cloud Storage para o Vertex AI Search executando o seguinte comando curl:

    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"
    }'
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .

    • DATA_STORE_ID: o ID do armazenamento de dados que quer otimizar.

    • CORPUS_JSONL_GCS_PATH: o caminho do ficheiro JSONL do corpus no Cloud Storage, por exemplo, gs://my-bucket/corpus.jsonl.

    • QUERY_JSONL_GCS_PATH: o caminho do ficheiro JSONL de consulta no Cloud Storage, por exemplo, gs://my-bucket/query.jsonl.

    • TRAIN_TSV_GCS_PATH: o caminho do ficheiro TSV de etiquetas de preparação no Cloud Storage, por exemplo, gs://my-bucket/train.tsv.

    • TEST_TSV_GCS_PATH: um campo opcional para especificar o caminho do Cloud Storage para o seu ficheiro TSV de etiquetas de teste, por exemplo, gs://my-bucket/test.tsv. Se não tiver um ficheiro de etiquetas de teste, remova o campo testDataPath ou deixe-o vazio.

    Para obter informações gerais sobre este método, consulte trainCustomModel.

    A otimização começa automaticamente após o carregamento dos ficheiros de dados.

    Clique para ver um exemplo de comando curl e resposta.

    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. Tome nota do valor name devolvido pelo método trainCustomModel e siga as instruções em Obtenha detalhes acerca de uma operação de longa duração para ver quando a operação de ajuste da pesquisa está concluída.

Python

Para mais informações, consulte a documentação de referência da API Python de aplicações de IA.

Para se autenticar em aplicações de IA, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


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

Teste a pesquisa otimizada e use-a para consultas de pesquisa individuais

Após a otimização, pode testá-la comparando os resultados das consultas com o modelo otimizado e os resultados das mesmas consultas com o modelo base.

Consola

Para usar a Google Cloud consola para pré-visualizar o comportamento de um modelo otimizado, siga estes passos:

  1. Aceda ao separador Ajuste:

    1. Na Google Cloud consola, aceda à página Aplicações de IA.

      Aplicações de IA

    2. Clique no nome da app que quer pré-visualizar.

    3. Clique em Configurações.

    4. Clique no separador Ajuste.

  2. Clique em Modelo otimizado e use o painel de pré-visualização à direita para fazer consultas que usam o modelo otimizado.

  3. Clique em Modelo base e use o painel de pré-visualização à direita para fazer consultas com o modelo original.

  4. Compare a qualidade dos resultados.

REST

Para avaliar o efeito da otimização, pode fazer consultas com o campo enableSearchAdaptor definido como true e, em seguida, false e comparar os resultados. Definir o campo enableSearchAdaptor como true indica que a versão otimizada da pesquisa é usada para essa consulta.

Para fazer consultas de pesquisa que usam o modelo otimizado:

  1. Na chamada do método de consulta, defina o campo enableSearchAdaptor no campo customFineTuningSpec como true.

    Por exemplo:

    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 }
    }'
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app que quer consultar.

Para informações detalhadas sobre as consultas de pesquisa, consulte os artigos Obtenha resultados da pesquisa e o método servingConfigs.search.

Python

Para mais informações, consulte a documentação de referência da API Python de aplicações de IA.

Para se autenticar em aplicações de IA, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

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

Ative a pesquisa otimizada

Depois de testar a pesquisa otimizada e decidir que a quer usar para todas as consultas de pesquisa, pode torná-la o modelo de pesquisa predefinido.

Consola

Para tornar o modelo otimizado o modelo predefinido e aplicá-lo à página de pré-visualização principal, ao widget e às chamadas API, siga estes passos:

  1. Aceda ao separador Ajuste:

    1. Na Google Cloud consola, aceda à página Aplicações de IA.

      Aplicações de IA

    2. Clique no nome da app.

    3. Clique em Configurações.

    4. Clique no separador Ajuste.

  2. Clique em Modelo otimizado.

  3. Clique em Publicar.

REST

Quando define o modelo otimizado como o modelo predefinido, não precisa de especificar o campo customFineTuningSpec na consulta de pesquisa, como no procedimento anterior.

Para usar a versão otimizada da pesquisa por predefinição para todas as consultas de pesquisa, siga estes passos:

  1. Para definir a pesquisa otimizada como o modelo predefinido, execute o seguinte comando 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
    }
    }'
    

    Para obter informações gerais sobre este método, consulte o artigo servingConfigs.patch.

Python

Para mais informações, consulte a documentação de referência da API Python de aplicações de IA.

Para se autenticar em aplicações de IA, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


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

Desative a pesquisa otimizada

Se já não quiser usar a versão otimizada da pesquisa, por exemplo, se considerar que os resultados não são melhores ou são piores do que antes da otimização, pode desativar a pesquisa otimizada.

Consola

Para reverter para a utilização do modelo base como modelo predefinido, siga estes passos:

  1. Aceda ao separador Ajuste:

    1. Na Google Cloud consola, aceda à página Aplicações de IA.

      Aplicações de IA

    2. Clique no nome da app.

    3. Clique em Configurações.

    4. Clique no separador Ajuste.

  2. Clique em Modelo base.

  3. Clique em Publicar.

REST

Para parar de usar o modelo otimizado, execute uma chamada curl semelhante à anterior, mas defina enableSearchAdaptor como false:

  1. Execute o seguinte comando 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
    }
    }'
    

    Para obter informações gerais sobre este método, consulte o artigo servingConfigs.patch.

Python

Para mais informações, consulte a documentação de referência da API Python de aplicações de IA.

Para se autenticar em aplicações de IA, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


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

O que se segue?

  • Para compreender o impacto do ajuste da pesquisa na qualidade da pesquisa, avalie a qualidade da pesquisa. Para mais informações, consulte Avalie a qualidade da pesquisa.