Obtener respuestas y seguimientos

En esta página se presenta la búsqueda con respuestas y seguimiento de Vertex AI Search, y se explica cómo implementarla en aplicaciones de búsqueda personalizadas mediante llamadas a métodos.

La búsqueda con respuesta y seguimiento se basa en el método de respuesta. El método de respuesta sustituye a las funciones de resumen del método search anterior y a todas las funciones del método converse obsoleto. El método de respuesta también tiene algunas funciones adicionales importantes, como la capacidad de gestionar consultas complejas.

Características del método de respuesta

Estas son las características principales del método de respuesta:

  • La capacidad de generar respuestas a consultas complejas. Por ejemplo, el método de respuesta puede desglosar consultas compuestas, como la siguiente, en varias consultas más pequeñas para devolver mejores resultados que se usan para ofrecer mejores respuestas:

    • "¿Cuáles son los ingresos respectivos de Google Cloud y Google Ads en el 2024?"
    • "¿Cuántos años después de su fundación, Google alcanzó los 1000 millones de dólares de ingresos?"
  • La capacidad de combinar la búsqueda y la generación de respuestas en una conversación de varias interacciones llamando al método de respuesta en cada interacción.

  • La capacidad de emparejarse con el método de búsqueda para reducir la latencia de búsqueda. Puedes llamar al método de búsqueda y al método de respuesta por separado, y renderizar los resultados de búsqueda y las respuestas en diferentes iframes en momentos distintos. Esto significa que puedes mostrar a tus usuarios resultados de búsqueda (los 10 enlaces azules) en milisegundos. No es necesario que esperes a que se generen las respuestas para mostrar los resultados de búsqueda.

Las funciones de respuesta y seguimiento se pueden dividir en tres fases de la consulta, la búsqueda y la respuesta:

Cuándo usar la respuesta y cuándo la búsqueda

Vertex AI Search tiene dos métodos que se usan para consultar aplicaciones. Tienen funciones diferentes, pero que se solapan.

Usa el método answer cuando:

  • Quieres una respuesta (o un resumen) generada por IA de los resultados de búsqueda.

  • Quieres hacer búsquedas de varios turnos, es decir, búsquedas que mantengan el contexto para poder hacer preguntas de seguimiento.

Usa el método search en los siguientes casos:

  • Solo necesitas resultados de búsqueda, no una respuesta generada.

  • Tienes alguna de las siguientes opciones:

    • Datos de medios o sanitarios
    • Tus propias inserciones
    • Controles de sinónimos o redirecciones
    • Facetas
    • Códigos de país del usuario
  • Debe consultar los datos de su almacén de datos genérico.

Utiliza los métodos de respuesta y búsqueda juntos cuando:

  • Quieres que se devuelvan más de diez resultados de búsqueda y quieres una respuesta generada.

  • Tienes problemas de latencia y quieres devolver y mostrar los resultados de búsqueda rápidamente antes de que se devuelva la respuesta generada.

Funciones de la fase de consulta

La función de respuesta y seguimiento admite el procesamiento de consultas en lenguaje natural.

En esta sección se describen y se ilustran las distintas opciones de reformulación y clasificación de consultas.

Reformulación de consultas

La reformulación de consultas está activada de forma predeterminada. Esta función elige automáticamente la mejor forma de reformular las consultas para mejorar los resultados de búsqueda. Esta función también puede gestionar consultas que no requieren reformulación.

  • Desglosar consultas complejas en varias consultas y realizar subconsultas síncronas.

    Por ejemplo, una consulta compleja se divide en cuatro consultas más pequeñas y sencillas.

    Entrada del usuario Subconsultas creadas a partir de la consulta compleja
    ¿Qué trabajos y aficiones tienen en común Andie Ram y Arnaud Clément?
    • Profesión de Andie Ram
    • Profesión de Arnaud Clément
    • Andie Ram hobby
    • Afición de Arnaud Clément
  • Sintetiza consultas multiturno para que las preguntas posteriores tengan en cuenta el contexto y el estado.

    Por ejemplo, las consultas sintetizadas a partir de las entradas de los usuarios en cada turno podrían ser las siguientes:

    Entrada del usuario Consulta sintetizada
    Turn 1: laptops for school Portátiles para centros educativos
    Turno 2: no es Mac portátiles para el colegio que no sean Mac
    Turno 3: pantalla más grande y también necesito un teclado y un ratón inalámbricos portátiles con pantallas más grandes para el colegio que no sean Mac con teclado y ratón inalámbricos
    Turn 4: and a backpack for it ordenadores portátiles con pantalla más grande para el colegio, que no sean Mac, con teclado y ratón inalámbricos, y una mochila para llevarlo
  • Simplifica las consultas largas para mejorar la recuperación (requiere funciones avanzadas de LLM).

    Por ejemplo, una consulta larga se acorta a una consulta típica.

    Entrada del usuario Consulta simplificada
    Quiero saber por qué el botón \"Añadir al carrito\" de nuestro sitio web no funciona correctamente. Parece que, cuando un usuario hace clic en el botón, el artículo no se añade al carrito y recibe un mensaje de error. He comprobado el código y parece que es correcto, así que no sé cuál puede ser el problema. ¿Puedes ayudarme a solucionar este problema? El botón "Añadir al carrito" no funciona en el sitio web.
  • Realizar razonamientos de varios pasos

    El razonamiento multipaso se basa en el paradigma ReAct (razonar + actuar), que permite a los LLMs resolver tareas complejas mediante el razonamiento en lenguaje natural. De forma predeterminada, el número máximo de pasos es cinco.

    Por ejemplo:

    Entrada del usuario Dos pasos para generar la respuesta
    ¿Cuántos años después de su fundación alcanzó Google los 1000 millones de dólares de ingresos? Paso 1:
    [Pensamiento]: Necesito saber cuándo se fundó Google para poder consultar sus ingresos desde entonces.
    [Act] Search: When was Google founded?[Observe Search Results]: "1998"

    Paso 2:
    [Thought]: Ahora tengo que buscar los ingresos anuales de Google desde 1998 y averiguar cuándo superaron los mil millones por primera vez.
    [Act] Search: Google revenue since 1998
    [Observe Search Results] Google revenue in 1998, Google revenue in 1999…..
    [Respuesta]: Google alcanzó más de 1000 millones de dólares en ingresos en el 2003 [1], 5 años después de su fundación en 1998 [2].

    Para usar el razonamiento multipaso, se necesitan las funciones avanzadas de LLM.

