Receba respostas e seguimentos

Esta página apresenta a pesquisa com respostas e seguimentos para a Pesquisa do Vertex AI e mostra como a implementar para apps de pesquisa personalizadas através de chamadas de métodos.

A pesquisa com respostas e seguimentos baseia-se no método de resposta. O método de resposta substitui as funcionalidades de resumo do método search mais antigo e todas as funcionalidades do método converse descontinuado. O método de resposta também tem algumas funcionalidades adicionais importantes, como a capacidade de processar consultas complexas.

Funcionalidades do método de resposta

Seguem-se as principais funcionalidades do método de resposta:

  • A capacidade de gerar respostas a consultas complexas. Por exemplo, o método answer pode dividir consultas compostas, como as seguintes, em várias consultas mais pequenas para devolver melhores resultados que são usados para gerar melhores respostas:

    • "Qual é a receita respetiva do Google Cloud e do Google Ads em 2024?"
    • "Quantos anos após a sua fundação, a Google atingiu 1000 milhões de USD de receita?"
  • A capacidade de combinar a pesquisa e a geração de respostas numa conversa de várias interações chamando o método de resposta em cada interação.

  • A capacidade de sincronizar com o método de pesquisa para reduzir a latência de pesquisa. Pode chamar o método de pesquisa e o método de resposta separadamente e renderizar os resultados da pesquisa e as respostas em diferentes iFrames em momentos diferentes. Isto significa que pode apresentar aos seus utilizadores resultados da pesquisa (os 10 links azuis) em milissegundos. Não precisa de esperar que as respostas sejam geradas antes de poder mostrar os resultados da pesquisa.

As funcionalidades de resposta e seguimentos podem ser divididas em três fases da consulta, pesquisa e resposta:

Quando usar a resposta e quando usar a pesquisa

O Vertex AI Search tem dois métodos que são usados para consultar apps. Têm funcionalidades diferentes, mas sobrepostas.

Use o método answer quando:

  • Quer uma resposta (ou um resumo) gerada pela IA dos resultados da pesquisa.

  • Quer pesquisas com várias interações, ou seja, pesquisas que mantêm o contexto para permitir perguntas de seguimento.

Use o método search nos seguintes casos:

  • Só precisa de resultados da pesquisa e não de uma resposta gerada.

  • Tem qualquer um dos seguintes elementos:

    • Dados de comunicação social ou de cuidados de saúde
    • As suas próprias incorporações
    • Sinónimos ou controlos de redirecionamento
    • Atributos
    • Códigos dos países dos utilizadores
  • Tem de procurar os dados no seu repositório de dados genérico.

Use os métodos de resposta e pesquisa em conjunto quando:

  • Quer devolver mais de dez resultados da pesquisa e quer uma resposta gerada.

  • Tem problemas de latência e quer devolver e apresentar rapidamente os resultados da pesquisa antes de a resposta gerada ser devolvida.

Funcionalidades da fase de consulta

A funcionalidade de respostas e seguimentos suporta o processamento de consultas de linguagem natural.

Esta secção descreve e ilustra as várias opções de reformulação e classificação de consultas.

Reformulação de consultas

A reformulação de consultas está ativada por predefinição. Esta funcionalidade escolhe automaticamente a melhor forma de reformular as consultas para melhorar os resultados da pesquisa. Esta funcionalidade também pode processar consultas que não requerem reformulação.

  • Divida consultas complexas em várias consultas e execute subconsultas síncronas.

    Por exemplo: uma consulta complexa é dividida em quatro consultas mais pequenas e simples.

    Introdução do utilizador Subconsultas criadas a partir da consulta complexa
    Que empregos e hobbies têm Andie Ram e Arnaud Clément em comum?
    • Andie Ram occupation
    • Ocupação de Arnaud Clément
    • Andie Ram hobby
    • Passatempo de Arnaud Clément
  • Sintetizar consultas de várias interações para tornar as perguntas de seguimento sensíveis ao contexto e com estado.

    Por exemplo, as consultas sintetizadas a partir da introdução do utilizador em cada interação podem ter o seguinte aspeto:

    Introdução do utilizador Consulta sintetizada
    Turn 1: laptops for school portáteis para a escola
    Turn 2: not mac portáteis para a escola que não sejam Mac
    Turn 3: bigger screen and i also need wireless keyboard and mouse portáteis com ecrã maior para a escola, que não sejam Macs, com teclado e rato sem fios
    Turn 4: and a backpack for it portáteis com ecrã maior para a escola, que não sejam Macs, com teclado e rato sem fios, e uma mochila para o portátil
  • Simplificar consultas longas para melhorar a obtenção (requer a opção Respostas generativas).

    Por exemplo: uma consulta longa é encurtada para uma consulta típica.

    Introdução do utilizador Consulta simplificada
    Estou a tentar descobrir por que motivo o botão "Adicionar ao carrinho" no nosso Website não está a funcionar corretamente. Parece que, quando um utilizador clica no botão, o artigo não é adicionado ao carrinho e recebe uma mensagem de erro. Verifiquei o código e parece estar correto, por isso, não tenho a certeza de qual poderá ser o problema. Pode ajudar-me a resolver este problema? O botão "Adicionar ao carrinho" não está a funcionar no Website.
  • Realizar raciocínio em vários passos

    O raciocínio em vários passos baseia-se no paradigma ReAct (reason + act), que permite aos LLMs resolver tarefas complexas usando o raciocínio em linguagem natural. Por predefinição, o número máximo de passos é cinco.

    Por exemplo:

    Introdução do utilizador Dois passos para gerar a resposta
    Quantos anos após a sua fundação é que a Google atingiu uma receita de 1000 milhões de USD? Passo 1:
    [Thought]: I need to know when Google was founded, then I can query it is revenue since then.
    [Act] Search: When was Google founded?[Observe Search Results]: "1998"

    Passo 2:
    [Thought]: Now I need to Google's yearly revenue since 1998, and find out when it exceeded 1 billion for the first time.
    [Act] Pesquisar: receita da Google desde 1998
    [Observe Search Results] Receita da Google em 1998, receita da Google em 1999…
    [Resposta]: A Google alcançou uma receita de mais de 1000 milhões de USD em 2003 [1], 5 anos após a sua fundação em 1998 [2].

    O raciocínio em vários passos requer que a opção Respostas generativas esteja ativada.

