Obtén respuestas y seguimientos (heredado)

En esta página, se presenta la búsqueda con respuestas y preguntas de seguimiento para Gemini Enterprise, y se muestra cómo implementarla con llamadas de método.

La búsqueda con respuesta y seguimientos se basa en el método de respuesta. El método de respuesta también tiene algunas funciones adicionales importantes, como la capacidad de controlar consultas complejas.

Características del método de respuesta

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

  • La capacidad de generar respuestas a consultas complejas. Por ejemplo, el método answer puede desglosar consultas compuestas, como las siguientes, en varias consultas más pequeñas para mostrar mejores resultados que se usan para generar mejores respuestas:

    • "What is Google Cloud and Google Ads respective revenue in 2024?"
    • "¿Cuántos años después de su fundación, Google alcanzó los USD 1,000 millones en ingresos?"
  • La capacidad de combinar la búsqueda y la generación de respuestas en una conversación de varios turnos llamando al método de respuesta en cada turno.

  • La capacidad de vincularse 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 la búsqueda y las respuestas en diferentes elementos iframe en diferentes momentos. Esto significa que puedes mostrarles a los usuarios los resultados de la búsqueda (los 10 vínculos azules) en milisegundos. No es necesario que esperes a que se generen las respuestas para mostrar los resultados de la 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 usar la búsqueda

Gemini Enterprise tiene dos métodos que se usan para consultar apps. Tienen funciones diferentes, pero que se superponen.

Usa el método answer en los siguientes casos:

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

  • Quieres realizar búsquedas de varios turnos, es decir, búsquedas que conserven el contexto para permitir preguntas de seguimiento.

Usa el método search en los siguientes casos:

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

  • Quieres que se devuelvan más de diez resultados de la búsqueda ("vínculos azules").

  • Tienes alguna de las siguientes opciones:

    • Tus propios embeddings
    • Controles de sinónimos o redireccionamientos
    • Facetas
    • Códigos de país del usuario

Usa los métodos de respuesta y búsqueda juntos en los siguientes casos:

  • Quieres devolver más de diez resultados de la búsqueda y quieres una respuesta generada.

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

Atributos de la fase de búsqueda

La función de respuestas y seguimientos admite el procesamiento de consultas en lenguaje natural.

En esta sección, se describen y se ilustran las distintas opciones para reformular y clasificar las consultas.

Reformulación de consultas

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

  • Desglosa las consultas complejas en varias consultas y realiza 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 pasatiempos tienen en común Andy Ram y Arnaud Clément?
    • Ocupación de Andie Ram
    • Arnaud Clément occupation
    • Andie Ram hobby
    • Pasatiempo de Arnaud Clément
  • Sintetizar consultas de varios turnos para que las preguntas de seguimiento tengan en cuenta el contexto y el estado.

    Por ejemplo, las consultas sintetizadas a partir de la entrada del usuario en cada turno podrían verse así:

    Entrada del usuario Consulta sintetizada
    Turno 1: laptops para la escuela laptops para la escuela
    Turno 2: No es una Mac laptops para la escuela que no sean Mac
    Turno 3: Pantalla más grande y también necesito un teclado y un mouse inalámbricos Laptops con pantalla más grande para la escuela, que no sean Mac, con teclado y mouse inalámbricos
    Turno 4: y una mochila para llevarlo Laptops con pantalla más grande para la escuela, que no sean Mac, con teclado y mouse inalámbricos, y una mochila para llevarla
  • Simplifica las búsquedas largas para mejorar la recuperación.

    Por ejemplo, una consulta larga se acorta a una consulta simple.

    Entrada del usuario Consulta simplificada
    Estoy intentando averiguar por qué el botón "Agregar 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 agrega al carrito y recibe un mensaje de error. Revisé el código y parece ser correcto, por lo que no sé cuál podría ser el problema. ¿Puedes ayudarme a solucionar este problema? El botón "Agregar al carrito" no funciona en el sitio web.
  • Realizar razonamiento de varios pasos

    El razonamiento de varios pasos se basa en el paradigma ReAct (razonar y actuar), que permite a los LLM resolver tareas complejas con razonamiento en lenguaje natural. De forma predeterminada, la cantidad máxima 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 Google alcanzó los USD 1, 000 millones en 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]: Now I need to Google's yearly revenue since 1998, and find out when it exceeded 1 billion for the first time.
    [Act] Search: Google revenue since 1998
    [Observe Search Results] Google revenue in 1998, Google revenue in 1999…..
    [Answer]: Google alcanzó ingresos de más de USD 1,000 millones en 2003 [1], 5 años después de su fundación en 1998 [2].

