Buscar con seguimiento

En esta página se presenta la búsqueda con seguimiento de Vertex AI Search y se muestra cómo implementarla mediante llamadas a la API.

Si quieres añadir la función de búsqueda con seguimiento al widget de búsqueda, consulta el artículo Configurar los resultados del widget de búsqueda.

La búsqueda con seguimiento se aplica a las aplicaciones de búsqueda con datos sin estructurar y sitios web.

Acerca de la búsqueda con seguimiento

La búsqueda con seguimiento se basa en modelos de IA generativa. La búsqueda con seguimiento es diferente de la búsqueda de datos no estructurados normal porque tiene en cuenta las consultas anteriores de la misma sesión de búsqueda.

La búsqueda con seguimiento admite lo siguiente:

  • Procesamiento de consultas en lenguaje natural: procesa y comprende las entradas en lenguaje humano, identifica la intención que hay detrás de una consulta y devuelve resultados relevantes.

  • Conciencia del contexto: entiende el contexto de las interacciones anteriores y proporciona respuestas contextuales.

  • Multiturno: permite a los usuarios hacer más preguntas y recibir respuestas relevantes.

Ejemplo de búsqueda con seguimiento

A continuación, se muestra un ejemplo de búsqueda con seguimiento. Supongamos que quieres saber información sobre unas vacaciones en México:

  • Tú: ¿Cuál es la mejor época del año para ir de vacaciones a México?

  • Búsqueda con seguimiento: la mejor época para ir de vacaciones a México es durante la temporada seca, que va de noviembre a abril.

  • Tú: ¿Cuál es el tipo de cambio?

  • Búsqueda con seguimiento: 1 USD equivale a unos 17,65 pesos mexicanos.

  • Tú: ¿Cuál es la temperatura media en diciembre?

  • Buscar con seguimiento: la temperatura media varía entre 21 y 26 °C. La media de Cancún es de unos 25 °C.

Con la búsqueda normal, no se podría responder a la pregunta "¿Cuál es el tipo de cambio?" porque no sabría que quieres saber el tipo de cambio mexicano. Del mismo modo, una búsqueda normal no mantendría el contexto para darte las temperaturas de México.

Acerca de las conversaciones

En la búsqueda con seguimiento, una conversación se compone de consultas de texto proporcionadas por un usuario y respuestas proporcionadas por Vertex AI Search.

Estos pares de consultas y respuestas a veces se denominan mensajes. En el ejemplo anterior, el segundo mensaje se compone de "¿Cuál es el tipo de cambio?" y "1 USD equivale a aproximadamente 17,65 pesos mexicanos".

Las conversaciones se almacenan en el mismo almacén de datos en el que se guardan los datos no estructurados. En el almacén de datos, una conversación se representa mediante el recurso Conversation. Además de contener los mensajes de consulta y respuesta, el recurso de conversación tiene lo siguiente:

  • Un nombre único (el ID de conversación).

  • Un estado (en curso o completado).

  • Un ID pseudo de usuario, que es un ID de visitante que monitoriza al usuario. Se puede asignar mediante programación.

  • Una hora de inicio y una hora de finalización.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos. Los requisitos varían en función del tipo de aplicación que tengas.

Almacenar conversaciones y obtener respuestas

Puedes usar la línea de comandos o las bibliotecas de cliente para generar respuestas de búsqueda y almacenar la conversación de búsqueda con seguimiento.

REST

Para usar la línea de comandos para crear una conversación y generar respuestas a partir de la entrada del usuario, sigue estos pasos:

  1. Especifica el almacén de datos en el que quieras guardar el historial de conversaciones:

    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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • USER_PSEUDO_ID: es un identificador único para hacer un seguimiento de un visitante de búsqueda. Por ejemplo, puedes implementar esta función con una cookie HTTP, que identifica de forma única a un visitante en un solo dispositivo.

    Haz clic para ver un ejemplo de respuesta del 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. Genera una respuesta de búsqueda y añádela a una conversación nueva o a una que ya tengas en tu almacén de datos:

    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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • CONVERSATION_ID: ID único de la conversación. Por ejemplo, 123456. En una conversación de búsqueda con seguimiento, utiliza el mismo ID de conversación en cada turno.

    • FREE_TEXT: cadena de texto libre que contiene la pregunta del usuario. Por ejemplo, what is bigquery?

    • FILTER: campo de texto para filtrar la búsqueda mediante una expresión de filtro. El valor predeterminado es una cadena vacía. La forma de crear el filtro varía en función de si tiene datos de sitios web o datos no estructurados con metadatos. Para obtener más información, consulta Filtrar búsquedas con seguimiento.

    Haz clic para ver un ejemplo de respuesta del 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. Repite el paso 2 con cada pregunta nueva de la conversación.