Clasificación de consultas

Las opciones de clasificación de consultas sirven para identificar consultas adversarias y consultas que no buscan respuestas. De forma predeterminada, las opciones de clasificación de consultas están desactivadas.

Para obtener más información sobre las consultas de confrontación y las que no buscan respuestas, consulta Ignorar consultas de confrontación e Ignorar consultas que no buscan resúmenes.

Funciones de la fase de búsqueda

En el caso de las búsquedas, el método de respuesta tiene las mismas opciones que el método de búsqueda. Por ejemplo:

Funciones de la fase de respuesta

Durante la fase de respuesta, cuando se generan respuestas a partir de los resultados de búsqueda, puedes habilitar las mismas funciones que en el método de búsqueda. Por ejemplo:

Estas son las funciones adicionales de la fase de respuesta que no están disponibles en el método de búsqueda:

  • Obtener una puntuación de respaldo para cada afirmación (frase de la respuesta generada). Una puntuación de asistencia es un valor de coma flotante comprendido entre 0 y 1 que indica el grado de fundamentación de la reclamación en los datos del almacén de datos. Para obtener más información, consulta Devolver puntuaciones de asistencia de grounding.

  • Obtener una puntuación de asistencia agregada para la respuesta. La puntuación de asistencia indica el grado de fiabilidad de la respuesta en función de los datos del almacén de datos. Para obtener más información, consulta Devolver puntuaciones de asistencia de grounding.

  • Devuelve solo respuestas bien fundamentadas. Puedes elegir devolver solo las respuestas que cumplan un determinado umbral de puntuación de asistencia. Para obtener más información, consulta Mostrar solo respuestas fundamentadas.

  • Elige si quieres que se devuelvan preguntas relacionadas. Las preguntas relacionadas son sugerencias que tus usuarios pueden elegir en lugar de escribir sus propias preguntas.

  • Añade información de personalización a las consultas para que las respuestas se puedan adaptar a cada usuario. Para obtener más información, consulta Personalizar respuestas.

Para recibir respuestas multimodales que incluyan gráficos o imágenes además de texto, tienes las siguientes opciones:

  • Obtener respuestas que incluyan gráficos que representen los datos contenidos en las respuestas. Para obtener más información, consulta Generar gráficos de respuestas.

  • Recuperando imágenes del almacén de datos. Si el almacén de datos contiene imágenes, el método de respuesta puede devolver una imagen en la respuesta. Las imágenes del almacén de datos también se pueden devolver en referencias si se solicitan citas. Para obtener más información, consulta Recuperar imágenes del almacén de datos.

Antes de empezar

En función del tipo de aplicación que tengas, cumple los siguientes requisitos:

  • Si tienes una aplicación de búsqueda de datos estructurados, no estructurados o de sitios web, activa las siguientes opciones:

    • Funciones de la edición Enterprise: te dan acceso a las funciones de respuestas generativas básicas. Esto incluye todas las funciones de generación de respuestas, excepto las funciones de respuestas generativas avanzadas, como las preguntas relacionadas, la simplificación de consultas, las consultas de varias fases y las respuestas multimodales que devuelven imágenes y gráficos.
    • Funciones avanzadas de LLM: te dan acceso a las funciones avanzadas de respuestas generativas que requieren razonamiento de varios pasos, simplificación de consultas, consultas de varios turnos, preguntas relacionadas y respuestas multimodales que devuelven imágenes y gráficos.
  • Además, si tiene un almacén de datos de búsqueda en el sitio web, active la indexación avanzada de sitios web.