Clasificación de consultas

Las opciones de clasificación de consultas permiten identificar consultas adversas 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 búsquedas adversarias y las que no buscan respuestas, consulta Ignora las búsquedas adversarias y Ignora las búsquedas que no buscan resúmenes.

Funciones de la fase de búsqueda

Para realizar búsquedas, el método answer tiene las mismas opciones que el método search. Por ejemplo:

Funciones de la fase de respuesta

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

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

  • Obtener una puntuación de respaldo para cada afirmación (oración en la respuesta generada) Una puntuación de respaldo es un valor de punto flotante en el rango [0,1] que indica qué tan fundamentada está la afirmación en los datos del almacén de datos. Para obtener más información, consulta Cómo devolver las puntuaciones de compatibilidad de la fundamentación.

  • Obtener una puntuación de asistencia agregada para la respuesta La puntuación de respaldo indica qué tan bien se fundamenta la respuesta en los datos del almacén de datos. Para obtener más información, consulta Cómo devolver las puntuaciones de fundamentación del retorno.

  • Devuelve solo respuestas bien fundamentadas. Puedes optar por devolver solo aquellas respuestas que cumplan con un determinado umbral de puntuación de asistencia. Para obtener más información, consulta Cómo mostrar solo respuestas fundamentadas.

  • Agrega información de personalización a las búsquedas para que las respuestas se puedan personalizar para usuarios individuales. Para obtener más información, consulta Personaliza las respuestas.

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

  • Obtener respuestas que incluyan gráficos que tracen los datos que contienen las respuestas Para obtener más información, consulta Genera gráficos para las 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 mostrar en las referencias si se solicitan citas. Para obtener más información, consulta Recupera imágenes existentes del almacén de datos.

Búsqueda y respuesta (básico)

En el siguiente comando, se muestra cómo llamar al método answer y devolver una respuesta generada y una lista de resultados de la búsqueda, con vínculos a las fuentes.

Este comando solo muestra la entrada requerida. 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"}
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?".

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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 opciones para la fase de consulta de la llamada de método answer.

Buscar y responder (parafraseo inhabilitado)

En el siguiente comando, se muestra cómo llamar al método answer y devolver una respuesta generada y una lista de resultados de la búsqueda. La respuesta podría 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
            }
        }
          }'
    
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?".

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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 la cantidad máxima de pasos)

En el siguiente comando, se muestra cómo llamar al método answer y devolver una respuesta generada y una lista de resultados de la búsqueda. La respuesta es diferente de las anteriores porque se aumentó la cantidad 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
                 }
             }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?".
    • MAX_REPHRASE: Es la cantidad máxima de pasos de reformulación. El valor más grande permitido es 5. Si no se establece o se establece en un valor inferior a 1, el valor es el predeterminado, 1.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Busca y responde con la clasificación de consultas

El siguiente comando muestra cómo llamar al método answer para consultar si una búsqueda es adversarial, no busca respuestas o ninguna de las anteriores.

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 según el tipo de búsqueda, puedes hacerlo en la fase de respuesta. Consulta Cómo ignorar las búsquedas adversarias y Cómo ignorar las búsquedas que no son de resumen.

