Receber respostas e acompanhamentos

Esta página apresenta a pesquisa com respostas e acompanhamentos para a pesquisa do agente e mostra como implementar isso em apps de pesquisa personalizados usando chamadas de método.

A pesquisa com resposta e acompanhamentos é baseada no método de resposta. O método answer substitui os recursos de resumo do método search mais antigo e todos os recursos do método converse descontinuado. O método de resposta também tem alguns recursos adicionais importantes, como a capacidade de processar consultas complexas.

Recursos do método de resposta

Confira os principais recursos do método de resposta:

  • A capacidade de gerar respostas para consultas complexas. Por exemplo, o método de resposta pode dividir consultas compostas, como a seguinte, em várias consultas menores para retornar resultados melhores que são usados para gerar respostas melhores:

    • "Qual é a receita do Google Cloud e do Google Ads em 2024?"
    • "Quantos anos depois da fundação, o Google atingiu US$ 1 bilhão de receita?"
  • A capacidade de combinar pesquisa e geração de respostas em uma conversa multiturno chamando o método de resposta em cada rodada.

  • A capacidade de parear com o método de pesquisa para reduzir a latência. Você pode chamar os métodos de pesquisa e resposta separadamente e renderizar os resultados da pesquisa e as respostas em iframes diferentes em momentos diferentes. Isso significa que você pode mostrar aos usuários resultados da pesquisa (os 10 links azuis) em milissegundos. Não é necessário esperar que as respostas sejam geradas para mostrar os resultados da pesquisa.

Os recursos de resposta e acompanhamento podem ser divididos em três fases da consulta, pesquisa e resposta:

Quando usar a resposta e quando usar a pesquisa

O Agent Search tem dois métodos usados para consultar apps. Eles têm recursos diferentes, mas que se sobrepõem.

Use o método answer quando:

  • Você quer uma resposta (ou um resumo) gerada por IA dos resultados da pesquisa.

  • Você quer fazer pesquisas multiturno, ou seja, pesquisas que mantêm o contexto para permitir perguntas complementares.

Use o método search nos seguintes casos:

  • Você só precisa dos resultados da pesquisa, não de uma resposta gerada.

  • Você tem uma das seguintes opções:

    • Dados de mídia ou de saúde
    • Seus próprios embeddings
    • Controles de sinônimos ou redirecionamento
    • Atributos
    • Códigos de países dos usuários
  • É necessário navegar pelos dados no seu repositório de dados genérico.

Use os métodos de resposta e pesquisa juntos quando:

  • Você quer retornar mais de dez resultados da pesquisa e quer uma resposta gerada.

  • Você tem problemas de latência e quer retornar e mostrar resultados da pesquisa rapidamente antes que a resposta gerada seja retornada.

Recursos da fase de consulta

O recurso de respostas e acompanhamentos é compatível com o processamento de consultas em linguagem natural.

Esta seçã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 fica ativada por padrão. Esse recurso escolhe a melhor maneira de reformular consultas automaticamente para melhorar os resultados da pesquisa. Esse recurso também pode processar consultas que não precisam ser reformuladas.

  • Dividir consultas complexas em várias consultas e realizar subconsultas síncronas.

    Por exemplo, uma consulta complexa é dividida em quatro consultas menores e mais simples.

    Entrada do usuário Subconsultas criadas com base na consulta complexa
    Quais empregos e hobbies Andie Ram e Arnaud Clément têm em comum?
    • Ocupação de Andie Ram
    • Ocupação de Arnaud Clément
    • Hobby de Andie Ram
    • Hobby de Arnaud Clément
  • Sintetizar consultas multiturno para fazer perguntas complementares com reconhecimento de contexto e com estado.

    Por exemplo, as consultas sintetizadas da entrada do usuário em cada turno podem ser assim:

    Entrada do usuário Consulta sintetizada
    Turno 1: laptops para escolas laptops para escolas
    Turno 2: not mac laptops para escola que não sejam mac
    Turn 3: bigger screen and i also need wireless keyboard and mouse laptops com tela maior para escola que não sejam mac com teclado e mouse sem fio
    Turn 4: and a backpack for it notebooks com tela maior para escola que não sejam mac com teclado e mouse sem fio e uma mochila para ele
  • Simplifique consultas longas para melhorar a recuperação (requer a opção Respostas generativas).

    Por exemplo, uma consulta longa é abreviada para uma consulta típica.

    Entrada do usuário Consulta simplificada
    Estou tentando descobrir por que o botão "Adicionar ao carrinho" no nosso site não está funcionando corretamente. Parece que, quando um usuário clica no botão, o item não é adicionado ao carrinho e ele recebe uma mensagem de erro. Verifiquei o código e parece estar correto, então não sei qual pode ser o problema. Você pode me ajudar a resolver esse problema? O botão "Adicionar ao carrinho" não está funcionando no site.
  • Fazer raciocínio em várias etapas

    O raciocínio em várias etapas se baseia no paradigma ReAct (raciocínio + ação), que permite que os LLMs resolvam tarefas complexas usando o raciocínio em linguagem natural. Por padrão, o número máximo de etapas é cinco.

    Exemplo:

    Entrada do usuário Duas etapas para gerar a resposta
    Quantos anos após a fundação o Google atingiu US$ 1 bilhão de receita? Etapa 1:
    [Pensamento]: preciso saber quando o Google foi fundado para consultar a receita desde então.
    [Ação] Pesquisa: quando o Google foi fundado?[Observar resultados da pesquisa]: "1998"

    Etapa 2:
    [Pensamento]: agora preciso pesquisar a receita anual do Google desde 1998 e descobrir quando ela ultrapassou US$ 1 bilhão pela primeira vez.
    [Act] Pesquisa: receita do Google desde 1998
    [Observe Search Results] Receita do Google em 1998, receita do Google em 1999…
    [Resposta]: O Google atingiu mais de US$ 1 bilhão de receita em 2003 [1], 5 anos após sua fundação em 1998 [2].

    Para usar o raciocínio em várias etapas, é necessário ativar a opção Respostas geradas.