Buscar y responder (básico)

El siguiente comando muestra cómo llamar al método answer y devolver una respuesta generada y una lista de resultados de búsqueda, con enlaces a las fuentes.

Este comando solo muestra la entrada obligatoria. Las opciones se dejan con sus valores predeterminados.

REST

Para buscar y obtener resultados con una respuesta generada, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"}
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?".

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Comandos de la fase de consulta

En esta sección se muestra cómo especificar las opciones de la fase de consulta de la llamada al método answer.

Buscar y responder (reformulación inhabilitada)

El siguiente comando muestra cómo llamar al método answer y devolver una respuesta generada y una lista de resultados de búsqueda. La respuesta puede ser diferente de la anterior porque la opción de reformulación está inhabilitada.

REST

Para buscar y obtener resultados con una respuesta generada sin aplicar la reformulación de la consulta, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
               "queryRephraserSpec": {
                  "disable": true
            }
        }
          }'
    
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?".

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Buscar y responder (especificar el número máximo de pasos)

El siguiente comando muestra cómo llamar al método answer y devolver una respuesta generada y una lista de resultados de búsqueda. La respuesta es diferente de las anteriores porque se ha aumentado el número de pasos de reformulación.

REST

Para buscar y obtener resultados con una respuesta generada que permita hasta cinco pasos de reformulación, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryRephraserSpec": {
                    "maxRephraseSteps": MAX_REPHRASE
                 }
             }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?".
    • MAX_REPHRASE: número máximo de pasos de reformulación. El valor máximo permitido es 5. Si no se define o se define en un valor inferior a 1, se usará el valor predeterminado, 1.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Buscar y responder con clasificación de consultas

El siguiente comando muestra cómo llamar al método answer para consultar si una consulta es adversarial, no busca una respuesta o ninguna de las dos.

La respuesta incluye el tipo de clasificación de la consulta, pero la respuesta en sí no se ve afectada por la clasificación. Si quieres cambiar el comportamiento de la respuesta en función del tipo de consulta, puedes hacerlo en la fase de respuesta. Consulta Ignorar consultas adversarias e Ignorar consultas que no buscan resúmenes.

REST

Para determinar si una consulta es adversarial o no busca una respuesta, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryClassificationSpec": {
                    "types": ["QUERY_CLASSIFICATION_TYPE"]
                 }
             }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda. Por ejemplo, "hola".
    • QUERY_CLASSIFICATION_TYPE: los tipos de consulta que quieras identificar: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY o ambos.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Comandos de la fase de búsqueda: buscar y responder con opciones de resultados de búsqueda

En esta sección se explica cómo especificar opciones para la parte de la fase de búsqueda de la llamada al método answer, como definir el número máximo de documentos devueltos, aumentar y filtrar, y cómo obtener una respuesta cuando proporcione sus propios resultados de búsqueda.

El siguiente comando muestra cómo llamar al método answer y especificar varias opciones sobre cómo se devuelve el resultado de búsqueda. Los resultados de búsqueda son independientes de la respuesta.

REST

Para definir varias opciones relacionadas con qué resultados de búsqueda se devuelven y cómo, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
              "searchSpec": {
              "searchParams": {
                "maxReturnResults": MAX_RETURN_RESULTS,
                "filter": "FILTER",
                "boostSpec": BOOST_SPEC,
                "orderBy": "ORDER_BY",
                "searchResultMode": SEARCH_RESULT_MODE
               }
             }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?"
    • MAX_RETURN_RESULTS: el número de resultados de búsqueda que se devolverán. El valor predeterminado es 10. El valor máximo es 25.
    • FILTER: el filtro especifica qué documentos se consultan. Si los metadatos de un documento cumplen la especificación del filtro, se consultará el documento. Para obtener más información, incluida la sintaxis de los filtros, consulte Filtrar búsquedas personalizadas de datos estructurados o no estructurados.
    • BOOST_SPEC: la especificación de impulso te permite impulsar determinados documentos en los resultados de búsqueda, lo que puede afectar a la respuesta. Para obtener más información, incluida la sintaxis de la especificación de la mejora, consulta el artículo Mejorar los resultados de búsqueda.
    • ORDER_BY: el orden en el que se devuelven los documentos. Los documentos se pueden ordenar por un campo de un objeto Document. La expresión orderBy distingue entre mayúsculas y minúsculas. Si este campo no se reconoce, se devuelve un INVALID_ARGUMENT.
    • SEARCH_RESULT_MODE: especifica el modo de resultados de búsqueda: DOCUMENTS o CHUNKS. Para obtener más información, consulta los artículos Analizar y dividir documentos en fragmentos y ContentSearchSpec. Este campo solo está disponible en la versión v1alpha de la API.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Comandos de la fase de respuesta

En esta sección se muestra cómo personalizar la llamada al método answer. Puedes combinar las siguientes opciones según tus necesidades.

Ignorar las consultas adversarias y las consultas que no buscan respuestas