REST

Para determinar si una consulta es de confrontación 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"]
                 }
             }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda. Por ejemplo, “hola”.
    • QUERY_CLASSIFICATION_TYPE: Son los tipos de búsqueda que deseas identificar: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY o ambos.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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: Busca y responde con opciones de resultados de la búsqueda

En esta sección, se muestra cómo especificar opciones para la parte de la fase de búsqueda de la llamada de método answer, opciones como establecer la cantidad máxima de documentos que se devuelven, boosting y filtrado, y cómo obtener una respuesta cuando proporcionas tus propios resultados de la búsqueda.

En el siguiente comando, se muestra cómo llamar al método answer y especificar varias opciones para la forma en que se devuelve el resultado de la búsqueda. (Los resultados de la búsqueda son independientes de la respuesta).

REST

Para configurar varias opciones relacionadas con los resultados de la búsqueda que se devuelven y cómo se devuelven, 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
               }
             }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda. Por ejemplo, "¿Comparar las bases de datos de BigQuery y Spanner?"
    • MAX_RETURN_RESULTS: Es la cantidad de resultados de la búsqueda que se mostrarán. El valor predeterminado es 10.
    • FILTER: El filtro especifica qué documentos se consultan. Si los metadatos de un documento cumplen con la especificación del filtro, se consultará el documento. Para obtener más información, incluida la sintaxis de filtro, consulta Filtra la búsqueda personalizada de datos estructurados o no estructurados.
    • BOOST_SPEC: La especificación de aumento te permite potenciar ciertos documentos en los resultados de la búsqueda, lo que puede afectar la respuesta. Para obtener más información, incluida la sintaxis de la especificación de refuerzo, consulta Refuerza los resultados de la búsqueda.
    • ORDER_BY: Es el orden en el que se devuelven los documentos. Los documentos se pueden ordenar por un campo en un objeto Document. La expresión orderBy distingue mayúsculas de minúsculas. Si este campo no se reconoce, se devuelve un INVALID_ARGUMENT.
    • SEARCH_RESULT_MODE: Especifica el modo de resultado de la búsqueda: DOCUMENTS o CHUNKS. Para obtener más información, consulta Analiza y divide documentos y ContentSearchSpec. Este campo solo está disponible en la versión v1alpha de la API.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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 de método answer. Puedes combinar las siguientes opciones según sea necesario.

Ignorar las consultas adversarias y las que no buscan respuestas

En el siguiente comando, se muestra cómo evitar responder consultas adversas y consultas que no buscan respuestas cuando se llama al método answer.

REST

Para omitir responder consultas que sean adversas o que no busquen respuestas, 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
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Gemini Enterprise puede evaluar la relevancia de los resultados para una consulta. Si no se determina que ningún resultado es lo suficientemente pertinente, en lugar de generar una respuesta a partir de resultados no pertinentes o mínimamente pertinentes, puedes optar por devolver una respuesta alternativa: "We do not have a summary for your query.".

En el siguiente comando, se muestra cómo devolver la respuesta de resguardo en caso de resultados irrelevantes cuando se llama al método answer.

REST

Para devolver una respuesta de resguardo si no se encuentran resultados pertinentes, 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
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Devuelve las puntuaciones de asistencia de fundamentación

El siguiente comando muestra cómo devolver las puntuaciones de compatibilidad de la fundamentación para las respuestas y las afirmaciones.

REST

Para devolver una puntuación de respaldo para cada afirmación (oración en la respuesta) y una puntuación de respaldo 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,
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.

Mostrar solo respuestas bien fundamentadas

En el siguiente comando, se muestra cómo devolver solo las respuestas que se consideran bien fundamentadas en el corpus, la información del almacén de datos. Se filtran las respuestas con poca fundamentación.