Python

Para obtener más información, consulta la documentación de referencia de la API AI Applications Python.

Para autenticarte en las aplicaciones de IA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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")

Filtrar búsquedas con seguimiento

Cuando hagas una consulta con la función de búsqueda con seguimiento, puedes incluir el campo filter para restringir el conjunto de documentos de los que se obtiene una respuesta. Puedes crear el filtro con expresiones de filtro. Las expresiones de filtro que utilice variarán en función de si tiene datos de sitios web o datos no estructurados con metadatos.

Expresiones de filtro de datos de sitios web

Si tiene un almacén de datos con datos de sitios web, puede filtrar su búsqueda con una consulta de seguimiento mediante las expresiones de filtro de Expresiones de filtro con indexación avanzada de sitios web. Después de crear la expresión de filtro, úsala como valor del campo filter en el paso 2 de Almacenar conversaciones y obtener respuestas.

Expresiones de filtro para datos sin estructurar con metadatos

Si tienes un almacén de datos con datos sin estructurar y metadatos, puedes filtrar tu búsqueda con una consulta de seguimiento para que devuelva documentos en función de los campos de metadatos que contengan. Consulta Filtrar búsquedas de datos estructurados o sin estructurar para saber cómo usar los metadatos y filtrar búsquedas ordinarias (sin seguimiento). Puedes usar estos mismos principios para usar metadatos y filtrar búsquedas con recordatorios. Una vez que hayas creado la expresión de filtro, úsala como valor del campo filter en el paso 2 de Almacenar conversaciones y obtener respuestas.

Configurar el resumen

El mensaje de respuesta de la búsqueda con seguimiento es un resumen generado que se devuelve en summaryText. Hay varias formas de configurar el resumen generado. Se describen en las siguientes secciones:

Obtener citas con los resultados de búsqueda

Las citas, cuando se especifican, son números que se colocan en línea en un resumen de búsqueda. Estos números indican de qué resultados de búsqueda se han extraído frases concretas del resumen.

Para obtener citas:

  • Sigue el procedimiento Almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2. En ese paso, ejecuta este comando que incluye el campo summarySpec, que asigna el valor true a includeCitations.

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

    Haz clic para ver parte de la respuesta de un comando de ejemplo.

    {
    "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"
        ]

Los números de cita se incluyen en el texto de resumen. Los números de cita hacen referencia a los resultados de búsqueda devueltos y están indexados a partir del 1. Por ejemplo, [1] significa que la frase se atribuye al primer resultado de búsqueda. [2, 3] significa que la frase se atribuye tanto al segundo como al tercer resultado de búsqueda.

Ignorar consultas adversarias

Las consultas adversarias incluyen comentarios negativos o están diseñadas para generar resultados no seguros que infringen las políticas. Puede especificar que no se devuelvan resúmenes de búsqueda para consultas engañosas. Cuando se ignora una consulta adversarial, la propiedad summaryText contiene texto predefinido que indica que no se devuelve ningún resumen de búsqueda. Los documentos de búsqueda se devuelven para consultas adversarias, aunque los resúmenes de búsqueda no.

Para especificar que no se devuelvan resúmenes de búsqueda en consultas adversarias, sigue estos pasos:

  • Sigue el procedimiento Almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2. En ese paso, ejecuta este comando que incluye el campo summarySpec, que asigna el valor true a ignoreAdversarialQuery.

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

    Haz clic para ver parte de la respuesta de una consulta adversarial.

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

Ignorar las consultas que no buscan resúmenes