El siguiente comando muestra cómo evitar responder a consultas adversarias y consultas que no buscan respuestas al llamar al método answer.

REST

Para saltarte las consultas que sean hostiles o que no busquen una respuesta, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreAdversarialQuery": true,
               "ignoreNonAnswerSeekingQuery": true
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Mostrar solo las respuestas pertinentes

Vertex AI Search puede evaluar la relevancia de los resultados para una consulta. Si no se determina que ningún resultado sea lo suficientemente relevante, en lugar de generar una respuesta a partir de resultados no relevantes o mínimamente relevantes, puedes elegir devolver una respuesta alternativa: "We do not have a summary for your query.".

El siguiente comando muestra cómo devolver la respuesta alternativa en caso de que los resultados no sean relevantes al llamar al método answer.

REST

Para devolver una respuesta alternativa si no se encuentran resultados relevantes, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreLowRelevantContent": true
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Devolver puntuaciones de asistencia de referencia

El siguiente comando muestra cómo devolver las puntuaciones de asistencia de las respuestas y las afirmaciones.

Para obtener información general sobre los fundamentos en Vertex AI, consulta Comprobar los fundamentos con RAG. El método groundingConfigs.check se llama mediante el método answer.

REST

Para devolver una puntuación de asistencia para cada afirmación (frase de la respuesta) y una puntuación de asistencia agregada para la respuesta, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "includeGroundingSupports": true,
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.

Mostrar solo respuestas bien fundamentadas

El siguiente comando muestra cómo devolver solo las respuestas que se consideran bien fundamentadas en el corpus, es decir, la información del almacén de datos. Las respuestas poco fundamentadas se filtran.

Elige un umbral de nivel bajo o alto para la puntuación de asistencia de fundamentación. Después, la respuesta solo se devuelve si alcanza o supera ese nivel. Puedes probar los dos umbrales de filtro y la opción de no usar ningún umbral para determinar qué nivel de filtro es más probable que proporcione los mejores resultados a tus usuarios.

Para obtener información general sobre los fundamentos en Vertex AI, consulta Comprobar los fundamentos con RAG. El método groundingConfigs.check se llama mediante el método answer.

REST

Para devolver una respuesta solo si cumple un umbral de puntuación de asistencia, haz lo siguiente:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "filteringLevel": "FILTER_LEVEL"
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • FILTER_LEVEL: una enumeración para filtrar respuestas en función de la puntuación de asistencia de la base. Las opciones son: FILTERING_LEVEL_LOW y FILTERING_LEVEL_HIGH. Si no se incluye filteringLevel, no se aplicará ningún filtro de puntuación de asistencia a la respuesta.

Especifica el modelo de respuesta

El siguiente comando muestra cómo cambiar la versión del modelo que se usa para generar respuestas.

Para obtener información sobre los modelos admitidos, consulta Versiones y ciclo de vida del modelo de generación de respuestas.

REST

Para generar una respuesta con un modelo distinto del predeterminado, sigue estos pasos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "modelSpec": {
                  "modelVersion": "MODEL_VERSION",
               }
             }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • MODEL_VERSION: la versión del modelo que quieres usar para generar la respuesta. Para obtener más información, consulta Versiones y ciclo de vida del modelo de generación de respuestas.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Especificar un preámbulo personalizado

El siguiente comando muestra cómo definir un preámbulo para la respuesta generada. Un preámbulo contiene instrucciones en lenguaje natural para personalizar la respuesta. Puedes solicitar personalizaciones como la longitud, el nivel de detalle, el estilo de la respuesta (por ejemplo, "sencillo"), el idioma, el tema principal y el formato (por ejemplo, tablas, viñetas y XML). Por ejemplo, una introducción podría ser "Explícame algo como si tuvieras 10 años".

La introducción puede influir significativamente en la calidad de la respuesta generada. Para obtener información sobre qué escribir en los preámbulos y ver ejemplos de preámbulos adecuados, consulta el artículo Acerca de los preámbulos personalizados.

REST

Para generar una respuesta con un modelo distinto del predeterminado, sigue estos pasos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "promptSpec": {
                   "preamble": "PREAMBLE",
               }
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • PREAMBLE: una instrucción en lenguaje natural para personalizar la respuesta. Por ejemplo, prueba show the answer format in an ordered list o give a very detailed answer.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

El método de respuesta puede sugerir preguntas relacionadas, que los usuarios pueden elegir en lugar de escribir sus propias preguntas. Por ejemplo, cuando le preguntes "¿Cuál es la mejor época del año para ir de vacaciones a México?", además de responder a tu pregunta, el método de respuesta puede sugerirte 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?".

Para recibir preguntas relacionadas, debes especificar que se incluyan en cada consulta. Se devuelven como una matriz de cadenas en la respuesta.

Antes de empezar

Asegúrate de haber activado las funciones avanzadas de LLM en la aplicación.

Procedimiento

El siguiente comando muestra cómo solicitar que se incluyan preguntas relacionadas con la respuesta.