Elige un umbral de nivel bajo o alto para la puntuación de respaldo de la fundamentación. Luego, la respuesta solo se devuelve si cumple o supera ese nivel. Puedes experimentar con los dos umbrales de filtro y sin umbral para determinar qué nivel de filtro es probable que proporcione los mejores resultados para tus usuarios.

REST

Para devolver una respuesta solo si cumple con un umbral de puntuación de respaldo, 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"
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • FILTER_LEVEL: Es una enumeración para filtrar las respuestas según la puntuación de respaldo de la fundamentación. Las opciones son las siguientes: FILTERING_LEVEL_LOW y FILTERING_LEVEL_HIGH. Si no se incluye filteringLevel, no se aplica ningún filtro de puntuación de asistencia a la respuesta.

Especifica el modelo de respuesta

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

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

REST

Para generar una respuesta con un modelo diferente del predeterminado, 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": {
               "modelSpec": {
                  "modelVersion": "MODEL_VERSION",
               }
             }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • MODEL_VERSION: Es la versión del modelo que deseas 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

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Especifica un preámbulo personalizado

En el siguiente comando, se muestra cómo establecer 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 salida (como "simple"), el idioma de salida, el enfoque de la respuesta y el formato (como tablas, viñetas y XML). Por ejemplo, un preámbulo podría ser "Explica como si fueras un niño de diez años".

El preámbulo puede tener un efecto significativo en la calidad de la respuesta generada. Para obtener información sobre qué escribir en los preámbulos y ver ejemplos de buenos preámbulos, consulta Acerca de los preámbulos personalizados.

REST

Para generar una respuesta con un modelo diferente del predeterminado, 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": {
               "promptSpec": {
                   "preamble": "PREAMBLE",
               }
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • PREAMBLE: Es 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

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Incluye citas

En el siguiente comando, se muestra cómo solicitar que se incluyan citas con la respuesta.

REST

Para generar una respuesta con un modelo diferente del predeterminado, 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": {
               "includeCitations": INCLUDE_CITATIONS
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • INCLUDE_CITATIONS: especifica si se deben incluir metadatos de citas en la respuesta. El valor predeterminado es false.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Establece el código de idioma de la respuesta

En el siguiente comando, se muestra cómo establecer el código de idioma para las respuestas.

REST

Para generar una respuesta con un modelo diferente del predeterminado, 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": {
               "answerLanguageCode": "ANSWER_LANGUAGE_CODE"
               }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • ANSWER_LANGUAGE_CODE: Es un código de idioma para la respuesta. Usa las etiquetas de idioma definidas por BCP47: Etiquetas para identificar idiomas.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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(
        # Use the 2026 stable production model for answer generation
        model_version="gemini-2.5-flash/answer_gen/stable",
        ),
        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

Personaliza las respuestas

Si hay información específica sobre el usuario disponible, por ejemplo, datos en un perfil, puedes especificar esa información en el objeto endUserMetadata para que los resultados de la búsqueda se puedan personalizar para el usuario.

Por ejemplo, si un usuario busca información para actualizar su teléfono celular, la información de su perfil, como el modelo de teléfono actual y el plan celular, proporciona información que puede personalizar la respuesta generada.

Para agregar información personal sobre el usuario que realiza una consulta y generar una respuesta que tenga en cuenta la información personal, 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"},
        "endUserSpec": {
           "endUserMetadata": [
             {
               "chunkInfo": {
                  "content": "PERSONALIZED_INFO",
                  "documentMetadata":  { "title": "INFO_DESCRIPTION"}
               }
             }
           ]
        }
      }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • PERSONALIZATION_INFO: Es una 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. El límite de longitud para esta cadena es de 8,000 caracteres.
    • INFO_DESCRIPTION: Es 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 esta descripción y la información de personalización cuando genera una respuesta personalizada a la consulta.

Genera gráficos para las respuestas

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

Puedes solicitar específicamente que una respuesta incluya un gráfico, por ejemplo, "Traza 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. Por lo general, se devuelve un texto de respuesta junto con el gráfico.