Classificação de consultas

As opções de classificação de consultas destinam-se a identificar consultas adversariais e consultas que não procuram respostas. Por predefinição, as opções de classificação de consultas estão desativadas.

Para mais informações sobre consultas adversariais e que não procuram respostas, consulte os artigos Ignorar consultas adversariais e Ignorar consultas que não procuram resumos.

Funcionalidades da fase de pesquisa

Para a pesquisa, o método de resposta tem as mesmas opções que o método de pesquisa. Por exemplo:

Funcionalidades da fase de resposta

Durante a fase de resposta, quando as respostas são geradas a partir dos resultados da pesquisa, pode ativar as mesmas funcionalidades que no método de pesquisa. Por exemplo:

Funcionalidades adicionais da fase de resposta que não estão disponíveis no método de pesquisa:

  • Obter uma pontuação de apoio para cada afirmação (frase na resposta gerada). Uma pontuação de apoio é um valor de ponto flutuante no intervalo [0,1] que indica o quão fundamentada está a reivindicação nos dados na base de dados. Para mais informações, consulte o artigo Devolva classificações de apoio técnico de fundamentação.

  • Obter uma pontuação de apoio técnico agregada para a resposta. A pontuação de apoio técnico indica o quão bem a resposta se baseia nos dados do repositório de dados. Para mais informações, consulte a secção Devolver pontuações de apoio à fundamentação.

  • Devolver apenas respostas bem fundamentadas. Pode optar por devolver apenas as respostas que atingem um determinado limite de pontuação de apoio técnico. Para mais informações, consulte o artigo Mostre apenas respostas bem fundamentadas.

  • Opte por devolver perguntas relacionadas. As perguntas relacionadas são sugestões que os seus utilizadores podem escolher em vez de introduzirem as suas próprias perguntas.

  • Adicionar informações de personalização às consultas para que as respostas possam ser personalizadas para utilizadores individuais. Para mais informações, consulte o artigo Personalize as respostas.

Para receber respostas multimodais que incluem gráficos ou imagens, além de texto, tem as seguintes opções disponíveis:

  • Receber respostas que incluem tabelas e gráficos que representam os dados contidos nas respostas. Para mais informações, consulte o artigo Gere gráficos para respostas.

  • A obter imagens do repositório de dados. Se o repositório de dados contiver imagens, o método de resposta pode devolver uma imagem na resposta. As imagens do armazenamento de dados também podem ser devolvidas em referências se forem pedidas citações. Para mais informações, consulte o artigo Recupere imagens existentes do arquivo de dados.

Antes de começar

Consoante o tipo de app que tiver, cumpra os seguintes requisitos:

  • Se tiver uma app de pesquisa estruturada, não estruturada ou de Website, ative as seguintes opções:

    • Funcionalidades da edição Enterprise: isto dá-lhe acesso às funcionalidades de respostas generativas essenciais. Isto inclui todas as funcionalidades de geração de respostas, exceto as funcionalidades avançadas de respostas generativas, como perguntas relacionadas, simplificação de consultas, consultas de várias interações e respostas multimodais que devolvem imagens e gráficos.
    • Respostas generativas: isto dá-lhe acesso às funcionalidades avançadas de respostas generativas que requerem raciocínio de vários passos, simplificação de consultas, consultas multifacetadas, perguntas relacionadas e respostas multimodais que devolvem imagens e gráficos.
  • Além disso, se tiver um arquivo de dados de pesquisa no Website, ative a opção Indexação avançada de Websites.

