Pesquise com seguimentos

Esta página apresenta a pesquisa com seguimentos para a Pesquisa da Vertex AI e mostra como a implementar através de chamadas API.

Se quiser adicionar a pesquisa com seguimentos ao widget de pesquisa, consulte o artigo Configure os resultados para o widget de pesquisa.

A pesquisa com seguimentos aplica-se a apps de pesquisa com dados não estruturados e Websites.

Acerca da pesquisa com seguimentos

A pesquisa com seguimentos baseia-se em modelos de IA generativa. A pesquisa com seguimentos é diferente da pesquisa normal de dados não estruturados porque a pesquisa com seguimentos tem em conta as consultas anteriores na mesma sessão de pesquisa.

A pesquisa com seguimentos suporta o seguinte:

  • Processamento de consultas de linguagem natural: processa e compreende a entrada de linguagem humana, identifica a intenção por detrás de uma consulta e devolve resultados relevantes.

  • Consciência do contexto: compreende o contexto das interações anteriores e dá respostas sensíveis ao contexto.

  • Multifacetado: permite que os utilizadores façam perguntas de seguimento e recebam respostas relevantes.

Exemplo de pesquisa com seguimentos

Segue-se um exemplo de pesquisa com seguimentos. Suponha que quer saber sobre férias no México:

  • Eu: qual é a melhor altura do ano para passar férias no México?

  • Pesquise com seguimentos: a melhor altura para passar férias no México é durante a estação seca, que decorre de novembro a abril.

  • Eu: qual é a taxa de câmbio?

  • Pesquise com seguimentos: 1 USD é igual a aproximadamente 17,65 pesos mexicanos.

  • Eu: qual é a temperatura média em dezembro?

  • Pesquise com seguimentos: a temperatura média varia entre 21 e 26 °C. A média de Cancún é de ~ 25 °C.

Com a pesquisa normal, a pergunta "Qual é a taxa de câmbio?" não teria resposta porque a pesquisa normal não saberia que queria a taxa de câmbio mexicana. Da mesma forma, uma pesquisa normal não manteria o contexto para lhe dar as temperaturas do México.

Acerca das conversas

Na pesquisa com seguimentos, uma conversa é composta por consultas de texto fornecidas por um utilizador e respostas fornecidas pela Vertex AI Search.

Por vezes, estes pares de consultas e respostas são denominados mensagens. No exemplo anterior, a segunda mensagem é composta por "Qual é a taxa de câmbio?" e "1 USD é igual a aproximadamente 17,65 pesos mexicanos".

As conversas são armazenadas no mesmo armazenamento de dados onde os dados não estruturados são mantidos. No arquivo de dados, uma conversa é representada pelo recurso Conversation. Além de conter as mensagens de consulta e resposta, o recurso de conversa tem:

  • Um nome exclusivo (o ID da conversa).

  • Um estado (em curso ou concluído).

  • Um pseudo ID de utilizador, que é um ID de visitante que acompanha o utilizador. Pode ser atribuído de forma programática.

  • Uma hora de início e uma hora de fim.

Antes de começar

Certifique-se de que cumpre os seguintes pré-requisitos. Os requisitos variam consoante o tipo de app que tem.

Armazene conversas e receba respostas

Pode usar a linha de comandos ou as bibliotecas de cliente para gerar respostas de pesquisa e armazenar a conversa de pesquisa com seguimentos.

REST