Además, si hay datos suficientes para crear un gráfico, el método de respuesta puede devolver un gráfico, incluso si la consulta no lo solicitó de forma explícita. Por ejemplo, "¿Cuál fue la mejora en las puntuaciones del IDH asociadas con un mayor acceso al agua potable en la década entre 2010 y 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. Este es un ejemplo de un gráfico compuesto:

El gráfico compuesto contiene cuatro gráficos más pequeños.

Limitación

Las consultas deben estar en inglés.

Situaciones de falla comunes

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

Otras situaciones de falla incluyen fallas en la ejecución de código y tiempos de espera. Si ocurre alguna de estas situaciones, reformula tu búsqueda y vuelve a intentarlo.

Antes de comenzar

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre en inglés que contiene la pregunta o la búsqueda.
    • MODEL_VERSION: Versión del modelo stable o cualquier otro modelo compatible. Consulta Versiones y ciclo de vida del modelo de generación de respuestas.
    • IMAGE_SOURCE: Es 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 existente de los almacenes de datos, ALL_AVAILABLE_SOURCES.

Recupera imágenes existentes del almacén de datos

Puedes elegir que las imágenes del almacén de datos se devuelvan con la respuesta y en las referencias de cita. El almacén de datos debe ser un almacén de datos no estructurados con el analizador de diseño activado.

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 siempre se devolverán imágenes.

Obtendrás una imagen (como máximo) por respuesta. Las citas pueden contener varias imágenes.

Limitaciones

  • La app que usas debe estar conectada a un almacén de datos no estructurados. No se pueden devolver imágenes de sitios web ni de almacenes de datos estructurados.

  • Las preguntas deben estar en inglés.

  • La anotación de imágenes a través del analizador de diseño se debe aplicar al almacén de datos. Para obtener información sobre el analizador de diseño, consulta Analiza y divide documentos.

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 en la respuesta:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app que deseas consultar.
    • QUERY: Es una cadena de texto libre en inglés que contiene la pregunta o la búsqueda.
    • MODEL_VERSION: Versión del modelo stable o algún otro modelo compatible. Consulta Versiones y ciclo de vida de los modelos de generación de respuestas.
    • IMAGE_SOURCE: Es 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 preguntas de seguimiento

Las preguntas adicionales son consultas de varios turnos. Después de la primera consulta en una sesión de seguimiento, los "turnos" posteriores tienen en cuenta las interacciones anteriores. Con los seguimientos, el método de respuesta también puede sugerir preguntas relacionadas, que los usuarios pueden elegir en lugar de ingresar sus propias preguntas de seguimiento.

Todas las funciones de respuesta y seguimiento descritas en las secciones anteriores, como las citas, los filtros, SafeSearch, ignorar ciertos tipos de consultas y usar un preámbulo para personalizar las respuestas, se pueden aplicar junto con los seguimientos.

Ejemplo de una sesión de seguimiento

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

  • Interacción 1:

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

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

  • Interacción 2:

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

    • Respuesta con seguimiento: 1 USD equivale a aproximadamente 17.65 pesos mexicanos.

  • Turno 3:

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

    • Respuesta con preguntas de seguimiento: La temperatura promedio varía entre 21 °C y 25 °C. El promedio de Cancún es de aproximadamente 25 °C.

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

Cuando preguntas "¿Cuál es la mejor época del año para vacacionar en México?", además de responder tu pregunta, la respuesta y los seguimientos pueden sugerir otras preguntas que podrías hacer, como "¿Cuál es el mes más barato para vacacionar en México?" y "¿Cuáles son los meses turísticos en México?".

Después de habilitar la función de preguntas relacionadas, las preguntas se devuelven como strings en la respuesta.

Acerca de las sesiones

Para comprender cómo funcionan los seguimientos en Gemini Enterprise, debes conocer las sesiones.