Pesquisar e responder (básico)

O comando seguinte mostra como chamar o método answer e devolver uma resposta gerada e uma lista de resultados da pesquisa, com links para as fontes.

Este comando mostra apenas a entrada necessária. As opções são mantidas como predefinições.

REST

Para pesquisar e receber resultados com uma resposta gerada, faça o seguinte:

  1. Execute 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"}
          }'
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app Vertex AI Search que quer consultar.
    • QUERY: uma string de texto livre que contém a pergunta ou a consulta de pesquisa. Por exemplo, "Comparar as bases de dados do BigQuery e do Spanner?".

Python

Para mais informações, consulte a documentação de referência da API PythonVertex AI Search.

Para se autenticar no Vertex AI Search, 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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Comandos da fase de consulta

Esta secção mostra como especificar opções para a fase de consulta da chamada do método answer.

Pesquise e responda (reformulação desativada)

O comando seguinte mostra como chamar o método answer e devolver uma resposta gerada e uma lista de resultados da pesquisa. A resposta pode ser diferente da resposta anterior porque a opção de reformulação está desativada.

REST

Para pesquisar e receber resultados com uma resposta gerada sem aplicar a reformulação da consulta, faça o seguinte:

  1. Execute 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
               "queryRephraserSpec": {
                  "disable": true
            }
        }
          }'
    
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app Vertex AI Search.
    • QUERY: uma string de texto livre que contém a pergunta ou a consulta de pesquisa. Por exemplo, "Comparar as bases de dados do BigQuery e do Spanner?".

Python

Para mais informações, consulte a documentação de referência da API PythonVertex AI Search.

Para se autenticar no Vertex AI Search, 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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Pesquisar e responder (especificar o número máximo de passos)

O comando seguinte mostra como chamar o método answer e devolver uma resposta gerada e uma lista de resultados da pesquisa. A resposta é diferente das respostas anteriores porque o número de passos de reformulação foi aumentado.

REST

Para pesquisar e obter resultados com uma resposta gerada que permite até cinco passos de reformulação, faça o seguinte:

  1. Execute 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryRephraserSpec": {
                    "maxRephraseSteps": MAX_REPHRASE
                 }
             }
          }'
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app Vertex AI Search que quer consultar.
    • QUERY: uma string de texto livre que contém a pergunta ou a consulta de pesquisa. Por exemplo, "Comparar as bases de dados do BigQuery e do Spanner?".
    • MAX_REPHRASE: o número máximo de passos de reformulação. O valor máximo permitido é 5. Se não for definido ou se for definido para um valor inferior a 1, o valor é o predefinido, 1.

Python

Para mais informações, consulte a documentação de referência da API PythonVertex AI Search.

Para se autenticar no Vertex AI Search, 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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Pesquise e responda com a classificação de consultas

O comando seguinte mostra como chamar o método answer para saber se uma consulta é adversária, não procura respostas ou nenhuma das opções.

A resposta inclui o tipo de classificação da consulta, mas a resposta em si não é afetada pela classificação. Se quiser alterar o comportamento da resposta de acordo com o tipo de consulta, pode fazê-lo na fase de resposta. Consulte Ignorar consultas adversariais e Ignorar consultas que não procuram resumos.

REST

Para determinar se uma consulta é adversária ou não procura respostas, faça o seguinte:

  1. Execute 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryClassificationSpec": {
                    "types": ["QUERY_CLASSIFICATION_TYPE"]
                 }
             }
          }'
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app Vertex AI Search que quer consultar.
    • QUERY: uma string de texto livre que contém a pergunta ou a consulta de pesquisa. Por exemplo, "olá".
    • QUERY_CLASSIFICATION_TYPE: os tipos de consultas que quer identificar: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY ou ambos.

Python

Para mais informações, consulte a documentação de referência da API PythonVertex AI Search.

Para se autenticar no Vertex AI Search, 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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Comandos da fase de pesquisa: pesquisar e responder com opções de resultados da pesquisa

Esta secção mostra como especificar opções para a parte da fase de pesquisa da chamada do método answer, opções como definir o número máximo de documentos devolvidos, o aumento e a filtragem, e como obter uma resposta quando fornece os seus próprios resultados da pesquisa.

O comando seguinte mostra como chamar o método answer e especificar várias opções sobre como o resultado da pesquisa é devolvido. (Os resultados da pesquisa são independentes da resposta.)

REST

Para definir várias opções relacionadas com os resultados da pesquisa e a forma como são devolvidos, faça o seguinte:

  1. Execute 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
              "searchSpec": {
              "searchParams": {
                "maxReturnResults":