Genera respuestas fundamentadas con RAG

Como parte de tu experiencia de generación de aumento de recuperación (RAG) en Vertex AI Agent Builder, puedes generar respuestas fundamentadas a las instrucciones en función de las siguientes fuentes de fundamentación:

  • Búsqueda de Google: Usa Grounding with Google Search si deseas conectar el modelo con conocimiento mundial, una amplia variedad de temas o información actualizada en Internet. La fundamentación con la Búsqueda de Google admite la recuperación dinámica, que te brinda la opción de generar Resultados Fundamentados con la Búsqueda de Google solo cuando sea necesario. Por lo tanto, la configuración de recuperación dinámica evalúa si una instrucción requiere conocimiento sobre eventos recientes y habilita la vinculación con la Búsqueda de Google. Para obtener más información, consulta Recuperación dinámica.
  • Texto intercalado: Usa la fundamentación con texto intercalado para fundamentar la respuesta en fragmentos de texto llamados texto de hechos que se proporcionan en la solicitud. Un texto de hecho es una declaración proporcionada por el usuario que se considera fáctica para una solicitud determinada. El modelo no verifica la autenticidad del texto de los hechos.
  • Almacenes de datos de Vertex AI Search: Usa la fundamentación con Vertex AI Search si deseas conectar el modelo a tus documentos empresariales desde los almacenes de datos de Vertex AI Search.

En esta página, se describe cómo generar respuestas fundamentadas en función de estas fuentes de fundamentación con los siguientes enfoques:

Además, puedes elegir transmitir las respuestas desde el modelo. Generar una respuesta fundamentada mediante la transmisión es una función experimental.

Puedes usar otros métodos para generar respuestas fundamentadas que se adapten a tu aplicación. Para obtener más información, consulta APIs de Vertex AI para crear experiencias de búsqueda y RAG.

Terminología

Antes de usar el método de generación de respuestas fundamentadas, es útil comprender las entradas y salidas, cómo estructurar tu solicitud y la terminología relacionada con la RAG.

Términos de RAG

La RAG es una metodología que permite que los modelos de lenguaje grandes (LLM) generen respuestas basadas en la fuente de datos que elijas. Existen dos etapas en el RAG:

  1. Recuperación: Obtener rápidamente los datos más relevantes puede ser un problema de búsqueda común. Con la RAG, puedes recuperar rápidamente los hechos que son importantes para generar una respuesta.
  2. Generación: El LLM usa los hechos recuperados para generar una respuesta fundamentada.

Por lo tanto, el método de generación de respuestas fundamentadas recupera los hechos de la fuente de fundamentación y genera una respuesta fundamentada.

Datos de entrada

