Obtén respuestas y seguimientos

En esta página, se presenta la búsqueda con respuesta y seguimientos para Agent Search y se muestra cómo implementarla en apps de búsqueda personalizada con llamadas de método.

La búsqueda con respuesta y seguimientos se basa en el método de respuesta. El método answer reemplaza las funciones de resumen del método search anterior y todas las funciones del método converse obsoleto. 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 iframes en momentos distintos. 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 antes de poder 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

Agent Search 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 mantengan 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.

  • Tienes alguna de las siguientes opciones:

    • Datos de contenido multimedia o atención médica
    • Tus propios embeddings
    • Controles de sinónimos o redireccionamiento
    • Facetas
    • Códigos de país del usuario
  • Debes explorar los datos de tu almacén de datos genérico.

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

  • Quieres que se muestren 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 con rapidez antes de que se devuelva la respuesta generada.

Funciones de la fase de consulta

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 consultas 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 consultas 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 Se sintetizó la consulta
    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 consultas largas para mejorar la recuperación (requiere la opción Respuestas generativas).

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

    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 razonamientos de varios pasos

    El razonamiento de varios pasos se basa en el paradigma ReAct (razonar y actuar), que permite que los LLM resuelvan tareas complejas con el razonamiento de 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:
    [Thought]: 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].

    El razonamiento de varios pasos requiere que la opción Respuestas generativas esté habilitada.

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 consultas de confrontación y las que no buscan respuestas, consulta Ignora las consultas de confrontación y Ignora las consultas 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 puntuaciones de compatibilidad de 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 Devuelve puntuaciones de asistencia de fundamentación.

  • Devuelve solo respuestas bien fundamentadas. Puedes elegir que se devuelvan solo las respuestas que cumplan con un umbral de puntuación de respaldo determinado. Para obtener más información, consulta Muestra solo respuestas bien fundamentadas.

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

  • Agrega información de personalización a las consultas 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.

Antes de comenzar

Según el tipo de app que tengas, completa los siguientes requisitos:

  • Si tienes una app de búsqueda estructurada, no estructurada o de sitio web, activa las siguientes opciones:

    • Funciones de la edición Enterprise: Te brinda acceso a las funciones principales de respuestas generativas. Esto incluye todas las funciones de generación de respuestas, excepto las funciones de respuestas generativas avanzadas, como las preguntas relacionadas, la simplificación de consultas, las consultas de varios turnos y las respuestas multimodales que devuelven imágenes y gráficos.
    • Respuestas generativas: Esto te brinda acceso a las funciones avanzadas de respuestas generativas que requieren razonamiento de varios pasos, simplificación de consultas, consultas de varios turnos, preguntas relacionadas y respuestas multimodales que devuelven imágenes y gráficos.
  • Además, si tienes un almacén de datos de búsqueda de sitios web, activa la indexación avanzada de sitios web.

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 obligatoria. Las opciones se dejan con sus valores predeterminados.

REST

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

  1. Ejecuta el siguiente comando curl:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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.