Classificação de consultas

As opções de classificação de consultas são para identificar consultas adversárias e que não buscam respostas. Por padrão, as opções de classificação de consultas estão desativadas.

Para mais informações sobre consultas adversárias e que não buscam respostas, consulte Ignorar consultas adversárias e Ignorar consultas que não buscam resumos.

Recursos da fase de pesquisa

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

Recursos da fase de resposta

Durante a fase de resposta, quando as respostas são geradas com base nos resultados da pesquisa, você pode ativar os mesmos recursos do método de pesquisa. Exemplo:

Outros recursos da fase de resposta que não estão disponíveis no método de pesquisa são:

  • Receber uma pontuação de suporte para cada declaração (frase na resposta gerada). Uma pontuação de suporte é um valor de ponto flutuante no intervalo [0,1] que indica o quanto a declaração é fundamentada nos dados do repositório de dados. Para mais informações, consulte Retornar pontuações de suporte de embasamento.

  • Receber uma pontuação de suporte agregada para a resposta. A pontuação de suporte indica o quanto a resposta é fundamentada nos dados do repositório de dados. Para mais informações, consulte Retornar pontuações de suporte de embasamento.

  • Retorne apenas respostas bem fundamentadas. Você pode optar por retornar apenas as respostas que atendem a um determinado limite de pontuação de suporte. Para mais informações, consulte Mostrar apenas respostas bem fundamentadas.

  • Escolha retornar perguntas relacionadas. As perguntas relacionadas são sugestões que seus usuários podem escolher em vez de digitar as próprias perguntas.

  • Adicione informações de personalização às consultas para que as respostas possam ser personalizadas para usuários individuais. Para mais informações, consulte Personalizar respostas.

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

  • Receber respostas que incluem gráficos que representam os dados contidos nas respostas. Para mais informações, consulte Gerar gráficos para respostas.

  • Recuperando imagens do repositório de dados. Se o repositório de dados tiver imagens, o método de resposta poderá retornar uma imagem na resposta. As imagens do repositório de dados também podem ser retornadas em referências se citações forem solicitadas. Para mais informações, consulte Recuperar imagens atuais do repositório de dados.

Antes de começar

Dependendo do tipo de app, siga estas instruções:

  • Se você tiver um app de pesquisa de sites estruturados, não estruturados ou de sites, ative as seguintes opções:

    • Recursos da edição Enterprise: você tem acesso aos principais recursos de respostas generativas. Isso inclui todos os recursos de geração de respostas, exceto os recursos avançados de respostas generativas, como perguntas relacionadas, simplificação de consultas, consultas multiturno e respostas multimodais que retornam imagens e gráficos.
    • Respostas generativas: dá acesso aos recursos avançados de respostas generativas que exigem raciocínio em várias etapas, simplificação de consultas, consultas multiturno, perguntas relacionadas e respostas multimodais que retornam imagens e gráficos.
  • Além disso, se você tiver um repositório de dados de pesquisa no site, ative a indexação avançada de sites.

Pesquisar e responder (básico)

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

Esse comando mostra apenas a entrada necessária. As opções são deixadas com os valores padrão.

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:

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

Python

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

Para autenticar no Agent Search, configure o Application Default Credentials. Para mais informações, consulte Configurar 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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 seção mostra como especificar opções para a fase de consulta da chamada de método answer.

Pesquisar e responder (reformulação desativada)

O comando a seguir mostra como chamar o método answer e retornar uma resposta gerada e uma lista de resultados da pesquisa. A resposta pode ser diferente da 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 de 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:

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

Python

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

Para autenticar no Agent Search, configure o Application Default Credentials. Para mais informações, consulte Configurar 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