El método de generación de respuestas fundamentadas requiere las siguientes entradas en la solicitud:

  • Rol: Es el remitente de un texto determinado que es un usuario (user) o un modelo (model).

  • Text: Cuando el rol es user, el texto es una instrucción y, cuando el rol es model, el texto es una respuesta fundamentada. La forma en que especificas el rol y el texto en una solicitud se determina de la siguiente manera:

    • Para la generación de respuestas de un solo turno, el usuario envía el texto de la instrucción en la solicitud y el modelo envía el texto de la respuesta en la respuesta.
    • Para una generación de respuestas de varios turnos, la solicitud contiene el par de instrucciones y respuestas para todos los turnos anteriores y el texto de la instrucción del usuario para el turno actual. Por lo tanto, en una solicitud de este tipo, el rol es user para un texto de instrucción y model para el texto de la respuesta.
  • Instrucción del sistema: Es un preámbulo a tu instrucción que rige el comportamiento del modelo y modifica el resultado según corresponda. Por ejemplo, puedes agregar un arquetipo a la respuesta generada o indicarle al modelo que aplique formato al texto de salida de una manera determinada. Para la generación de respuestas de varios turnos, debes proporcionarle instrucciones al sistema para cada turno. Para obtener más información, consulta Usa instrucciones del sistema.

  • Fuente de los fundamentos: Es la fuente en la que se basa la respuesta y puede ser una o más de las siguientes:

    • Búsqueda de Google: Fundamenta las respuestas con los resultados de la Búsqueda de Google. Cuando la fuente de puesta a tierra es la Búsqueda de Google, puedes especificar una configuración de recuperación dinámica con un umbral de recuperación dinámica. Para obtener más información, consulta Recuperación dinámica.

    • Texto intercalado: Basar la respuesta en el texto de hechos que se proporciona en la solicitud Un texto de hecho es una declaración proporcionada por el usuario que se considera fáctica para una solicitud determinada. El modelo no verifica la autenticidad del texto de los hechos. Puedes proporcionar un máximo de 100 textos de datos en cada fuente de texto intercalado. Los textos de hechos se pueden admitir con metaatributos, como el título, el autor y el URI. Estos meta atributos se muestran en la respuesta cuando se citan los fragmentos que respaldan la respuesta.

    • Almacenes de datos de Vertex AI Search: Fundamenta la respuesta en los documentos de los almacenes de datos de Vertex AI Search. No puedes especificar un almacén de datos de búsqueda de sitios web como fuente de puesta a tierra.

    En una solicitud determinada, puedes proporcionar una fuente de texto intercalado y una fuente de almacén de datos de Vertex AI Search. No puedes combinar la Búsqueda de Google con ninguna de estas fuentes. Por lo tanto, si quieres fundamentar tus respuestas con los resultados de la Búsqueda de Google, debes enviar una solicitud independiente en la que especifiques la Búsqueda de Google como la única fuente de fundamentación.

    Puedes proporcionar un máximo de 10 fuentes de puesta a tierra en cualquier orden. Por ejemplo, supongamos que proporcionas las fuentes de puesta a tierra con el siguiente recuento, en el siguiente orden para obtener un total de 10 fuentes de puesta a tierra:

    • Tres fuentes de texto intercalado, cada una de las cuales puede contener un máximo de 100 textos de hechos
    • Seis almacenes de datos de Vertex AI Search
    • Cuatro fuentes de texto intercalado, cada una de las cuales puede contener un máximo de 100 textos de hechos

    A cada fuente se le asigna un índice en el orden en que se especifica en la solicitud. Por ejemplo, si especificaste una combinación de fuentes en tu solicitud, el índice de origen se asigna como se muestra en la siguiente tabla:

    Fuente de los fundamentos Índice
    Texto intercalado n° 1 0
    Texto intercalado n° 2 1
    Almacén de datos de Vertex AI Search n.° 1 2
    Texto intercalado n.° 3 3
    Almacén de datos de Vertex AI Search n.° 2 4

    Este índice se cita en la respuesta y es útil para rastrear el origen.

  • Especificaciones de generación: Son las especificaciones para la configuración del modelo que consisten en la siguiente información:

    • ID de modelo: Especifica el modelo de Gemini de Vertex AI que se usará para la generación de respuestas. Para obtener una lista de los modelos que puedes usar para generar respuestas fundamentadas, consulta Modelos compatibles.
    • Parámetros del modelo: Especifica los parámetros que puedes configurar para el modelo que elijas usar. Estos parámetros son: idioma, temperatura, Top-P y Top-K. Para obtener más información sobre estos parámetros, consulta Parámetros del modelo de Gemini.

Datos de salida