Las consultas que no buscan resúmenes devuelven resultados que no son adecuados para resumir. Por ejemplo, "¿Por qué el cielo es azul?" y "¿Quién es el mejor futbolista del mundo?" son consultas que buscan un resumen, pero "Aeropuerto de San Francisco" y "Mundial 2026" no lo son. Lo más probable es que se trate de consultas de navegación. Puedes especificar que no se devuelvan resúmenes de búsqueda para las consultas que no busquen resúmenes. Los documentos de búsqueda se devuelven en consultas que no buscan resúmenes, aunque los resúmenes de búsqueda no se devuelvan.

Para especificar que no se devuelvan resúmenes de búsqueda en consultas que no busquen resúmenes, sigue estos pasos:

  • Sigue el procedimiento Almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2. En ese paso, ejecuta este comando que incluye el campo summarySpec, que asigna el valor true a ignoreNonSummarySeekingQuery.

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

    Haz clic para ver parte de la respuesta de una 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"
      ]

Define el número de resultados que se usarán en el resumen.

Puedes especificar el número de resultados que se usarán para generar el resumen. De forma predeterminada, si no se define el campo summaryResultCount, se utilizan todos los resultados devueltos para generar el resumen.

Para definir el número de resultados principales que se usarán en el resumen, sigue estos pasos:

  • Sigue el procedimiento Almacenar conversaciones y obtener respuestas de chat anterior, pero, en el paso 2, ejecuta este comando que incluye el 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: número de resultados principales a partir de los que se generará el resumen de búsqueda. Si el número de resultados devueltos es inferior a summaryResultCount, el resumen se genera a partir de todos los resultados. El valor máximo es 5.

Obtener resúmenes personalizados

Puedes obtener resúmenes personalizados proporcionando instrucciones en lenguaje natural en el campo modelPromptSpec.preamble al solicitar un resumen.

Puedes solicitar personalizaciones como la longitud y el nivel de detalle, el estilo de la salida (por ejemplo, "simple"), el idioma de la salida, el enfoque de la respuesta y el formato (por ejemplo, tablas, viñetas y XML).

Por ejemplo, para la consulta "¿Cuáles son las ventajas de BigQuery?", puedes introducir instrucciones de personalización como las siguientes:

  • Ejemplo de instrucción: "please show the answer format in an ordered list"

    Respuesta de ejemplo:

    The benefits of BigQuery are:
    
    1. Increased business productivity
    2. IT staff productivity
    3. Reduced infrastructure costs
    4. Loading and exporting data are free
    
  • Ejemplo de instrucción: give a very detailed answer

    Respuesta de ejemplo:

    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 obtener un resumen personalizado, sigue estos pasos:

  • Sigue el procedimiento Almacenar conversaciones y obtener respuestas de chat, pero en el paso 2, ejecuta este comando que incluye el campo summarySpec, que especifica la instrucción de personalización en 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: instrucciones de personalización, como una cadena.

Búsqueda Segura se puede usar para filtrar el contenido explícito, no seguro o que infringe las políticas de las respuestas de resumen. Para obtener más información sobre Búsqueda segura, consulta Configuración de seguridad de Vertex AI Search.

Para aplicar la búsqueda segura a una respuesta del chat:

  • Sigue el procedimiento Almacenar conversaciones y obtener respuestas de chat anterior, excepto en el paso 2. En la consulta, especifica safe_search.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "safe_search": true
    }'
    

Ver y modificar conversaciones almacenadas

Puedes usar la línea de comandos para obtener, eliminar, actualizar y mostrar las conversaciones almacenadas.

Obtener una conversación del almacén de datos

Para obtener todos los detalles de una conversación específica de un almacén de datos, sigue estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID:ID del almacén de datos asociado a tu aplicación.

    • CONVERSATION_ID: el ID de la conversación.

    Haz clic para ver un ejemplo de respuesta del 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"
    }

Eliminar una conversación del almacén de datos

De forma predeterminada, las conversaciones de hace más de 60 días se eliminan automáticamente. Sin embargo, si quieres eliminar una conversación concreta (por ejemplo, si contiene contenido sensible por error), usa esta llamada a la API para eliminarla.

Para eliminar una conversación de un almacén de datos, sigue estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • CONVERSATION_ID: el ID de la conversación.

    La respuesta al comando DELETE es similar a esta:

    {}
    

Actualizar una conversación