Para usar a linha de comandos para criar uma conversa e gerar respostas a partir da entrada do utilizador, siga estes passos:

  1. Especifique o armazenamento de dados onde quer armazenar o histórico de conversas:

    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/conversations" \
    -d '{
      "user_pseudo_id": "USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • USER_PSEUDO_ID: este é um identificador exclusivo para acompanhar um visitante da pesquisa. Por exemplo, pode implementar isto com um cookie HTTP, que identifica de forma exclusiva um visitante num único dispositivo.

    Clique para ver uma resposta de exemplo do comando POST.

    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
  2. Gerar uma resposta de pesquisa e adicioná-la a uma conversa nova ou existente no seu repositório de dados:

    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/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "filter": "FILTER"
    }'
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • CONVERSATION_ID: um ID exclusivo para a conversa, por exemplo, 123456. Para uma conversa de pesquisa com seguimentos, use o mesmo ID de conversa em cada interação.

    • FREE_TEXT: uma string de texto livre que contém a pergunta do utilizador, por exemplo, what is bigquery?

    • FILTER: um campo de texto para filtrar a pesquisa através de uma expressão de filtro. O valor predefinido é uma string vazia. A forma como cria o filtro varia consoante tenha dados do Website ou dados não estruturados com metadados. Para mais informações, consulte o artigo Filtre a pesquisa com seguimentos.

    Clique para ver uma resposta de exemplo do comando POST.

    {
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
    }
    },
    "conversation": {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id",
    "messages": [
      {
        "userInput": {
          "input": "what is bigquery?"
        }
      },
      {
        "reply": {
          "summary": {
            "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
          }
        }
      }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    },
    "searchResults": [
    {
      "id": "c86f19582746b56f71c9bb6929893835",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/c86f19582746b56f71c9bb6929893835",
        "id": "c86f19582746b56f71c9bb6929893835",
        "derivedStructData": {
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/94627ee0249dfdfda25b1b158c717bca.txt",
          "snippets": [
            {
              "snippet_status": "SUCCESS",
              "snippet": "For larger websites, talk to the IT team and/or utilize a big data solution such as Google \u003cb\u003eBigQuery\u003c/b\u003e to extract all URLs. It may also be necessary to ask the ..."
            }
          ],
          "extractive_answers": [
            {
              "content": "Alternatively, load the Server Log Files into Google BigQuery and use the Google BigQuery interface or the 360 Data Studio to analyze the data. To monitor the indexation numbers of the HTTP and the HTTPS version, keep an eye on all submitted XML Sitemaps."
            }
          ]
        }
      }
    },
    {
      "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/774bd7ce2a3509ab4bbd1fc876f39dc2",
        "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "This consists of a collection of virtual tables. A virtual table exists for every queryable object type (content type if you prefer) in the repository. Each row in these virtual tables correspond to an instance of the corresponding object type (or of one of its subtypes)."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/28841ef8590a105e9415f1390648a811.txt"
        }
      }
    },
    {
      "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/3e1d306e49aefd9e23f2d5f7a66e6c76",
        "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "Other logo switches are based on search terms. For instance, if the term "ASCII art" is searched, an ASCII art version of the Google logo will appear next to the search box."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/98008df3eef5d3ee1661c52f23189190.txt"
        }
      }
    },
    {
      "id": "cf94e24aacd47cd2c2f5effcbdeda832",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/cf94e24aacd47cd2c2f5effcbdeda832",
        "id": "cf94e24aacd47cd2c2f5effcbdeda832",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "The company is listed on the NASDAQ stock exchange under the ticker symbols GOOGL and GOOG, and on the Frankfurt Stock Exchange under the ticker symbol GGQ1. These ticker symbols now refer to Alphabet Inc., Google's holding company, since the fourth quarter of 2015."
            }
          ],
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/d80204083ef1096799fa4b7257548b33.txt"
        }
      }
    },
    {
      "id": "05bc6497a4e7e6ca36b2e495b354b764",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/05bc6497a4e7e6ca36b2e495b354b764",
        "id": "05bc6497a4e7e6ca36b2e495b354b764",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "SQL injection countermeasures are designed to utilize secure programming methods. By changing the variables used by the application code, weaknesses in applications can be greatly minimized. This report will detail how to perform a SQL injection and explore the best countermeasures to prevent the attack."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/7cba75d646f5774a21d96801bec68bb3.txt",
          "snippets": [
            {
              "snippet_status": "NO_SNIPPET_AVAILABLE",
              "snippet": "No snippet is available for this page."
            }
          ]
        }
      }
    }
    ]
    }
  3. Repita o passo 2 para cada nova pergunta na conversa.

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 typing import List

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"
# data_store_id = "YOUR_DATA_STORE_ID"
# search_queries = ["YOUR_FIRST_SEARCH_QUERY", "YOUR_SECOND_SEARCH_QUERY"]