La respuesta que genera el modelo se denomina candidato y contiene los siguientes datos. Es posible que no todos los campos estén presentes en el resultado.

  • Rol: Es el remitente de la respuesta fundamentada. La respuesta siempre contiene el texto de la respuesta fundamentada. Por lo tanto, el rol en una respuesta siempre es un modelo.

  • Texto: Es una respuesta fundamentada.

  • Puntuación de fundamentación: Es un valor de número de punto flotante en el rango [0, 1] que indica qué tan bien se fundamenta una respuesta en las fuentes proporcionadas.

  • Metadatos de puesta a tierra: Son metadatos sobre la fuente de puesta a tierra. Los metadatos de puesta a tierra contienen la siguiente información:

    • Fragmentos de compatibilidad: Es una lista de fragmentos que respaldan la respuesta. A cada fragmento de compatibilidad se le asigna un índice de fragmento de compatibilidad que es útil cuando se rastrea la procedencia. Cada fragmento de compatibilidad contiene lo siguiente:

      • Texto de fragmento: Es un fragmento de texto citado textualmente de la fuente de la que se extrae la respuesta o una parte de la respuesta (denominada texto de la declaración). Es posible que no siempre esté presente en la respuesta.
      • Fuente: Es un índice asignado a la fuente en la solicitud.
      • Metadatos de origen: Son los metadatos sobre el fragmento. Según la fuente, los metadatos de la fuente pueden ser cualquiera de los siguientes:

        • En el caso de una fuente intercalada, los metadatos pueden ser los detalles adicionales que se especificaron en la solicitud, como el título, el autor o el URI.
        • En el caso del almacén de datos de Vertex AI Search, los metadatos pueden ser el ID del documento, el título del documento, el URI (ubicación de Cloud Storage) o el número de página.
        • En el caso de Fundamentos con la Búsqueda de Google, cuando se genera un resultado fundamentado, los metadatos contienen un URI que redirecciona al publicador del contenido que se usó para generar el resultado fundamentado. Los metadatos también contienen el dominio del publicador. Se puede acceder a los URIs proporcionados durante un máximo de 30 días después de que se genera el resultado basado en la ubicación.
    • Certificación de fuentes: Es la información de respaldo de una afirmación en la respuesta. La asistencia de puesta a tierra contiene la siguiente información:

      • Texto del argumento: Es la respuesta o una parte de la respuesta que se justifica con el texto del fragmento de respaldo.
      • Índice de fragmento de compatibilidad: Es un índice asignado al fragmento de compatibilidad en el orden en que aparece en la lista de fragmentos de compatibilidad.
      • Búsquedas web: Son las búsquedas sugeridas para las sugerencias de la Búsqueda de Google.
      • Sugerencias de la Búsqueda: Si recibes sugerencias de la Búsqueda de Google con una respuesta, esa respuesta es un "Resultado Fundamentado" sujeto a las condiciones del servicio de Grounding with Google Search. Para obtener más información, consulta las Condiciones del Servicio . El campo renderedContent dentro del campo searchEntryPoint es el código proporcionado para implementar las sugerencias de la Búsqueda de Google. Para usar las sugerencias de la Búsqueda de Google, consulta Cómo usar las sugerencias de la Búsqueda de Google.

Genera una respuesta fundamentada en un solo turno

En esta sección, se describe cómo generar respuestas basadas en las siguientes fuentes:

Fundamenta la respuesta en el texto intercalado y el almacén de datos de Vertex AI Search

En el siguiente ejemplo, se muestra cómo enviar texto de instrucción especificando un texto intercalado y un almacén de datos de Vertex AI Search como fuente de fundamentación. No puedes especificar un almacén de datos de búsqueda de un sitio web como fuente de conexión a tierra. En este ejemplo, se usa el método generateGroundedContent.

REST

  1. Envía la instrucción en la siguiente solicitud curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_1",
               "attributes": {
                 "title": "TITLE_1",
                 "uri": "URI_1",
                 "author": "AUTHOR_1"
               }
             }
           ]
         }
       },
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_2",
               "attributes": {
                 "title": "TITLE_2",
                 "uri": "URI_2"
               }
             },
             {
               "factText": "FACT_TEXT_3",
               "attributes": {
                 "title": "TITLE_3",
                 "uri": "URI_3"
               }
             }
           ]
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_1/servingConfigs/default_search"
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_2/servingConfigs/default_search"
         }
       }
      ]
    },
    "generationSpec": {
      "modelId": "MODEL_ID",
      "temperature": TEMPERATURE,
      "topP": TOP_P,
      "topK": TOP_K
    }
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.
    • PROMPT_TEXT: Es la instrucción del usuario.
    • SYSTEM_INSTRUCTION: Es un campo opcional para proporcionar un preámbulo o algún contexto adicional.
    • FACT_TEXT_N: el texto intercalado para fundamentar la respuesta. Puedes proporcionar un máximo de 100 textos de hechos.
    • TITLE_N: Es un campo opcional para establecer el atributo meta de título para el texto intercalado.
    • URI_N: Es un campo opcional para establecer el atributo meta URI del texto intercalado.
    • AUTHOR_N: Es un campo opcional para establecer el atributo meta de autor para el texto intercalado.
    • APP_ID_N: El ID de la app de Vertex AI Search.
    • MODEL_ID: Un campo opcional para establecer el ID del modelo de Gemini que deseas usar para generar la respuesta fundamentada. Para obtener una lista de los IDs de modelo disponibles, consulta Modelos compatibles.
    • TEMPERATURE: Es un campo opcional para establecer la temperatura que se usa para el muestreo. Google recomienda una temperatura de 0.0. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_P: un campo opcional para establecer el valor de top-P del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_K: un campo opcional para establecer el valor Top-K del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"
