Búsqueda con seguimientos

En esta página, se presenta la búsqueda con seguimientos de Vertex AI Search y verás cómo implementarlo con llamadas a la API.

Si deseas agregar búsquedas con seguimientos 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 Vertex AI Agents 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 seguimientos 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 esta última 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 en lenguaje natural: Procesa y comprende el funcionamiento idioma de entrada, identifica el intent detrás de una consulta y devuelve resultados resultados.

  • Reconocimiento del contexto: Entiende el contexto de las interacciones previas y proporciona respuestas adaptadas al contexto.

  • Varios 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 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úsquedas con seguimientos: USD 1 equivale a pesos mexicanos 17.65.

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

  • Búsqueda con seguimientos: 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, tu pregunta "¿Qué es el tipo de cambio?" no sería respondeble porque la búsqueda normal no sabría que querías la comida mexicana el tipo de cambio. Del mismo modo, una búsqueda regular no mantendría el contexto para proporcionar las temperaturas para México.

Información acerca de las conversaciones

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

A veces, estos pares de consulta y respuesta se denominan mensajes. En la 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 donde los datos no estructurados se conserva. En el almacén de datos, una conversación está representada por el campo Conversation recurso. 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 del usuario, que es un ID de visitante que realiza un seguimiento del usuario. Sí, es posible se asignan 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 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 para crear una conversación y generar respuestas desde el la entrada del usuario, sigue estos pasos:

  1. Especifica el almacén de datos en el que quieres 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 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: Es el número o ID del 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 propiedad del usuario. pregunta, 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 su filtro varía en función de si tiene datos del sitio 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 una respuesta de ejemplo 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 API de Python de Vertex AI Agent Builder documentación de referencia.

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

Filtrar la búsqueda con seguimientos

Cuando realizas una consulta con una búsqueda con seguimientos, puedes incluir el filter para restringir el conjunto de documentos del que 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 construye tu expresión de filtro, úsala para el valor del campo filter en paso 2 de Almacenar conversaciones y obtener respuestas

Filtra expresiones 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 Filtra la búsqueda por datos estructurados datos no estructurados para entender cómo usar los metadatos para filtrar la búsqueda común (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 la configuración . que 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 intercalan en una búsqueda. . Estos números indican de qué resultados de la búsqueda se muestran oraciones específicas del resumen ya están disponibles.

Para obtener citas:

  • Sigue las instrucciones anteriores que se indican en Cómo almacenar conversaciones y obtener chat. de respuesta, excepto en el paso 2, ejecuta 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 obtener una parte de la respuesta de un ejemplo kubectl.

    {
    "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 se refieren a los resultados de la búsqueda que se muestran y están indexados en 1. Por ejemplo, [1] significa que el oración 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.

Ignorar búsquedas adversas

Las consultas de adversarios incluyen comentarios negativos o están diseñadas para generar un resultado no seguro que incumpla las políticas. Puedes especificar que no se incluyan para consultas adversarias. Cuando se ignora una consulta adversaria, el La propiedad summaryText contiene texto estándar que indica que no se realizó ninguna búsqueda un resumen. Los documentos de búsqueda se devuelven incluso para consultas adversarias pero no así los resúmenes de búsqueda.

Para especificar que no se deben mostrar resúmenes de búsqueda para consultas adversarias:

  • Sigue las instrucciones anteriores que se indican en Cómo almacenar conversaciones y obtener chat. de respuesta, excepto en el paso 2, ejecuta 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 búsquedas que no son de resumen devuelven resultados que no son adecuados para resumen. Por ejemplo, "¿por qué el cielo es azul?" y "¿Quién es el mejor de jugadores de todo el mundo?". son búsquedas de resumen, pero "aeropuerto SFO" y “del mundo cup 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.

Especificar que no se deben mostrar resúmenes de búsqueda para las búsquedas que no sean de resumen en la nube:

  • Sigue las instrucciones anteriores que se indican en Cómo almacenar conversaciones y obtener chat. de respuesta, excepto en el paso 2, ejecuta 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 en el resumen, sigue estos pasos:

  • Sigue las instrucciones anteriores que se indican en Cómo almacenar conversaciones y obtener chat. de respuesta, excepto en el paso 2, ejecuta 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 que se generan. resumen de 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

Puedes obtener resúmenes personalizados proporcionando 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 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:

  • Instrucción de ejemplo: "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
    
  • Instrucción de ejemplo: 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 las instrucciones anteriores que se indican en Cómo almacenar conversaciones y obtener chat. respuestas, excepto en el paso 2, ejecuta este que incluya 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.

Se puede usar SafeSearch para filtrar resultados con contenido explícito, no seguro o que incumpla las políticas contenido de las respuestas resumidas. 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 conversaciones almacenadas

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

Obtén 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, 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/CONVERSATION_ID"
    
    • PROJECT_ID: El número o ID de tu proyecto de Google Cloud

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

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

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 incluía contenido sensible, usa esta llamada a la API para borrarlo.

Para borrar 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 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

    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, realiza 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 el user_pseudo_id

Para actualizar el state en una conversación, haz lo siguiente:

  • 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 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_STATE: Es el valor nuevo para el 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, haz lo siguiente:

  • 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 una respuesta de ejemplo 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 user_pseudo_id.. Sin embargo, puedes puede actualizar otros campos de la conversación reemplazando user_pseudo_id con otros campos de la sección recurso.

Mostrar todas las conversaciones

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

  • 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 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 una respuesta de ejemplo 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 predeterminado de la página es 50.

Mostrar 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, enumeras las conversaciones que coinciden con un filtro determinado: user_pseudo_id o state (IN_PROGRESS o COMPLETED).

Muestra 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 deseas enumerar.

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

    Haz clic para ver una respuesta de ejemplo 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 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 deseas 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 filtrado consulta Filtrado de AIP-160.

Las preguntas relacionadas son una vista previa con una función de lista de entidades permitidas que puede devolver 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 entrega predeterminada, debes proporciona también el nombre de la configuración de entrega.

Después de habilitar 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 summaryResultCount, includeCitations, ignoreAdversarialQuery, ignoreNonSummarySeekingQuery campos, consulta SummarySpec en en la documentación de la API de Vertex AI Agent Builder.

  • Para ver otros ejemplos sobre cómo obtener resúmenes de búsqueda, consulta Obtener resúmenes.