REST

Para obtener preguntas relacionadas con una respuesta generada, sigue estos pasos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "relatedQuestionsSpec": { "enable": true }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda. Por ejemplo, "¿qué tipos de datos puedo importar a Vertex AI Search?".

Incluir citas

El siguiente comando muestra cómo solicitar que se incluyan citas en la respuesta.

REST

Para generar una respuesta con un modelo distinto del predeterminado, sigue estos pasos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "includeCitations": INCLUDE_CITATIONS
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • INCLUDE_CITATIONS: especifica si se deben incluir los metadatos de la cita en la respuesta. El valor predeterminado es false.

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Definir el código de idioma de la respuesta

El siguiente comando muestra cómo definir el código de idioma de las respuestas.

REST

Para generar una respuesta con un modelo distinto del predeterminado, sigue estos pasos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "answerLanguageCode": "ANSWER_LANGUAGE_CODE"
               }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • ANSWER_LANGUAGE_CODE: código de idioma de la respuesta. Usa las etiquetas de idioma definidas en BCP47: Tags for Identifying Languages (BCP47: etiquetas para identificar idiomas).

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 google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Personalizar respuestas

Si hay información específica sobre el usuario disponible (por ejemplo, datos de un perfil), puede especificarla en el objeto endUserMetadata para que los resultados de la consulta se puedan personalizar para el usuario.

Por ejemplo, si un usuario que ha iniciado sesión busca información sobre cómo actualizar un teléfono móvil, la información de su perfil, como el modelo de teléfono y el plan de datos actual, proporciona información que puede personalizar la respuesta generada.

Para añadir información personal sobre el usuario que hace una consulta y generar una respuesta que tenga en cuenta esa información, sigue estos pasos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
    -d '{
        "query": { "text": "QUERY"},
        "endUserSpec": {
           "endUserMetadata": [
             {
               "chunkInfo": {
                  "content": "PERSONALIZED_INFO",
                  "documentMetadata":  { "title": "INFO_DESCRIPTION"}
               }
             }
           ]
        }
      }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • PERSONALIZATION_INFO: cadena que contiene información específica del usuario que realiza la consulta. Por ejemplo, This customer has a Pixel 6 Pro purchased over a period of 24-months starting 2023-01-15. This customer is on the Business Plus International plan. No payment is due at this time. La longitud máxima de esta cadena es de 8000 caracteres.
    • INFO_DESCRIPTION: una cadena que describe brevemente la información de personalización. Por ejemplo, Customer profile data, including model, plan, and billing status.El modelo usa tanto esta descripción como la información de personalización al generar una respuesta personalizada a la consulta.

Generar gráficos para las respuestas

El método answer puede generar gráficos y devolverlos como parte de la respuesta a una consulta.

Puedes pedir específicamente que una respuesta incluya un gráfico. Por ejemplo, "Representa gráficamente la tasa de crecimiento interanual de los pagos de pequeñas empresas a lo largo de los años con los datos disponibles". Si el sistema determina que hay suficientes datos, se devuelve un gráfico. Normalmente, se devuelve un texto de respuesta junto con el gráfico.

Además, si hay suficientes datos para crear un gráfico, el método de respuesta puede devolver un gráfico aunque la consulta no lo haya solicitado explícitamente. Por ejemplo, "¿Cuál fue la mejora en las puntuaciones del IDH asociada a un mayor acceso al agua potable en la década entre el 2010 y el 2020?".

Solo se genera un gráfico por respuesta. Sin embargo, el gráfico puede ser un gráfico compuesto que contenga otros gráficos más pequeños. Ejemplo de gráfico compuesto:

gráfico compuesto con cuatro gráficos más pequeños

Limitación

Las consultas deben estar en inglés.

Situaciones de error habituales

No siempre se devolverá una imagen con tu respuesta. Si no hay suficientes datos, no se puede generar una cifra.

Otros casos de fallo son los errores de ejecución de código y los tiempos de espera. Si ocurre alguna de estas situaciones, reformula tu consulta y vuelve a intentarlo.

Antes de empezar

Antes de ejecutar una consulta que solicite gráficos generados, haz lo siguiente:

Procedimiento

REST

Llama al método answer de la siguiente manera para devolver una respuesta que pueda incluir un gráfico generado a partir de los datos del almacén de datos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
             },
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre en inglés que contiene la pregunta o la consulta de búsqueda.
    • MODEL_VERSION: versión del modelo gemini-2.0-flash-001/answer_gen/v1 o posterior. Para obtener más información, consulta Versiones y ciclo de vida del modelo de generación de respuestas.
    • IMAGE_SOURCE: una enumeración para solicitar que la respuesta incluya un gráfico generado, FIGURE_GENERATION_ONLY, o que la respuesta pueda incluir un gráfico generado o una imagen de los almacenes de datos, ALL_AVAILABLE_SOURCES.

Recuperar imágenes del almacén de datos