def multi_turn_search_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    search_queries: List[str],
) -> List[discoveryengine.ConverseConversationResponse]:
    #  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
    )

    # Initialize Multi-Turn Session
    conversation = client.create_conversation(
        # The full resource name of the data store
        # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}
        parent=client.data_store_path(
            project=project_id, location=location, data_store=data_store_id
        ),
        conversation=discoveryengine.Conversation(),
    )


    for search_query in search_queries:
        # Add new message to session
        request = discoveryengine.ConverseConversationRequest(
            name=conversation.name,
            query=discoveryengine.TextInput(input=search_query),
            serving_config=client.serving_config_path(
                project=project_id,
                location=location,
                data_store=data_store_id,
                serving_config="default_config",
            ),
            # Options for the returned summary
            summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
                # Number of results to include in summary
                summary_result_count=3,
                include_citations=True,
            ),
        )
        response = client.converse_conversation(request)

        print(f"Reply: {response.reply.summary.summary_text}\n")

        for i, result in enumerate(response.search_results, 1):
            result_data = result.document.derived_struct_data
            print(f"[{i}]")
            print(f"Link: {result_data['link']}")
            print(f"First Snippet: {result_data['snippets'][0]['snippet']}")
            print(
                "First Extractive Answer: \n"
                f"\tPage: {result_data['extractive_answers'][0]['pageNumber']}\n"
                f"\tContent: {result_data['extractive_answers'][0]['content']}\n\n"
            )
        print("\n\n")

Filtre a pesquisa com seguimentos

Quando faz uma consulta com a funcionalidade de pesquisa com seguimentos, pode incluir o campo filter para restringir o conjunto de documentos a partir do qual é gerada uma resposta. Cria o filtro com expressões de filtro. As expressões de filtro que usa variam consoante tenha dados de Websites ou dados não estruturados com metadados.

Expressões de filtro para dados de Websites

Se tiver um repositório de dados com dados do Website, pode filtrar a sua pesquisa com uma consulta de acompanhamento através das expressões de filtro em Expressões de filtro com indexação avançada de Websites. Depois de criar a expressão de filtro, use-a para o valor do campo filter no passo 2 de Armazene conversas e receba respostas.

Expressões de filtro para dados não estruturados com metadados

Se tiver um armazenamento de dados com dados não estruturados com metadados, pode filtrar a pesquisa com uma consulta de seguimentos para que devolva documentos com base nos campos de metadados que os documentos contêm. Consulte o artigo Filtre a pesquisa de dados estruturados ou não estruturados para compreender como usar metadados para filtrar a pesquisa comum (sem seguimentos). Pode usar estes mesmos princípios para usar metadados para filtrar a pesquisa com seguimentos. Depois de criar a expressão de filtro, use-a para o valor do campo filter no passo 2 de Armazene conversas e receba respostas.

Configure o resumo

A mensagem de resposta da pesquisa com seguimentos é um resumo gerado devolvido em summaryText. Existem várias formas de configurar o resumo gerado. Estes estão descritos nas secções seguintes:

Obtenha citações com resultados da pesquisa

As citações, quando especificadas, são números colocados em linha num resumo da pesquisa. Estes números indicam de que resultados da pesquisa foram retiradas frases específicas no resumo.