# engine_id = "YOUR_ENGINE_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How did Google do in 2020? Where can I find BigQuery docs?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(
                text="Add a smiley emoji after the answer."
            )
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                inline_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.InlineSource(
                    grounding_facts=[
                        discoveryengine.GroundingFact(
                            fact_text=(
                                "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction"
                            ),
                            attributes={
                                "title": "BigQuery Overview",
                                "uri": "https://cloud.google.com/bigquery/docs/introduction",
                            },
                        ),
                    ]
                ),
            ),
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.SearchSource(
                    # The full resource name of the serving config for a Vertex AI Search App
                    serving_config=f"projects/{project_number}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_search",
                ),
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Ejemplo de generación de respuestas de una sola vuelta basada en texto intercalado y Vertex AI Search

En el siguiente ejemplo, la solicitud especifica las siguientes fuentes de fundamentación: un hecho de texto intercalado y un almacén de datos de Vertex AI Search. En este ejemplo, se usa el método generateGroundedContent. En este ejemplo, también se usa una instrucción del sistema para finalizar la respuesta con un emoji de cara sonriente.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "How did google do in 2020? Where can I find Bigquery docs?"
        }
      ]
    }
  ],
  "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
  },
  "groundingSpec": {
    "groundingSources": [
      {
        "inline_source": {
          "grounding_facts": [
            {
              "fact_text": "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction",
              "attributes": {
                "title": "BigQuery Overview",
                "uri": "https://cloud.google.com/bigquery/docs/introduction"
              }
            }
          ]
        }
      },
      {
        "searchSource": {
          "servingConfig": "projects/123456/locations/global/collections/default_collection/engines/app_id_example/servingConfigs/default_search"
        }
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}'

Genera una respuesta fundamentada con la Búsqueda de Google

Puedes fundamentar las respuestas generadas con datos web disponibles públicamente.

Recuperación dinámica

Puedes usar la recuperación dinámica en tu solicitud para elegir cuándo desactivar la fundamentación con la Búsqueda de Google. Esto es útil cuando la instrucción no requiere una respuesta basada en la Búsqueda de Google y los modelos compatibles pueden proporcionar una respuesta basada en su conocimiento sin fundamentación. Esto te ayuda a administrar la latencia, la calidad y el costo de manera más eficaz.

Puntuación y umbral de predicción de recuperación dinámica

Cuando envías una solicitud para generar una respuesta fundamentada, Vertex AI Agent Builder asigna una puntuación de predicción a la instrucción. La puntuación de predicción es un valor de punto flotante en el rango [0,1]. Su valor depende de si la instrucción puede beneficiarse de fundamentar la respuesta con la información más actualizada de la Búsqueda de Google. Por lo tanto, una instrucción que requiere una respuesta basada en los hechos más recientes de la Web tiene una puntuación de predicción más alta, y una instrucción para la que una respuesta generada por un modelo es suficiente tiene una puntuación de predicción más baja.

Estos son ejemplos de algunas instrucciones y sus puntuaciones de predicción.

Instrucción Puntuación de predicción Comentario
"Escribe un poema sobre las peonías" 0.13 El modelo puede basarse en su conocimiento y la respuesta no necesita fundamentación.
"Sugiere un juguete para un niño de 2 años" 0.36 El modelo puede basarse en su conocimiento y la respuesta no necesita fundamentación.
"¿Puedes darme la receta de un guacamole inspirado en la cocina asiática?" 0.55 La Búsqueda de Google puede proporcionar una respuesta fundamentada, pero no es estrictamente necesaria; el conocimiento del modelo puede ser suficiente.
"¿Qué es Agent Builder? "¿Cómo se factura la conexión a tierra en Agent Builder?" 0.72 Requiere que la Búsqueda de Google genere una respuesta bien fundamentada.
"¿Quién ganó el último Gran Premio de Fórmula 1?" 0.97 Requiere que la Búsqueda de Google genere una respuesta bien fundamentada.

En tu solicitud de generación de respuestas fundamentadas, puedes especificar una configuración de recuperación dinámica con un umbral. El umbral es un valor de punto flotante en el rango [0,1] y su valor predeterminado es 0.7. Si el valor del umbral es cero, la respuesta siempre se basa en la Búsqueda de Google. Para todos los demás valores de umbral, se aplica lo siguiente:

  • Si la puntuación de predicción es mayor o igual que el umbral, la respuesta se basa en la Búsqueda de Google. Un umbral más bajo implica que más instrucciones tienen respuestas que se generan con la fundamentación con la Búsqueda de Google.
  • Si la puntuación de la predicción es inferior al umbral, es posible que el modelo genere la respuesta, pero no se fundamenta en la Búsqueda de Google.

Para encontrar un buen umbral que se adapte a las necesidades de tu empresa, puedes crear un conjunto representativo de las búsquedas que esperas encontrar. Luego, puedes ordenar las consultas según la puntuación de predicción en la respuesta y seleccionar un buen umbral para tu caso de uso.

Fundamenta la respuesta con la Búsqueda de Google

En el siguiente ejemplo, se muestra cómo generar una respuesta basada en una instrucción especificando la Búsqueda de Google como la fuente de información. En este ejemplo, se usa el método generateGroundedContent.

REST

  1. Envía la instrucción en la siguiente solicitud curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
     {
         "googleSearchSource": {
              "dynamicRetrievalConfig": {
                  "predictor":{
                      "threshold": DYNAMIC_RETRIEVAL_THRESHOLD
                  }
              }
         }
     }
    ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.
    • PROMPT_TEXT: Es la instrucción del usuario.
    • SYSTEM_INSTRUCTION: Es un campo opcional para proporcionar un preámbulo o algún contexto adicional.
    • MODEL_ID: Un campo opcional para establecer el ID del modelo de Gemini que deseas usar para generar la respuesta fundamentada. Para obtener una lista de los IDs de modelo disponibles, consulta Modelos compatibles.
    • TEMPERATURE: Es un campo opcional para establecer la temperatura que se usa para el muestreo. Google recomienda una temperatura de 0.0. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_P: un campo opcional para establecer el valor de top-P del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_K: un campo opcional para establecer el valor Top-K del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • DYNAMIC_RETRIEVAL_THRESHOLD: Es un campo opcional para establecer el umbral para invocar la configuración de recuperación dinámica. Es un valor de punto flotante en el rango [0,1]. Si agregas el campo dynamicRetrievalConfig, pero no configuras el campo predictor o threshold, el valor del umbral se establece de forma predeterminada en 0.7. Si no configuras el campo dynamicRetrievalConfig, la respuesta siempre estará conectada a tierra.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How much is Google stock?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(text="Be comprehensive.")
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource(
                    # Optional: For Dynamic Retrieval
                    dynamic_retrieval_config=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration(
                        predictor=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration.DynamicRetrievalPredictor(
                            threshold=0.7
                        )
                    )
                )
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

En el siguiente ejemplo, la solicitud especifica la Búsqueda de Google como la fuente de referencia. En este ejemplo, se usa el método generateGroundedContent. En este ejemplo, también se usa una instrucción del sistema para finalizar la respuesta con un emoji de cara sonriente.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
"contents": [{
  "role": "user",
  "parts": [{
    "text": "What is vertex ai agent builder?"
}]
}],
"systemInstruction": {
   "parts": {
      "text": "Add a smiley emoji after the answer."
   }
},
"groundingSpec": {
  "groundingSources": [
  {
      "googleSearchSource": {
        "dynamicRetrievalConfig": {
               "predictor":{
                   "threshold": 0.6
               }
           }
      }
  }
 ]
},
"generationSpec": {
  "modelId": "gemini-1.5-flash"
}
}
'

Genera una respuesta fundamentada en varios turnos

En la generación de respuestas de varios turnos, en cada solicitud, debes enviar todo el texto que se intercambió entre el usuario y el modelo en todos los turnos anteriores. Esto garantiza la continuidad y mantiene el contexto para generar la respuesta de la instrucción más reciente.

Para obtener una respuesta fundamentada mediante la generación de respuestas de varios turnos, haz lo siguiente:

REST

En los siguientes ejemplos, se muestra cómo enviar texto de indicaciones de seguimiento en varios turnos. En estos ejemplos, se usa el método generateGroundedContent y se basan las respuestas con la Búsqueda de Google. Puedes seguir pasos similares para generar respuestas fundamentadas con otras fuentes de fundamentación.

  1. Envía la primera instrucción en la siguiente solicitud curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_1"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.
    • PROMPT_TEXT_TURN_1: Es el texto de la instrucción del usuario en el primer turno.
    • SYSTEM_INSTRUCTION_TURN_1: Es un campo opcional para proporcionar un preámbulo o algún contexto adicional. Para la generación de respuestas de varios turnos, debes proporcionar las instrucciones del sistema para cada turno.
    • MODEL_ID: Un campo opcional para establecer el ID del modelo de Gemini que deseas usar para generar la respuesta fundamentada. Para obtener una lista de los IDs de modelo disponibles, consulta Modelos compatibles.
    • TEMPERATURE: Es un campo opcional para establecer la temperatura que se usa para el muestreo. Google recomienda una temperatura de 0.0. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_P: un campo opcional para establecer el valor de top-P del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_K: un campo opcional para establecer el valor Top-K del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
  2. Envía la segunda instrucción como un mensaje de seguimiento. Agrega la primera instrucción del usuario seguida de su respuesta correspondiente del modelo para el contexto.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "ANSWER_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_2"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_2"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.
    • PROMPT_TEXT_TURN_1: Es el texto de la instrucción del usuario en el primer turno.
    • ANSWER_TEXT_TURN_1: El texto de la respuesta del modelo en el primer turno.
    • PROMPT_TEXT_TURN_2: Es el texto de la instrucción del usuario en el segundo turno.
    • SYSTEM_INSTRUCTION_TURN_2: Es un campo opcional para proporcionar un preámbulo o algún contexto adicional. Para la generación de respuestas de varios turnos, debes proporcionar las instrucciones del sistema para cada turno.
    • MODEL_ID: Un campo opcional para establecer el ID del modelo de Gemini que deseas usar para generar la respuesta fundamentada. Para obtener una lista de los IDs de modelo disponibles, consulta Modelos compatibles.
    • TEMPERATURE: Es un campo opcional para establecer la temperatura que se usa para el muestreo. Google recomienda una temperatura de 0.0. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_P: un campo opcional para establecer el valor de top-P del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_K: un campo opcional para establecer el valor Top-K del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
  3. Repite este proceso para obtener más respuestas de seguimiento. En cada turno, agrega todas las instrucciones anteriores del usuario, seguidas de sus respuestas correspondientes del modelo.

Ejemplo de generación de respuestas de varios turnos

En el siguiente ejemplo, la solicitud especifica tres textos de hechos intercalados como la fuente de información para generar respuestas en dos turnos. En esta muestra, se usa el método generateGroundedContent. En este ejemplo, también se usa una instrucción del sistema para finalizar la respuesta en el primer turno con un emoji de sonrisa.

REST

  1. Envía la primera instrucción en la siguiente solicitud curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     }
    ],
    "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
    },
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    
  2. Envía la segunda instrucción como un mensaje de seguimiento. Agrega la primera instrucción del usuario seguida de su respuesta correspondiente del modelo para el contexto.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.  😊 \n"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "Rephrase the answer in an abstracted list."
         }
       ]
     }
    ],
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    

