Búsqueda con seguimientos

En esta página, se presenta la búsqueda con preguntas adicionales para la Búsqueda de Vertex AI y se muestra cómo implementarla con llamadas a la API.

Si deseas agregar búsquedas con preguntas adicionales al widget de búsqueda, consulta Cómo configurar los resultados para el widget de búsqueda.

La búsqueda con preguntas adicionales se aplica a las apps de búsqueda con datos no estructurados y sitios web.

La búsqueda con preguntas adicionales no se aplica a las apps de Vertex AI Agents. Las apps de agentes de Vertex AI usan un agente que puede tener conversaciones sobre el contenido con tus usuarios finales. Para obtener más información sobre los agentes de Vertex AI, consulta Introducción a los agentes de Vertex AI.

Acerca de la búsqueda con seguimientos

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

La búsqueda con seguimientos admite lo siguiente:

  • Procesamiento de consultas de lenguaje natural: Procesa y comprende la entrada de lenguaje humano, identifica la intención detrás de una consulta y muestra resultados relevantes.

  • Conciencia contextual: Comprende el contexto de las interacciones anteriores y proporciona respuestas adaptadas al contexto.

  • Múltiples turnos: Permite que los usuarios hagan preguntas de seguimiento y reciban respuestas relevantes.

Ejemplo de búsqueda con seguimientos

El siguiente es un ejemplo de búsqueda con seguimientos. Supongamos que quieres saber más sobre las vacaciones en México:

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

  • Búsqueda con preguntas adicionales: La mejor época para vacacionar en México es durante la temporada seca, que va de noviembre a abril.

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

  • Búsqueda con seguimientos: 1 USD equivale a aproximadamente 17.65 pesos mexicanos.

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

  • Búsqueda con preguntas adicionales: La temperatura promedio varía de 21 a 26 °C. El promedio de Cancún es de alrededor de 25 °C.

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

Información acerca de las conversaciones

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

A veces, estos pares de consulta y respuesta se denominan mensajes. En el ejemplo anterior, el segundo mensaje está compuesto por "¿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, el recurso de conversación representa una conversación. Además de contener los mensajes de consulta y respuesta, el recurso de conversación tiene lo siguiente:

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

  • Un estado (en curso o completado).

  • Un seudo-ID de usuario, que es un ID de visitante que realiza un seguimiento del usuario. Se puede asignar de forma programática.

  • Una hora de inicio y una de finalización

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos. Los requisitos varían según el tipo de app que tengas.

Almacena conversaciones y obtén respuestas

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

REST

Para usar la línea de comandos y 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 deseas almacenar 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    • USER_PSEUDO_ID: Es un identificador único para hacer un seguimiento de un visitante de búsqueda. Por ejemplo, puedes implementar esto 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 agrégala a una conversación nueva o existente 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    • CONVERSATION_ID: Es un ID único para la conversación, por ejemplo, 123456. Para una conversación de búsqueda con preguntas adicionales, usa el mismo ID de conversación en cada turno.

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

    • FILTER: Es un campo de texto para filtrar la búsqueda con una expresión de filtro. El valor predeterminado es una string vacía. La forma en que construyes tu filtro varía según si tienes datos de sitios web o datos no estructurados con metadatos. Para obtener más información, consulta Cómo filtrar la búsqueda con preguntas adicionales.

    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 para cada pregunta nueva en la conversación.

Python

Para obtener más información, consulta la documentación de referencia de la API de Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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")

Cómo filtrar la búsqueda con seguimientos

Cuando realices una consulta con la búsqueda con preguntas adicionales, puedes incluir el campo filter para restringir el conjunto de documentos a partir del cual se deriva una respuesta. Puedes construir tu filtro con expresiones de filtro. Las expresiones de filtro que usas varían según si tienes datos de sitios web o datos no estructurados con metadatos.

Expresiones de filtro para datos de sitios web

Si tienes un almacén de datos con datos de sitios web, puedes filtrar tu búsqueda con una consulta de seguimiento mediante las expresiones de filtro que se describen en Expresiones de filtro con indexación avanzada de sitios web. Después de construir tu expresión de filtro, úsala para el valor del campo filter en el paso 2 de Cómo almacenar conversaciones y obtener respuestas.

Expresiones de filtro para datos no estructurados con metadatos