Para receber citações:

  • Siga o procedimento Armazene conversas e receba respostas do chat anterior, exceto no passo 2. Nesse passo, execute este comando que inclui o campo summarySpec que define includeCitations como verdadeiro.

    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/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "include_citations": true }
    }'
    

    Clique para ver parte da resposta de um comando de exemplo.

    {
    "reply": {
    "summary": {
    }
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly [1]. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data [2, 3].",
      "safetyAttributes": {
        "categories": [
          "Finance",
          "Legal"
        ]

Os números das citações estão incluídos no texto do resumo. Os números das citações referem-se aos resultados da pesquisa devolvidos e são indexados a 1. Por exemplo, [1] significa que a frase é atribuída ao primeiro resultado da pesquisa. [2, 3] significa que a frase é atribuída ao segundo e terceiro resultados da pesquisa.

Ignore consultas adversariais

As consultas adversariais incluem comentários negativos ou são concebidas para gerar resultados inseguros que violam as políticas. Pode especificar que não devem ser devolvidos resumos de pesquisa para consultas adversariais. Quando uma consulta adversária é ignorada, a propriedade summaryText contém texto padrão a indicar que não é devolvido nenhum resumo da pesquisa. Os documentos de pesquisa são devolvidos para consultas adversariais, mesmo que os resumos de pesquisa não o sejam.

Para especificar que não devem ser devolvidos resumos de pesquisa para consultas adversariais:

  • Siga o procedimento Armazene conversas e receba respostas do chat anterior, exceto no passo 2. Nesse passo, execute este comando que inclui o campo summarySpec que define ignoreAdversarialQuery como verdadeiro.

    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/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignoreAdversarialQuery": true }
    }'
    

    Clique para ver parte da resposta de uma consulta adversarial.

    "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "ADVERSARIAL_QUERY_IGNORED"
      ]

Ignore consultas que não procuram resumos

As consultas que não procuram resumos devolvem resultados que não são adequados para a geração de resumos. Por exemplo, "porque é que o céu é azul" e "quem é o melhor jogador de futebol do mundo?" são consultas que procuram um resumo, mas "aeroporto de SFO" e "mundial de futebol de 2026" não são. São, muito provavelmente, consultas de navegação. Pode especificar que não devem ser devolvidos resumos de pesquisa para consultas que não procuram resumos. Os documentos de pesquisa são devolvidos para consultas que não procuram resumos, embora os resumos de pesquisa não sejam devolvidos.

Para especificar que não devem ser devolvidos resumos de pesquisa para consultas que não procuram resumos:

  • Siga o procedimento Armazene conversas e receba respostas do chat anterior, exceto no passo 2. Nesse passo, execute este comando que inclui o campo summarySpec que define ignoreNonSummarySeekingQuery como verdadeiro.

    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/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignore_non_summary_seeking_query": true }
    }'
    

    Clique para ver parte da resposta de uma consulta adversarial.

     "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "NON_SUMMARY_SEEKING_QUERY_IGNORED"
      ]

Defina o número de resultados a usar no resumo

Pode especificar o número de resultados a usar na geração do resumo. Por predefinição, se o campo summaryResultCount não estiver definido, todos os resultados devolvidos são usados para gerar o resumo.

Para definir o número de principais resultados a usar para o resumo:

  • Siga o procedimento Armazene conversas e receba respostas de chat anterior, exceto no passo 2. Execute este comando que inclui o campo summarySpec que define summaryResultCount.

    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/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "summary_result_count": NUMBER_OF_RESULTS }
    }'
    

    NUMBER_OF_RESULTS: o número de principais resultados a partir dos quais gerar o resumo da pesquisa. Se o número de resultados devolvidos for inferior a summaryResultCount, o resumo é gerado a partir de todos os resultados. O valor máximo é 5.

Receba resumos personalizados

Pode obter resumos personalizados fornecendo instruções em linguagem natural no campo modelPromptSpec.preamble quando pedir um resumo.

Pode pedir personalizações como a duração e o nível de detalhe, o estilo do resultado (como "simples"), o idioma do resultado, o foco da resposta e o formato (como tabelas, marcadores e XML).