Búsqueda y respuesta (reformulación inhabilitada)

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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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 (especifica 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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

En el siguiente comando, se muestra cómo llamar al método answer para consultar si una pregunta es de confrontación, no busca una respuesta o ninguna de las dos opciones.

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 consulta, puedes hacerlo en la fase de respuesta. Consulta Ignora las consultas adversas y Ignora las consultas que no buscan resúmenes.

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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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 consulta que deseas identificar: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY o ambos.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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. El valor máximo es 25.
    • 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 mejora, consulta Mejora 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 no se reconoce este campo, 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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

La búsqueda de agentes puede evaluar qué tan pertinentes son los resultados para una consulta. Si se determina que ningún resultado es lo suficientemente relevante, en lugar de generar una respuesta a partir de resultados no relevantes o mínimamente relevantes, puedes elegir devolver una respuesta de resguardo: "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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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

En el siguiente comando, se muestra cómo devolver las puntuaciones de respaldo de la fundamentación para las respuestas y las afirmaciones.

Para obtener información general sobre la fundamentación en Vertex AI, consulta Verifica la fundamentación con RAG. El método groundingConfigs.check se llama con el método answer.

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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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 con ese nivel o lo supera. 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.

Para obtener información general sobre la fundamentación en Vertex AI, consulta Verifica la fundamentación con RAG. El método groundingConfigs.check se llama con el método answer.

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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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 respaldo 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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 con show the answer format in an ordered list o give a very detailed answer.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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

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

Para recibir preguntas relacionadas, debes especificar su inclusión con cada consulta, y se devuelven como un array de cadenas en la respuesta.

Si se omite la respuesta y se devuelve un campo answerSkippedReasons en la respuesta, las preguntas relacionadas no se incluyen en el resultado.

Antes de comenzar

Asegúrate de haber activado la opción Respuestas generativas para la app.

Procedimiento

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

REST

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

  1. Ejecuta el siguiente comando curl:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres consultar.
    • QUERY: Es una cadena de texto libre que contiene la pregunta o la búsqueda. Por ejemplo, "¿Qué tipos de datos puedo importar a Agent Search?".

Incluir citas

En el siguiente comando, se muestra cómo solicitar que se incluyan citas en 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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 disponible sobre el usuario, por ejemplo, datos en un perfil, puedes especificar esa información en el objeto endUserMetadata para que los resultados de la consulta se puedan personalizar para el usuario.

Por ejemplo, si un usuario que accedió a su cuenta busca información para actualizar un teléfono celular, la información de su perfil, como el modelo de teléfono actual y el plan de telefonía 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres 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 obtendrá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, vuelve a formular la consulta y reinténtalo.

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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres consultar.
    • QUERY: Es una cadena de texto libre en inglés que contiene la pregunta o la búsqueda.
    • MODEL_VERSION: Es la versión del modelo. Para obtener más información, 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.

Para obtener gráficos en las respuestas que se muestran, debes activar la opción Respuestas generativas.

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 devuelvan 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 consultas 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search que quieres consultar.
    • QUERY: Es una cadena de texto libre en inglés que contiene la pregunta o la búsqueda.
    • MODEL_VERSION: Es la versión del modelo. Para obtener más información, 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 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. Para obtener sugerencias de preguntas relacionadas, debes activar la opción Respuestas generativas.

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 seguimientos. Supongamos que quieres saber sobre las vacaciones en México:

  • Interacción 1:

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

    • Respuesta con preguntas de seguimiento: El mejor momento para vacacionar en 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 preguntas de 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 ~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.

Acerca de las sesiones

Para comprender cómo funcionan los seguimientos en la búsqueda de agentes, debes comprender las sesiones.

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

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

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

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

  • Un estado (en curso o completado)

  • Un seudo-ID del usuario, que es un ID de visitante que hace un seguimiento del usuario Se puede asignar de forma programática. Cuando se asigna al seudónimo de ID de usuario en los eventos de usuario de tu app, el modelo puede ayudarte a publicar resultados personalizados para el usuario.

  • Una hora de inicio y una de finalización

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

Antes de comenzar

Antes de ejecutar una consulta que solicite preguntas de seguimiento, asegúrate de haber activado la opción Respuestas generativas para la app.

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

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

REST

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

  1. Especifica la 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: Es el ID de tu proyecto de Google Cloud .

    • APP_ID: Es el ID de la app de Agent Search.

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

      • Este identificador no cambia cuando el visitante accede o sale de un sitio web.
      • Este campo no se debe establecer con el mismo identificador para varios usuarios. De lo contrario, el mismo ID de usuario puede combinar historiales de eventos de diferentes usuarios y disminuir la calidad del modelo.
      • Este campo no debe incluir información de identificación personal (PII).
      • Para una solicitud de búsqueda o exploración determinada, este campo debe asignarse al campo userPseudoId correspondiente en los eventos de usuario.

      Para obtener más información, consulta userPseudoId

    Ejemplo de comando y resultado

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/sessions"
    -d '{
    "userPseudoId": "test_user"
    }'
    
    { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }
  2. Anota el ID de sesión, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • 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 de datos estructurados o no estructurados y Filtra la búsqueda en sitios web.

    Ejemplo de comando y resultado

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

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • SESSION_ID: Es el ID de la sesión que deseas obtener.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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 quieres 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • SESSION_ID: Es el ID de la sesión que deseas borrar.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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
  • Combinar los mensajes de una sesión con 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • USER_PSEUDO_ID: Es el seudónimo del usuario cuyas sesiones quieres enumerar.

Python

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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 un 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: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Agent Search.
    • 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

Para obtener más información, consulta la documentación de referencia de la API de Agent Search para Python.

Para autenticarte en Agent Search, 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