Puede elegir que las imágenes del almacén de datos se devuelvan con la respuesta y en las referencias de citas. El almacén de datos debe ser un almacén de datos sin estructurar con el analizador de diseño activado.

Para obtener gráficos en las respuestas, debes activar las funciones avanzadas de LLM.

Cuando imageSource es CORPUS_IMAGE_ONLY o ALL_AVAILABLE_SOURCES, el método answer puede recuperar imágenes del almacén de datos según corresponda. Sin embargo, activar esta opción no significa que las imágenes se devuelvan siempre.

Puedes enviar una imagen como máximo por respuesta. Las citas pueden contener varias imágenes.

Limitaciones

  • La aplicación que estés usando debe estar conectada a un almacén de datos no estructurados. Las imágenes no se pueden devolver desde sitios web ni desde almacenes de datos estructurados.

  • Las consultas deben estar en inglés.

  • La anotación de imágenes a través del analizador de diseño debe aplicarse al almacén de datos. Para obtener información sobre el analizador de diseño, consulta Analizar y dividir documentos en fragmentos.

Procedimiento

REST

Llama al método answer de la siguiente manera para devolver una respuesta que pueda incluir una imagen del almacén de datos:

  1. Ejecuta el siguiente comando curl:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
              },
              includeCitations: true,
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: una cadena de texto libre en inglés que contiene la pregunta o la consulta de búsqueda.
    • MODEL_VERSION: versión del modelo gemini-2.0-flash-001/answer_gen/v1 o posterior. Para obtener más información, consulta Versiones y ciclo de vida del modelo de generación de respuestas.
    • IMAGE_SOURCE: una enumeración para solicitar que la respuesta incluya una imagen del almacén de datos, CORPUS_IMAGE_ONLY, o que la respuesta pueda incluir una imagen del almacén de datos o un gráfico generado, ALL_AVAILABLE_SOURCES.

Comandos para hacer preguntas complementarias

Las peticiones de seguimiento son consultas multiturno. Después de la primera consulta en una sesión de seguimiento, las "respuestas" posteriores tienen en cuenta las interacciones anteriores. Con las preguntas de seguimiento, el método de respuesta también puede sugerir preguntas relacionadas, que los usuarios pueden elegir en lugar de introducir sus propias preguntas de seguimiento. Para recibir sugerencias de preguntas relacionadas, debes activar las funciones avanzadas de LLM.

Todas las funciones de respuesta y de seguimiento descritas en las secciones anteriores, como las citas, los filtros, Búsqueda Segura, la opción de ignorar determinados tipos de consultas y el uso de un preámbulo para personalizar las respuestas, se pueden aplicar junto con las funciones de seguimiento.

Ejemplo de una sesión de seguimiento

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

  • Turno 1:

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

    • Responde con información adicional: la mejor época para ir de vacaciones a México es durante la temporada seca, que va de noviembre a abril.

  • Turno 2:

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

    • Respuesta con seguimiento: 1 USD equivale a unos 17,65 pesos mexicanos.

  • Turno 3:

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

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

Sin las preguntas de seguimiento, no se podría responder a la pregunta "¿Cuál es el tipo de cambio?", ya que la búsqueda normal no sabría que querías el tipo de cambio mexicano. Del mismo modo, sin seguimientos, no habría el contexto necesario para darte temperaturas específicas de México.

Acerca de las sesiones

Para saber cómo funcionan las peticiones de seguimiento en la búsqueda de Vertex AI, debes conocer las sesiones.

Una sesión se compone de consultas de texto proporcionadas por un usuario y respuestas proporcionadas por Vertex AI Search.

A estos pares de consultas y respuestas se les denomina turnos. En el ejemplo anterior, el segundo turno se compone de "¿Cuál es el tipo de cambio?" y "1 USD equivale a aproximadamente 17,65 pesos mexicanos".

Las sesiones se almacenan con la aplicación. En la aplicación, una sesión se representa mediante el recurso de sesión.