Por exemplo, para a consulta "Quais são as vantagens do BigQuery?", pode introduzir instruções de personalização como nos seguintes exemplos:

  • Instrução de exemplo: "please show the answer format in an ordered list"

    Exemplo de resposta:

    The benefits of BigQuery are:
    
    1. Increased business productivity
    2. IT staff productivity
    3. Reduced infrastructure costs
    4. Loading and exporting data are free
    
  • Instrução de exemplo: give a very detailed answer

    Exemplo de resposta:

    BigQuery is a serverless, highly scalable, and cost-effective cloud data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that takes care of provisioning, scaling, and managing the underlying infrastructure, so you can focus on analyzing your data. BigQuery is also integrated with other Google Cloud services, such as Google Kubernetes Engine, Cloud Data Fusion, and Cloud Dataproc, making it easy to build and deploy data pipelines.
    
    Here are some of the benefits of using BigQuery:
    
    * **Fast and scalable:** BigQuery can process petabytes of data very quickly, and it can scale to handle even the most demanding workloads. * **Cost-effective:** BigQuery is a very cost-effective way to store and analyze data. You only pay for the data that you use, and there are no upfront costs or commitments. * **Secure:** BigQuery is a secure platform that meets the needs of even the most security-conscious organizations. * **Easy to use:** BigQuery is easy to use, even for non-technical users. It has a simple and intuitive user interface, and it supports a variety of data sources. * **Integrated with other Google Cloud services:** BigQuery is integrated with other Google Cloud services, making it easy to build and deploy data pipelines.
    
    If you are looking for a fast, scalable, and cost-effective way to analyze your data, then BigQuery is a great option.
    

Para receber um resumo personalizado:

  • Siga o procedimento Armazene conversas e receba respostas de chat anterior, exceto no passo 2, execute este comando que inclui o campo summarySpec que especifica a instrução de personalização em modelPromptSpec.preamble.

      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/conversations/CONVERSATION_ID:converse" \
      -d '{
        "query": { "input": "FREE_TEXT"},
        "summarySpec": {
          "modelPromptSpec": {
            "preamble": "CUSTOMIZATION_INSTRUCTIONS"
          }
        }
      }'
    
    • CUSTOMIZATION_INSTRUCTIONS: a instrução de personalização, como uma string.

A Pesquisa segura pode ser usada para filtrar conteúdo explícito, não seguro e que viole as políticas das respostas de resumo. Para mais informações sobre a Pesquisa Segura, consulte o artigo Definições de segurança para a Pesquisa do Vertex AI.

Para aplicar a Pesquisa Segura a uma resposta do chat:

  • Siga o procedimento Armazene conversas e receba respostas de chat anterior, exceto no passo 2. Em vez de , especifique safe_search na consulta.

    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/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "safe_search": true
    }'
    

Veja e modifique conversas armazenadas

Pode usar a linha de comandos para obter, eliminar, atualizar e listar conversas armazenadas.

Receba uma conversa da loja de dados

Para obter todos os detalhes sobre uma conversa específica de um arquivo de dados:

  • Execute o seguinte comando curl:

    curl -X GET \
    -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/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID:o ID da loja de dados associada à sua app.

    • CONVERSATION_ID: o ID da conversa

    Clique para ver uma resposta de exemplo do comando GET.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
    "state": "IN_PROGRESS",
    "userPseudoId": "2040473575290303058",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:11:24.046735Z"
    }

Elimine uma conversa do repositório de dados

Por predefinição, as conversas com mais de 60 dias são eliminadas automaticamente. No entanto, se quiser eliminar uma conversa específica, por exemplo, se tiver conteúdo sensível por engano, use esta chamada da API para a eliminar.

Para eliminar uma conversa de um arquivo de dados:

  • Execute o seguinte comando curl:

    curl -X DELETE \
    -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/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • CONVERSATION_ID: o ID da conversa

    A resposta do comando DELETE é a seguinte:

    {}
    

Atualize uma conversa

Existem vários motivos pelos quais pode querer atualizar uma conversa. Por exemplo, para fazer uma das seguintes ações:

  • Marque uma conversa como concluída

  • Unir as mensagens de uma conversa noutra

  • Altere o user_pseudo_id

Para atualizar o state numa conversa:

  • Execute o seguinte comando curl:

    curl -X PATCH \
    -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/conversations/CONVERSATION_ID?updateMask=state" \
    -d '{
      "state": "NEW_STATE"
    }'
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • CONVERSATION_ID: o ID da conversa que quer atualizar

    • NEW_STATE: o novo valor do estado, por exemplo, COMPLETED

    Clique para ver uma resposta de exemplo do comando PATCH.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "COMPLETED",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