Hay varios motivos por los que puede que quieras actualizar una conversación. Por ejemplo, para hacer una de las siguientes acciones:

  • Marcar una conversación como finalizada

  • Combinar los mensajes de una conversación en otra

  • Cambiar el user_pseudo_id

Para actualizar el state en una conversación, sigue estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • CONVERSATION_ID: el ID de la conversación que quieras actualizar.

    • NEW_STATE: el nuevo valor del estado (por ejemplo,) COMPLETED

    Haz clic para ver un ejemplo de respuesta del 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 actualizar el user_pseudo_id en una conversación, sigue estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • CONVERSATION_ID: el ID de la conversación que quieres actualizar.

    • NEW_USER_PSEUDO_ID: el nuevo valor del ID pseudo.

    Haz clic para ver un ejemplo de respuesta del 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"
    }

El comando anterior muestra cómo cambiar el user_pseudo_id.. Sin embargo, puedes actualizar otros campos de la conversación sustituyendo user_pseudo_id por otros campos del recurso Conversation.

Listar todas las conversaciones

Para enumerar todas las conversaciones de un almacén de datos, sigue estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    Haz clic para ver un ejemplo de respuesta del 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."
            }
          }
        }
      ]
    }
    ]
    }

La respuesta contiene una lista de conversaciones y el elemento next_page_token. Si no se devuelve ningún next_page_token, significa que no hay más conversaciones que mostrar.

El tamaño de página predeterminado es 50.

Mostrar conversaciones por filtro

En lugar de enumerar todas las conversaciones de un almacén de datos, puede que quieras enumerar todas las conversaciones abiertas o todas las conversaciones asociadas a un usuario concreto.

Por ejemplo, puedes mostrar al usuario las búsquedas que ha cerrado y darle la opción de volver a abrir una de ellas.

Para ello, enumera las conversaciones que coincidan con un filtro determinado: user_pseudo_id o state (IN_PROGRESS o COMPLETED).

Lista de conversaciones de un usuario

Para ver una lista de las conversaciones asociadas a un usuario o visitante, siga estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • USER_PSEUDO_ID: el ID pseudo del usuario cuyas conversaciones quieres enumerar.

    La respuesta del comando GET tiene un aspecto similar al siguiente:

    Haz clic para ver un ejemplo de respuesta del 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"
    }
    ]
    }

Lista de conversaciones de un usuario y un estado

Para mostrar las conversaciones que tengan un estado concreto (abiertas o cerradas) y que estén asociadas a un usuario o visitante, sigue estos pasos:

  • Ejecuta el siguiente 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: el número o el ID de tu Google Cloud proyecto

    • DATA_STORE_ID: ID del almacén de datos asociado a tu aplicación.

    • USER_PSEUDO_ID: el ID pseudo del usuario cuyas conversaciones quieres enumerar.

    • STATE: si la conversación está abierta o cerrada (IN_PROGRESS o COMPLETED)

    La respuesta del comando GET tiene un aspecto similar al siguiente:

    Haz clic para ver un ejemplo de respuesta del 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 obtener información general sobre la sintaxis de los filtros, consulta Filtrado de AIP-160.

Preguntas relacionadas es una función de vista previa con lista de permitidos que puede devolver preguntas relacionadas además de resultados de búsqueda.

Por ejemplo, si preguntas "¿Cuál es la mejor época del año para ir de vacaciones a México?", además de responder a tu pregunta, la búsqueda te sugerirá otras preguntas que podrías hacer, como "¿Cuál es el mes más barato para ir de vacaciones a México?" y "¿Cuáles son los meses de temporada alta en México?".

Si quieres que tu aplicación de búsqueda devuelva preguntas relacionadas, ponte en contacto con tu equipo de cuentas de Google e indícales en qué proyectos y aplicaciones quieres habilitar las preguntas relacionadas. Si no usas la configuración de servicio predeterminada, también debes proporcionar el nombre de la configuración de servicio.

Una vez que se habilita la función de preguntas relacionadas, las preguntas se devuelven como cadenas en ConverseConversationResponse.

Más información

  • Para obtener más información sobre los campos summaryResultCount, includeCitations, ignoreAdversarialQuery y ignoreNonSummarySeekingQuery, consulta SummarySpec en la documentación de la API AI Applications.

  • Para ver más ejemplos de cómo obtener resúmenes de búsqueda, consulta Obtener resúmenes.