Si tienes un almacén de datos con datos no estructurados con metadatos, puedes filtrar tu búsqueda con una consulta de seguimiento para que muestre documentos según los campos de metadatos que contienen. Consulta Cómo filtrar la búsqueda de datos estructurados o no estructurados para comprender cómo usar los metadatos para filtrar la búsqueda ordinaria (sin seguimientos). Puedes usar estos mismos principios para usar metadatos y filtrar la búsqueda con seguimientos. Después de crear tu expresión de filtro, úsala para el valor del campo filter en el paso 2 de Cómo almacenar conversaciones y obtener respuestas.

Configura el resumen

El mensaje de respuesta de la búsqueda con seguimientos es un resumen generado que se muestra en summaryText. Existen varias formas de configurar el resumen generado. Estos se describen en las siguientes secciones:

Cómo obtener citas con los resultados de la búsqueda

Cuando se especifican, las citas son números que se colocan intercalados en un resumen de la búsqueda. Estos números indican de qué resultados de la búsqueda se toman oraciones específicas del resumen.

Para obtener citas, sigue estos pasos:

  • Sigue el procedimiento anterior para almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2, en el que debes ejecutar este comando que incluye el campo summarySpec que establece includeCitations como verdadero.

    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 del resumen. Los números de cita se refieren a los resultados de la búsqueda que se muestran y están indexados en 1. Por ejemplo, [1] significa que la sentence se atribuye al primer resultado de la búsqueda. [2, 3] significa que la oración se atribuye al segundo y tercer resultado de la búsqueda.

Ignora las consultas adversas

Las consultas adversas incluyen comentarios negativos o están diseñadas para generar resultados inseguros que incumplen las políticas. Puedes especificar que no se muestren resúmenes de búsqueda para las consultas adversas. Cuando se ignora una consulta adversaria, la propiedad summaryText contiene texto estándar que indica que no se muestra ningún resumen de búsqueda. Los documentos de búsqueda se muestran para las consultas adversas, aunque los resúmenes de búsqueda no.

Para especificar que no se deben mostrar resúmenes de búsqueda para las consultas adversariales, sigue estos pasos:

  • Sigue el procedimiento anterior para almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2, en el que debes ejecutar este comando que incluye el campo summarySpec que establece ignoreAdversarialQuery como verdadero.

    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 adversa.

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

Ignora las consultas de búsqueda que no son de resumen

Las consultas que no buscan resúmenes muestran resultados que no son adecuados para el resumen. Por ejemplo, "¿Por qué el cielo es azul?" y "¿Quién es el mejor jugador de fútbol del mundo?" son consultas de resumen, pero "Aeropuerto SFO" y "Copa Mundial 2026" no lo son. Es probable que sean consultas de navegación. Puedes especificar que no se deben mostrar resúmenes de búsqueda para las consultas que no buscan resúmenes. Los documentos de búsqueda se muestran para las búsquedas que no buscan resúmenes, aunque los resúmenes de búsqueda no se muestren.

Para especificar que no se deben mostrar resúmenes de búsqueda para las consultas que no buscan resúmenes, haz lo siguiente:

  • Sigue el procedimiento anterior para almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2, en el que debes ejecutar este comando que incluye el campo summarySpec que establece ignoreNonSummarySeekingQuery como verdadero.

    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 adversa.

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

Establece la cantidad de resultados que se usarán en el resumen

Puedes especificar la cantidad de resultados que se usarán para generar el resumen. De forma predeterminada, si no se configura el campo summaryResultCount, se usan todos los resultados que se muestran para generar el resumen.

Para establecer la cantidad de resultados principales que se usarán para el resumen, haz lo siguiente:

  • Sigue el procedimiento anterior para almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2, en el que debes ejecutar este comando que incluye el campo summarySpec que establece 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: Es la cantidad de resultados principales a partir de los cuales se genera el resumen de la búsqueda. Si la cantidad de resultados que se muestran es inferior a summaryResultCount, el resumen se genera a partir de todos los resultados. El valor máximo es 5.

Obtén resúmenes personalizados

Para obtener resúmenes personalizados, proporciona instrucciones en lenguaje natural en el campo modelPromptSpec.preamble cuando solicites un resumen.

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

Por ejemplo, para la consulta "¿Cuáles son los beneficios de BigQuery?", puedes ingresar 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 anterior para almacenar conversaciones y obtener respuestas de chat, excepto 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: Es la instrucción para la personalización, como una cadena.