Además de contener los mensajes de consulta y respuesta, el recurso de sesión tiene lo siguiente:

  • Un nombre único (el ID de sesió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. Si se asigna al ID pseudo de usuario en los eventos de usuario de tu aplicación, el modelo puede ayudarte a ofrecer resultados personalizados al usuario.

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

  • Una conversación, que es un par de consulta y respuesta.

Antes de empezar

Antes de ejecutar una consulta que solicite preguntas de seguimiento, asegúrate de haber activado las funciones avanzadas de LLM en la aplicación.

Almacena información de la sesión y obtiene respuestas

Puedes usar la línea de comandos para generar respuestas y resultados de búsqueda, así como para almacenarlos junto con cada consulta en una sesión.

REST

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

  1. Especifica la aplicación en la que quieres almacenar la sesión:

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions" \
      -d '{
            "userPseudoId": "USER_PSEUDO_ID"
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .

    • APP_ID: el ID de la aplicación Vertex AI Search.

    • USER_PSEUDO_ID: una cadena codificada en UTF-8 que actúa como identificador seudonimizado único que monitoriza a los usuarios. Puede tener una longitud máxima de 128 caracteres. Google recomienda encarecidamente usar este campo porque mejora el rendimiento del modelo y la calidad de la personalización. Puede usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. Estas son algunas consideraciones importantes:

      • Este identificador no cambia cuando el visitante inicia o cierra sesión en un sitio web.
      • Este campo no debe tener el mismo identificador para varios usuarios. De lo contrario, el mismo ID de usuario puede combinar los historiales de eventos de diferentes usuarios y reducir la calidad del modelo.
      • Este campo no debe incluir información personal identificable (IPI).
      • En una solicitud de búsqueda o de navegación determinada, este campo debe corresponderse con el campo userPseudoId correspondiente de los eventos de usuario.

      Para obtener más información, consulta userPseudoId.

    Ejemplo de comando y resultado

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/sessions"
    -d '{
    "userPseudoId": "test_user"
    }'
    
    { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }
  2. Anota el ID de sesión, que son los números que aparecen al final del campo name: de la respuesta JSON. En el resultado de ejemplo, el ID es 5386462384953257772. Necesitarás este ID en el siguiente paso.

  3. Genera una respuesta y añádela a una sesión de tu aplicación:

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
              "searchSpec":{ "searchParams": {"filter": "FILTER"} }
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • QUERY: una cadena de texto libre que contiene la pregunta o la consulta de búsqueda.
    • SESSION_ID: el ID de la sesión que has creado en el paso 1. Son los dígitos que aparecen al final del campo name:, tal como se indica en el paso 2. En una sesión, utilice el mismo ID de sesión en cada turno.
    • 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 tienes datos no estructurados con metadatos, datos estructurados o datos de sitios web. Para obtener más información, consulte Filtrar la búsqueda personalizada para datos estructurados o no estructurados y Filtrar la búsqueda en un sitio web.

    Ejemplo de comando y resultado

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:answer"
    -d '{
    "query": { "text": "Compare bigquery with spanner database?"},
    "session":  "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943",
    }'
        
    { "answer": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072", "state": "SUCCEEDED", "answerText": "BigQuery and Spanner are both powerful tools that can be used together to handle transactional and analytical workloads. Spanner is a fully managed relational database optimized for transactional workloads, while BigQuery is a serverless data warehouse designed for business agility. Spanner provides seamless replication across regions in Google Cloud and processes over 1 billion requests per second at peak. BigQuery analyzes over 110 terabytes of data per second. Users can leverage federated queries to read data from Spanner and write to a native BigQuery table. \n", "steps": [ { "state": "SUCCEEDED", "description": "Rephrase the query and search.", "actions": [ { "searchAction": { "query": "Compare bigquery with spanner database?" }, "observation": { "searchResults": [ { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/ecc0e7547253f4ca3ff3328ce89995af", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/how-spanner-and-bigquery-work-together-handle-transactional-and-analytical-workloads", "title": "How Spanner and BigQuery work together to handle transactional and analytical workloads | Google Cloud Blog", "snippetInfo": [ { "snippet": "Using Cloud \u003cb\u003eSpanner\u003c/b\u003e and \u003cb\u003eBigQuery\u003c/b\u003e also allows customers to build their \u003cb\u003edata\u003c/b\u003e clouds using Google Cloud, a unified, open approach to \u003cb\u003edata\u003c/b\u003e-driven transformation ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/d7e238f73608a860e00b752ef80e2941", "uri": "https://cloud.google.com/blog/products/databases/cloud-spanner-gets-stronger-with-bigquery-federated-queries", "title": "Cloud Spanner gets stronger with BigQuery-federated queries | Google Cloud Blog", "snippetInfo": [ { "snippet": "As enterprises compete for market share, their need for real-time insights has given rise to increased demand for transactional \u003cb\u003edatabases\u003c/b\u003e to support \u003cb\u003edata\u003c/b\u003e ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/e10a5a3c267dc61579e7c00fefe656eb", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/replicating-cloud-spanner-bigquery-scale", "title": "Replicating from Cloud Spanner to BigQuery at scale | Google Cloud Blog", "snippetInfo": [ { "snippet": "... \u003cb\u003eSpanner data\u003c/b\u003e into \u003cb\u003eBigQuery\u003c/b\u003e for analytics. In this post, you will learn how to efficiently use this feature to replicate large tables with high throughput ...", "snippetStatus": "SUCCESS" } ] }, ... { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/8100ad36e1cac149eb9fc180a41d8f25", "uri": "https://cloud.google.com/blog/products/gcp/from-nosql-to-new-sql-how-spanner-became-a-global-mission-critical-database", "title": "How Spanner became a global, mission-critical database | Google Cloud Blog", "snippetInfo": [ { "snippet": "... SQL \u003cb\u003evs\u003c/b\u003e. NoSQL dichotomy may no longer be relevant." The \u003cb\u003eSpanner\u003c/b\u003e SQL query processor, while recognizable as a standard implementation, has unique ...", "snippetStatus": "SUCCESS" } ] } ] } } ] } ] }, "session": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "turns": [ { "query": { "queryId": "projects/123456/locations/global/questions/741830", "text": "Compare bigquery with spanner database?" }, "answer": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072" } ], "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }, "answerQueryToken": "NMwKDAjFkpK3BhDU24uZAhIkNjZlNDIyZWYtMDAwMC0yMjVmLWIxMmQtZjQwMzA0M2FkYmNj" }
  4. Repite el paso 3 para cada consulta nueva de la sesió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 google.cloud import discoveryengine_v1 as discoveryengine


def create_session(
    project_id: str,
    location: str,
    engine_id: str,
    user_pseudo_id: str,
) -> discoveryengine.Session:
    """Creates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        user_pseudo_id: A unique identifier for tracking visitors. For example, this
          could be implemented with an HTTP cookie, which should be able to
          uniquely identify a visitor on a single device.
    Returns:
        discoveryengine.Session: The newly created Session.
    """

    client = discoveryengine.SessionServiceClient()

    session = client.create_session(
        # The full resource name of the engine
        parent=f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}",
        session=discoveryengine.Session(user_pseudo_id=user_pseudo_id),
    )

    # Send Session name in `answer_query()`
    print(f"Session: {session.name}")
    return session