Para atualizar o user_pseudo_id numa conversa:

  • Execute o seguinte comando curl:

    curl -X PATCH \
    -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/conversations/CONVERSATION_ID?updateMask=user_pseudo_id" \
    -d '{
      "user_pseudo_id": "NEW_USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • CONVERSATION_ID: o ID da conversa que quer atualizar

    • NEW_USER_PSEUDO_ID: o novo valor para o ID pseudónimo do utilizador

    Clique para ver uma resposta de exemplo do comando PATCH.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

O comando anterior mostra como alterar o user_pseudo_id. No entanto, pode atualizar outros campos na conversa substituindo user_pseudo_id por outros campos no recurso Conversation.

Apresente todas as conversas

Para listar todas as conversas num armazenamento de dados:

  • Execute o seguinte comando curl:

    curl -X GET \
    -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/conversations"
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    Clique para ver uma resposta de exemplo do comando GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    },
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
      "state": "IN_PROGRESS",
      "userPseudoId": "2040473575290303058",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ]
    }
    ]
    }

A resposta contém uma lista de conversas e o ícone next_page_token. Se não for devolvido nenhum next_page_token, não existem mais conversas para listar.

O tamanho da página predefinido é 50.

Liste conversas por filtro

Em vez de listar todas as conversas num repositório de dados, pode querer listar todas as conversas abertas ou todas as conversas associadas a um utilizador específico.

Por exemplo, pode apresentar ao utilizador as pesquisas fechadas com uma opção para reabrir uma delas.

Para isso, liste as conversas que correspondem a um determinado filtro: user_pseudo_id ou state (IN_PROGRESS ou COMPLETED).

Liste conversas de um utilizador

Para listar as conversas associadas a um utilizador ou a um visitante:

  • Execute o seguinte comando curl:

    curl -X GET \
    -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/conversations?filter=user_pseudo_id=USER_PSEUDO_ID"
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • USER_PSEUDO_ID: o ID pseudonimizado do utilizador cujas conversas quer listar.

    A resposta do comando GET tem um aspeto semelhante a este:

    Clique para ver uma resposta de exemplo do comando GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

Liste conversas para um utilizador e um estado

Para listar conversas num estado específico (abertas ou fechadas) e que estão associadas a um utilizador ou visitante:

  • Execute o seguinte comando curl:

    curl -X GET \
    -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/conversations?filter=user_pseudo_id=USER_PSEUDO_ID%20AND%20state=STATE"
    
    • PROJECT_ID: o número ou o ID do projeto Google Cloud

    • DATA_STORE_ID: o ID da loja de dados associada à sua app.

    • USER_PSEUDO_ID: o ID pseudonimizado do utilizador cujas conversas quer listar.

    • STATE: Indica se a conversa está aberta ou fechada (IN_PROGRESS ou COMPLETED)

    A resposta do comando GET tem um aspeto semelhante a este:

    Clique para ver uma resposta de exemplo do comando GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

Para informações gerais sobre a sintaxe de filtragem, consulte o artigo Filtragem AIP-160.

As perguntas relacionadas são uma funcionalidade de pré-visualização com lista de autorizações que pode devolver perguntas relacionadas, além dos resultados da pesquisa.

Por exemplo, quando pergunta "Qual é a melhor altura do ano para tirar férias no México?", além de responder à sua pergunta, a pesquisa sugere outras perguntas que pode fazer, como "Qual é o mês mais barato para tirar férias no México?" e "Quais são os meses turísticos no México?".

Se quiser que a sua app de pesquisa devolva perguntas relacionadas, contacte a equipa da sua Conta Google e diga-lhe para que projetos e apps quer ativar as perguntas relacionadas. Se não estiver a usar a configuração de publicação predefinida, também tem de indicar o nome da configuração de publicação.

Depois de ativar a funcionalidade de perguntas relacionadas, as perguntas são devolvidas como strings no ConverseConversationResponse.

Mais informações

  • Para mais informações sobre os campos summaryResultCount, includeCitations, ignoreAdversarialQuery e ignoreNonSummarySeekingQuery, consulte SummarySpec na documentação da API AI Applications.

  • Para ver mais exemplos de como obter resumos de pesquisa, consulte o artigo Obtenha resumos.