Una sesión se compone de las consultas de texto que proporciona un usuario y las respuestas que proporciona Gemini Enterprise.

A veces, estos pares de consultas y respuestas se denominan 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 app. En la app, una sesión se representa con 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)

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

  • Una hora de inicio y una de finalización

  • Un turno, que es un par de pregunta y respuesta.

Almacena información de la sesión y obtén respuestas

Puedes usar la línea de comandos para generar respuestas y contestaciones de búsqueda, y para almacenar estos datos, junto con cada búsqueda 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 app 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"
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.

    • APP_ID: Es el ID de la app.

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

    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, los números al final del campo name: en 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 agrégala a una sesión en tu app:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.
    • SESSION_ID: Es el ID de la sesión que creaste en el paso 1. Estos son los dígitos que se encuentran al final del campo name:, que se indica en el paso 2. Para una sesión, usa el mismo ID de sesión en cada turno.
    • FILTER: Es un campo de texto para filtrar la búsqueda con una expresión de filtro. El valor predeterminado es una string vacía. La forma en que construyes tu filtro varía según si tienes datos no estructurados con metadatos, datos estructurados o datos de sitios web. Para obtener más información, consulta Filtra la búsqueda personalizada para datos estructurados o no estructurados.

    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 búsqueda nueva de la sesión.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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

Obtén una sesión del almacén de datos

En el siguiente comando, se 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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • SESSION_ID: Es el ID de la sesión que deseas obtener.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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

Cómo borrar una sesión de la app

En el siguiente comando, se muestra cómo llamar al método delete y borrar una sesión del almacén de datos.

De forma predeterminada, las sesiones con más de 60 días de antigüedad se borran automáticamente. Sin embargo, si deseas borrar una sesión en particular, por ejemplo, si contiene contenido sensible, usa esta llamada a la API para borrarla.

REST

Para borrar una sesión de una app, haz lo siguiente:

  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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • SESSION_ID: Es el ID de la sesión que deseas borrar.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

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

Actualiza una sesión

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

  • Cómo marcar una sesión como completada
  • Cómo combinar los mensajes de una sesión en otra
  • Cambia el seudo-ID de un usuario

En el siguiente comando, se 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 app, haz lo siguiente:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • SESSION_ID: Es el ID de la sesión que deseas actualizar.
    • NEW_STATE: Es el valor nuevo para el estado, por ejemplo, IN_PROGRESS.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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

Enumera todas las sesiones

En el siguiente comando, se muestra cómo llamar al método list y enumerar las sesiones en el almacén de datos.

REST

Para enumerar las sesiones de una app, 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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de Gemini Enterprise. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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

Enumera las sesiones de un usuario

En el siguiente comando, se muestra cómo llamar al método list para enumerar las sesiones asociadas con un usuario o visitante.

REST

Para enumerar las sesiones asociadas con un usuario o visitante, 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?filter=userPseudoId=USER_PSEUDO_ID"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • USER_PSEUDO_ID: Es el seudónimo del usuario cuyas sesiones quieres enumerar.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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

Enumera las sesiones de un usuario y su estado

En el siguiente comando, se muestra cómo llamar al método list para enumerar las sesiones en un estado determinado para un usuario específico.

REST

Para enumerar las sesiones de un usuario que están abiertas o cerradas y asociadas con un usuario o visitante determinado, 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?filter=userPseudoId=USER_PSEUDO_ID%20AND%20state=STATE"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • APP_ID: Es el ID de la app.
    • USER_PSEUDO_ID: Es el seudónimo del usuario cuyas sesiones quieres enumerar.
    • STATE: el estado de la sesión, que puede ser STATE_UNSPECIFIED (cerrada o desconocida) o IN_PROGRESS (abierta).

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Gemini Enterprise sobre cómo usar las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Gemini Enterprise para Python.

Para autenticarte en Gemini Enterprise, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para 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