Cómo transmitir respuestas fundamentadas

Puedes transmitir las respuestas del modelo. Esto es útil en aquellos casos de uso en los que la respuesta es especialmente larga y enviar toda la respuesta a la vez causa una demora significativa. La transmisión de la respuesta divide la respuesta en un array de varios candidatos que contienen partes secuenciales del texto de la respuesta.

Para obtener una respuesta transmitida y fundamentada, haz lo siguiente:

REST

En el siguiente ejemplo, se muestra cómo transmitir una respuesta fundamentada. En este ejemplo, se usa el método streamGenerateGroundedContent y se basa la respuesta en la Búsqueda de Google sin la configuración de recuperación dinámica. Puedes seguir pasos similares para generar respuestas fundamentadas con otras fuentes de fundamentación.

  1. Envía la instrucción en la siguiente solicitud curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global:streamGenerateGroundedContent" \
    -d '
    [
    {
     "contents": [
       {
         "role": "user",
         "parts": [
           {
             "text": "PROMPT_TEXT"
           }
         ]
       }
     ],
     "systemInstruction": {
         "parts": {
             "text": "SYSTEM_INSTRUCTION"
         }
     },
     "groundingSpec": {
       "groundingSources": [
         {
           "googleSearchSource": {}
         }
       ]
     },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }
    ]'
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.
    • PROMPT_TEXT: Es la instrucción del usuario.
    • SYSTEM_INSTRUCTION: Es un campo opcional para proporcionar un preámbulo o algún contexto adicional.
    • MODEL_ID: Un campo opcional para establecer el ID del modelo de Gemini que deseas usar para generar la respuesta fundamentada. Para obtener una lista de los IDs de modelo disponibles, consulta Modelos compatibles.
    • TEMPERATURE: Es un campo opcional para establecer la temperatura que se usa para el muestreo. Google recomienda una temperatura de 0.0. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_P: un campo opcional para establecer el valor de top-P del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.
    • TOP_K: un campo opcional para establecer el valor Top-K del modelo. Para obtener más información, consulta Parámetros del modelo de Gemini.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="Summarize how to delete a data store in Vertex AI Agent Builder?"
                )
            ],
        )
    ],
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource()
            ),
        ]
    ),
)
responses = client.stream_generate_grounded_content(iter([request]))