SafeSearch se puede usar para filtrar el contenido de salida explícito, no seguro y que incumple las políticas de las respuestas de resumen. Para obtener más información sobre SafeSearch, consulta Configuración de seguridad para Vertex AI Search.

Para aplicar la búsqueda segura a una respuesta de chat, haz lo siguiente:

  • Sigue el procedimiento anterior para almacenar conversaciones y obtener respuestas de chat, excepto en el paso 2, en el que debes especificar safe_search en la 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
    }'
    

Ver y modificar las conversaciones almacenadas

Puedes usar la línea de comandos para obtener, borrar, actualizar y enumerar conversaciones almacenadas.

Cómo obtener una conversación del almacén de datos

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

  • Ejecuta el siguiente comando de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID:Es el ID del almacén de datos asociado con tu app.

    • CONVERSATION_ID: Es 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"
    }

Cómo borrar una conversación del almacén de datos

De forma predeterminada, las conversaciones anteriores a 60 días se borran automáticamente. Sin embargo, si quieres borrar una conversación en particular, por ejemplo, si contiene contenido sensible por accidente, usa esta llamada a la API para borrarla.

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

  • Ejecuta el siguiente comando de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    • CONVERSATION_ID: Es el ID de la conversación.

    La respuesta del comando DELETE es la siguiente:

    {}
    

Cómo actualizar una conversación

Existen varios motivos por los que podrías querer actualizar una conversación. Por ejemplo, para hacer una de las siguientes acciones:

  • Cómo marcar una conversación como completada

  • Cómo combinar los mensajes de una conversación en otra

  • Cambia user_pseudo_id.

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

  • Ejecuta el siguiente comando de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

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

    • NEW_STATE: Es el valor nuevo 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 de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    • CONVERSATION_ID: El ID de la conversación que deseas actualizar

    • NEW_USER_PSEUDO_ID: Es el valor nuevo del seudo-ID del usuario.

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

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

Cómo ver todas las conversaciones

Para enumerar todas las conversaciones en un almacén de datos, haz lo siguiente:

  • Ejecuta el siguiente comando de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    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 next_page_token. Si no se muestra ningún next_page_token, significa que no hay más conversaciones para mostrar.

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

Cómo mostrar una lista de conversaciones por filtro

En lugar de enumerar todas las conversaciones de un almacén de datos, te recomendamos que enumeres todas las conversaciones abiertas o todas las conversaciones asociadas con un usuario en particular.

Por ejemplo, puedes presentarle al usuario sus búsquedas cerradas con una opción para volver a abrir una de ellas.

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

Cómo mostrar una lista de conversaciones de un usuario

Para mostrar una lista de las conversaciones asociadas con un usuario o visitante, haz lo siguiente:

  • Ejecuta el siguiente comando de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    • USER_PSEUDO_ID: Es el seudo-ID del usuario cuyas conversaciones quieres enumerar.

    La respuesta del comando GET se ve de la siguiente manera:

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

Cómo mostrar una lista de conversaciones de un usuario y un estado

Para mostrar una lista de conversaciones en un estado determinado (abierto o cerrado) y que están asociadas con un usuario o visitante, haz lo siguiente:

  • Ejecuta el siguiente comando de 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 ID de tu proyecto de Google Cloud

    • DATA_STORE_ID: Es el ID del almacén de datos asociado con tu app.

    • USER_PSEUDO_ID: Es el seudo-ID del usuario cuyas conversaciones quieres enumerar.

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

    La respuesta del comando GET se ve de la siguiente manera:

    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 filtro, consulta Filtrado de AIP-160.

Las preguntas relacionadas son una función de vista previa con una lista de entidades permitidas que puede mostrar preguntas relacionadas además de los resultados de la búsqueda.

Por ejemplo, cuando preguntas “¿Cuál es la mejor época del año para vacacionar en México?”, además de responder tu pregunta, la búsqueda sugiere otras preguntas que podrías hacer, como “¿Cuál es el mes más económico para vacacionar en México?” y “¿Cuáles son los meses turísticos en México?”.

Si quieres que tu app de búsqueda muestre preguntas relacionadas, comunícate con el equipo de tu cuenta de Google y cuéntales para qué proyectos y apps quieres habilitar las preguntas relacionadas. Si no usas la configuración de publicación predeterminada, también debes proporcionar el nombre de la configuración de publicación.

Una vez que se habilita la función de preguntas relacionadas, las preguntas se muestran 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 de Vertex AI Agent Builder.

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