Obtener una sesión del almacén de datos

El siguiente comando muestra cómo llamar al método get y obtener una sesión del almacén de datos.

REST

Para obtener una sesión de un almacén de datos, haz lo siguiente:

  1. 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/engines/APP_ID/sessions/SESSION_ID"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • SESSION_ID: el ID de la sesión que quieres obtener.

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 google.cloud import discoveryengine_v1 as discoveryengine


def get_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Retrieves a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = client.get_session(name=name)

    print(f"Session details: {session}")
    return session

Eliminar una sesión de la aplicación

El siguiente comando muestra cómo llamar al método delete y eliminar una sesión del almacén de datos.

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

REST

Para eliminar una sesión de una aplicación, sigue estos pasos:

  1. 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/engines/APP_ID/sessions/SESSION_ID"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • SESSION_ID: el ID de la sesión que quieres eliminar.

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 google.cloud import discoveryengine_v1 as discoveryengine


def delete_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> None:
    """Deletes a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    client.delete_session(name=name)

    print(f"Session {name} deleted.")

Actualizar una sesión

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

  • Marcar una sesión como completada
  • Combinar los mensajes de una sesión en otra
  • Cambiar el ID pseudo de un usuario

El siguiente comando muestra cómo llamar al método patch y actualizar una sesión en el almacén de datos.

REST

Para actualizar una sesión desde una aplicación, sigue estos pasos:

  1. 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/engines/APP_ID/sessions/SESSION_ID?updateMask=state" \
      -d '{
            "state": "NEW_STATE"
          }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • SESSION_ID: el ID de la sesión que quieres actualizar.
    • NEW_STATE: el nuevo valor del estado; por ejemplo, IN_PROGRESS.

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 google.cloud import discoveryengine_v1 as discoveryengine
from google.protobuf import field_mask_pb2


def update_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Updates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    Returns:
        discoveryengine.Session: The updated Session.
    """
    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = discoveryengine.Session(
        name=name,
        state=discoveryengine.Session.State.IN_PROGRESS,  # Options: IN_PROGRESS, STATE_UNSPECIFIED
    )

    # Fields to Update
    update_mask = field_mask_pb2.FieldMask(paths=["state"])

    session = client.update_session(session=session, update_mask=update_mask)
    print(f"Updated session: {session.name}")
    return session

Mostrar todas las sesiones

El siguiente comando muestra cómo llamar al método list y listar las sesiones del almacén de datos.

REST

Para enumerar las sesiones de una aplicación, sigue estos pasos:

  1. 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/engines/APP_ID/sessions"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.

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 google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Lista de sesiones de un usuario

El siguiente comando muestra cómo llamar al método list para enumerar las sesiones asociadas a un usuario o visitante.

REST

Para ver las sesiones asociadas a un usuario o visitante, siga estos pasos:

  1. 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/engines/APP_ID/sessions?filter=userPseudoId=USER_PSEUDO_ID"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • USER_PSEUDO_ID: el ID pseudo del usuario cuyas sesiones quieres enumerar.

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 google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Lista de sesiones de un usuario y un estado

El siguiente comando muestra cómo llamar al método list para enumerar las sesiones de un usuario concreto en un estado determinado.

REST

Para enumerar las sesiones de un usuario que estén abiertas o cerradas y asociadas a un usuario o visitante concreto, haga lo siguiente:

  1. 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/engines/APP_ID/sessions?filter=userPseudoId=USER_PSEUDO_ID%20AND%20state=STATE"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación Vertex AI Search.
    • USER_PSEUDO_ID: el ID pseudo del usuario cuyas sesiones quieres enumerar.
    • STATE: el estado de la sesión: STATE_UNSPECIFIED (cerrada o desconocida) o IN_PROGRESS (abierta).

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 google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response