for response in responses:
    # Handle the response
    print(response)

Ejemplo para transmitir respuestas fundamentadas

En el siguiente ejemplo, la solicitud especifica la Búsqueda de Google como la fuente de origen para transmitir una respuesta sin la configuración de recuperación dinámica. La respuesta transmitida se distribuye en varios candidatos de respuesta. En este ejemplo, se usa el método streamGenerateGroundedContent.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/123456/locations/global:streamGenerateGroundedContent" \
-d '
[
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "Summarize How to delete a data store in Vertex AI Agent Builder?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}
]'

Modelos compatibles

Los siguientes modelos admiten la fundamentación:

  • Gemini 1.5 Pro solo con entrada de texto
  • Gemini 1.5 Flash solo con entrada de texto
  • Gemini 1.0 Pro solo con entrada de texto

Para obtener más información sobre estos modelos de Gemini, consulta Versiones y ciclo de vida de los modelos de Gemini.

Cuando llames al método generateGroundedContent, puedes usar los siguientes ID de modelos:

ID de modelo Actualización automática
default
gemini-1.0-pro
gemini-1.0-pro-001 No
gemini-1.0-pro-002 No
gemini-1.5-flash
gemini-1.5-flash-001 No
gemini-1.5-pro
gemini-1.5-pro-001 No

¿Qué sigue?

Aprende a usar el método de generación de respuestas fundamentadas con otras APIs de RAG para generar respuestas fundamentadas a partir de datos no estructurados.