Como parte de tu experiencia de generación aumentada por recuperación (RAG) en aplicaciones de IA, puedes generar respuestas fundamentadas a las peticiones basándote en las siguientes fuentes:
- Búsqueda de Google: usa la función de fundamentación con la Búsqueda de Google si quieres conectar el modelo con conocimientos mundiales, una amplia gama de temas o información actualizada de Internet. La fundamentación con la Búsqueda de Google admite la recuperación dinámica, que te ofrece 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 petición requiere información sobre eventos recientes y habilita la función de acotación con la Búsqueda de Google. Para obtener más información, consulta Recuperación dinámica.
- Texto insertado: usa la fundamentación con texto insertado para fundamentar la respuesta en fragmentos de texto llamados texto de datos que se proporcionan en la solicitud. Un texto de hechos es una afirmación proporcionada por un usuario que se considera objetiva para una solicitud determinada. El modelo no comprueba la autenticidad del texto de los hechos.
- Almacenes de datos de Vertex AI Search: usa la fundamentación con Vertex AI Search si quieres conectar el modelo a los documentos de tu empresa desde los almacenes de datos de Vertex AI Search.
En esta página se describe cómo generar respuestas fundamentadas basadas en estas fuentes de fundamentación mediante los siguientes métodos:
Generación de respuestas de una sola interacción
Además, puedes transmitir las respuestas del modelo. Generar una respuesta fundamentada mediante streaming 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 las 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 conocer las entradas y salidas, cómo estructurar la solicitud y la terminología relacionada con la generación aumentada por recuperación (RAG).
Términos de RAG
RAG es una metodología que permite a los modelos de lenguaje extenso (LLMs) generar respuestas basadas en la fuente de datos que elijas. Hay dos fases en RAG:
- Recuperación: obtener los datos más relevantes rápidamente puede ser un problema habitual en las búsquedas. Con RAG, puedes obtener rápidamente los datos que son importantes para generar una respuesta.
- Generación: el LLM usa los datos recuperados para generar una respuesta fundamentada.
Por lo tanto, el método de generación de respuestas fundamentadas obtiene los datos 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: el remitente de un texto determinado, que puede ser un usuario (
user
) o un modelo (model
).Texto: cuando el rol es
user
, el texto es una petición; cuando el rol esmodel
, el texto es una respuesta fundamentada. La forma de especificar el rol y el texto en una solicitud se determina de la siguiente manera:- En la generación de respuestas de una sola conversación, el usuario envía el texto de la petición en la solicitud y el modelo envía el texto de la respuesta en la respuesta.
- En el caso de la generación de respuestas en varias fases, la solicitud contiene el par de petición y respuesta de todas las fases anteriores, así como el texto de la petición del usuario para la fase actual. Por lo tanto, en una solicitud de este tipo, el rol es
user
para el texto de la petición ymodel
para el texto de la respuesta.
Instrucción del sistema: preámbulo de tu petición que rige el comportamiento del modelo y modifica el resultado en consecuencia. Por ejemplo, puedes añadir un perfil al texto de la respuesta generada o indicar al modelo que le dé un formato concreto. Para generar respuestas en varias interacciones, debes proporcionar las instrucciones del sistema en cada interacción. Para obtener más información, consulta Usar instrucciones del sistema.
Fuente de fundamentación: la fuente en la que se basa la respuesta. Puede ser una o varias de las siguientes:
Búsqueda de Google: basa las respuestas en los resultados de la Búsqueda de Google. Cuando la fuente de información 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 insertado: basa la respuesta en texto factual que se proporciona en la solicitud. Un texto de hechos es una afirmación proporcionada por un usuario que se considera objetiva para una solicitud determinada. El modelo no comprueba la autenticidad del texto de los hechos. Puedes proporcionar un máximo de 100 textos de hechos en cada fuente de texto insertado. Los textos de hechos se pueden admitir mediante atributos meta, como title, author y URI. Estos atributos meta se devuelven en la respuesta al citar 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 un sitio web como fuente de información.
En una solicitud determinada, puede proporcionar tanto una fuente de texto insertada como 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 basar tus respuestas en los resultados de la Búsqueda de Google, debes enviar una solicitud independiente en la que especifiques la Búsqueda de Google como única fuente de información.
Puedes proporcionar un máximo de 10 fuentes de información en cualquier orden. Por ejemplo, supongamos que proporcionas las fuentes de información con el siguiente recuento, en el siguiente orden, para obtener un total de 10 fuentes de información:
- Tres fuentes de texto insertado, cada una de las cuales puede contener un máximo de 100 textos de hechos
- Seis almacenes de datos de Vertex AI Search
- Una fuente de texto insertado que contenga un máximo de 100 textos de datos
A cada fuente se le asigna un índice en el orden en el que se especifica en la solicitud. Por ejemplo, si ha especificado una combinación de fuentes en su solicitud, el índice de la fuente se asignará como se muestra en la siguiente tabla:
Fuente de fundamentación Índice Texto insertado 1 0 Texto insertado 2 1 Almacén de datos de Vertex AI Search 1 2 Texto insertado #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 la procedencia.
Especificaciones de generación: las especificaciones de configuración del modelo, que incluyen la siguiente información:
ID de modelo: especifica el modelo de Gemini de Vertex AI que se va a usar para generar respuestas. Para ver una lista de los modelos que puedes usar para generar respuestas fundamentadas, consulta Modelos admitidos.
Parámetros del modelo: especifica los parámetros que puedes definir para el modelo que elijas. 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.
Código de idioma: el idioma de la respuesta generada suele coincidir con el idioma de la petición. Si no hay un solo idioma en la petición (por ejemplo, si la petición es muy breve y puede ser válida en varios idiomas), el campo de código de idioma determina el idioma de la respuesta.
Para ver una lista de códigos de idioma, consulta Idiomas.
Latitud y longitud: especifica la latitud y la longitud del usuario. Si la consulta contiene preguntas específicas de una ubicación, como "Busca una cafetería cerca de mí", se utilizan estos campos. Si no se puede determinar el idioma de la consulta y no se ha definido el código de idioma, se usarán la latitud y la longitud para determinar el idioma de la respuesta.
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: 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: una respuesta fundamentada.
Puntuación de fundamentación: valor decimal en el intervalo [0, 1] que indica el grado de fundamentación de una respuesta en las fuentes proporcionadas.
Metadatos de fundamentación: metadatos sobre la fuente de fundamentación. Los metadatos de fundamentación contienen la siguiente información:
Fragmentos de apoyo: una lista de fragmentos que respaldan la respuesta. A cada fragmento de asistencia se le asigna un índice que resulta útil para rastrear la procedencia. Cada fragmento de asistencia contiene lo siguiente:
- Fragmento de texto: parte del texto citado textualmente de la fuente de la que se extrae la respuesta o una parte de la respuesta (denominada texto de la afirmación). Puede que no siempre esté presente en la respuesta.
- Fuente: índice asignado a la fuente en la solicitud.
Metadatos de origen: metadatos sobre el fragmento. En función de la fuente, los metadatos de la fuente pueden ser cualquiera de los siguientes:
- En el caso de una fuente insertada, los metadatos pueden ser los detalles adicionales que se hayan especificado 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 la función de fundamentación con la Búsqueda de Google, cuando se genera un resultado fundamentado, los metadatos contienen una URI que redirige al editor del contenido que se ha usado para generar el resultado fundamentado. Los metadatos también contienen el dominio del editor. Los URIs proporcionados seguirán accesibles durante un máximo de 30 días después de que se genere el resultado fundamentado.
Asistencia para la fundamentación: información de fundamentación de una afirmación en la respuesta. La asistencia para la fundamentación contiene la siguiente información:
- Texto de la afirmación: la respuesta o una parte de la respuesta que se justifica con el texto del fragmento de apoyo.
- Índice del fragmento de asistencia: índice asignado al fragmento de asistencia en el orden en el que aparece en la lista de fragmentos de asistencia.
- Consultas de búsqueda web: las consultas de búsqueda sugeridas para las sugerencias de búsqueda de Google.
- Sugerencias de búsqueda: si recibes sugerencias de búsqueda de Google con una respuesta, esa respuesta es un "Resultado Fundamentado" sujeto a los términos del servicio de Fundamentación con la Búsqueda de Google. Para obtener más información, consulta los Términos del Servicio.
El campo
renderedContent
del camposearchEntryPoint
es el código proporcionado para implementar las sugerencias de búsqueda de Google. Para usar las sugerencias de búsqueda de Google, consulta el artículo Usar sugerencias de búsqueda de Google.
Generar una respuesta fundamentada en una sola conversación
En esta sección se describe cómo generar respuestas basadas en las siguientes fuentes:
Basar la respuesta en texto insertado y en el almacén de datos de Vertex AI Search
En el siguiente ejemplo se muestra cómo enviar texto de petición especificando un texto insertado y un almacén de datos de la Búsqueda de Vertex AI como fuente de fundamentación.
No puedes especificar un almacén de datos de búsqueda de un sitio web como fuente de información.
En este ejemplo se usa el método generateGroundedContent
.
REST
Envía la petició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 }, "user_context": { "languageCode: "LANGUAGE_CODE", "latLng": { "latitude": LATITUDE, "longitude": LONGITUDE }, } }'
Haz los cambios siguientes:
PROJECT_NUMBER
: el número de tu proyecto de Google Cloud .PROMPT_TEXT
: la petición del usuario.SYSTEM_INSTRUCTION
: campo opcional para proporcionar un preámbulo o contexto adicional.FACT_TEXT_N
: el texto insertado para fundamentar la respuesta. Puedes proporcionar un máximo de 100 textos de datos.TITLE_N
: campo opcional para definir el atributo meta del título del texto insertado.URI_N
: campo opcional para definir el atributo meta de URI del texto insertado.AUTHOR_N
: campo opcional para definir el atributo meta del autor del texto insertado.APP_ID_N
: el ID de la aplicación Vertex AI Search.MODEL_ID
: campo opcional para definir el ID del modelo de Gemini que quieras usar para generar la respuesta fundamentada. Para ver una lista de los IDs de modelos disponibles, consulta Modelos admitidos.TEMPERATURE
: campo opcional para definir la temperatura utilizada en el muestreo. Google recomienda una temperatura de 0,0. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_P
: campo opcional para definir el valor de top-P del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_K
: campo opcional para definir el valor de los K elementos principales del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.LANGUAGE_CODE
: campo opcional que se puede usar para definir el idioma de la respuesta generada y del texto del fragmento que se devuelve. Si no se puede determinar el idioma a partir de la consulta, se usa este campo. El valor predeterminado esen
. Para ver una lista de códigos de idioma, consulta Idiomas.LATITUDE
: campo opcional para definir la latitud. Introduce el valor en grados decimales. Por ejemplo,-25.34
.LONGITUDE
: campo opcional para definir la longitud. Introduce el valor en grados decimales. Por ejemplo,131.04
.
Ejemplo de generación de respuestas de una sola interacción basada en texto insertado y Vertex AI Search
En el siguiente ejemplo, la solicitud especifica las siguientes fuentes de información: un dato de texto insertado y un almacén de datos de Búsqueda de Vertex AI. En este ejemplo se usa el método generateGroundedContent
. En este ejemplo también se usa una instrucción del sistema para terminar 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" }, "user_context": { "languageCode: "en", "latLng": { "latitude": 37.422131, "longitude": -122.084801 } } }'
Generar una respuesta fundamentada con la Búsqueda de Google
Puedes basar las respuestas generadas en 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 información de contexto con la Búsqueda de Google. Esto resulta útil cuando la petición no requiere una respuesta basada en la Búsqueda de Google y los modelos compatibles pueden proporcionar una respuesta basada en sus conocimientos sin necesidad de grounding. De esta forma, puedes gestionar la latencia, la calidad y los costes de forma 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, Aplicaciones de IA asigna una puntuación de predicción a la petición. La puntuación de predicción es un valor de punto flotante en el intervalo [0,1]. Su valor depende de si la petición puede beneficiarse de fundamentar la respuesta con la información más actualizada de la Búsqueda de Google. Por lo tanto, una petición que requiere una respuesta basada en los datos más recientes de la Web tiene una puntuación de predicción más alta, mientras que una petición para la que es suficiente una respuesta generada por el modelo tiene una puntuación de predicción más baja.
Aquí tienes ejemplos de algunas peticiones y sus puntuaciones de predicción.
Petición | Puntuación de predicción | Comentario |
---|---|---|
"Escribe un poema sobre peonías" | 0,13 | El modelo puede basarse en sus conocimientos y la respuesta no necesita fundamentación |
"Suggest a toy for a 2yo child" ("Sugiere un juguete para un niño de 2 años") | 0,36 | El modelo puede basarse en sus conocimientos y la respuesta no necesita fundamentación |
"¿Puedes darme una receta de guacamole de inspiración asiática?" | 0,55 | La Búsqueda de Google puede dar una respuesta fundamentada, pero no es estrictamente necesario que lo haga, ya que el modelo puede tener conocimientos suficientes. |
"¿Qué son las aplicaciones de IA? ¿Cómo se factura la fundamentación en las aplicaciones de IA?" | 0,72 | Requiere la Búsqueda de Google para generar una respuesta bien fundamentada |
"¿Quién ha ganado el último Gran Premio de Fórmula 1?" | 0,97 | Requiere la Búsqueda de Google para generar una respuesta bien fundamentada |
En tu solicitud de generación de respuestas fundamentadas, puedes especificar una configuración de extracción dinámica con un umbral. El umbral es un valor de punto flotante en el intervalo [0,1] y tiene el valor predeterminado 0,7. Si el valor del umbral es cero, la respuesta siempre se basa en la Búsqueda de Google. En el resto de los valores de umbral, se aplica lo siguiente:
- Si la puntuación de la predicción es igual o superior al umbral, la respuesta se basa en la Búsqueda de Google. Un umbral más bajo implica que más peticiones tienen respuestas generadas mediante la función de fundamentación con la Búsqueda de Google.
- Si la puntuación de predicción es inferior al umbral, el modelo puede seguir generando la respuesta, pero no se basa en la Búsqueda de Google.
Para encontrar un umbral adecuado a las necesidades de tu empresa, puedes crear un conjunto representativo de consultas que esperes recibir. Después, puedes ordenar las consultas según la puntuación de predicción de la respuesta y seleccionar un umbral adecuado para tu caso práctico.
Basar la respuesta en la Búsqueda de Google
En el siguiente ejemplo se muestra cómo generar una respuesta fundamentada a partir de una petición especificando la Búsqueda de Google como fuente de fundamentación. En este ejemplo se usa el método generateGroundedContent
.
REST
Envía la petició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 }, "user_context": { "languageCode: "LANGUAGE_CODE", "latLng": { "latitude": LATITUDE, "longitude": LONGITUDE }, } }'
Haz los cambios siguientes:
PROJECT_NUMBER
: el número de tu proyecto de Google Cloud .PROMPT_TEXT
: la petición del usuario.SYSTEM_INSTRUCTION
: campo opcional para proporcionar un preámbulo o contexto adicional.DYNAMIC_RETRIEVAL_THRESHOLD
: campo opcional para definir el umbral para invocar la configuración de recuperación dinámica. Es un valor de punto flotante en el intervalo [0,1]. Si añade el campodynamicRetrievalConfig
, pero no define los campospredictor
nithreshold
, el valor predeterminado del umbral será 0,7. Si no defines el campodynamicRetrievalConfig
, la respuesta siempre se basará en información.MODEL_ID
: campo opcional para definir el ID del modelo de Gemini que quieras usar para generar la respuesta fundamentada. Para ver una lista de los IDs de modelos disponibles, consulta Modelos admitidos.TEMPERATURE
: campo opcional para definir la temperatura utilizada en el muestreo. Google recomienda una temperatura de 0,0. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_P
: campo opcional para definir el valor de top-P del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_K
: campo opcional para definir el valor de los K elementos principales del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.LANGUAGE_CODE
: campo opcional que se puede usar para definir el idioma de la respuesta generada y del texto del fragmento que se devuelve. Si no se puede determinar el idioma a partir de la consulta, se usa este campo. El valor predeterminado esen
. Para ver una lista de códigos de idioma, consulta Idiomas.LATITUDE
: campo opcional para definir la latitud. Introduce el valor en grados decimales. Por ejemplo,-25.34
.LONGITUDE
: campo opcional para definir la longitud. Introduce el valor en grados decimales. Por ejemplo,131.04
.
Ejemplo de generación de respuestas en una sola interacción basada en la Búsqueda de Google
En el ejemplo siguiente, la solicitud especifica la Búsqueda de Google como fuente de información. En este ejemplo se usa el método generateGroundedContent
. En este ejemplo también se usa una instrucción del sistema para terminar 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 ai applications?" }] }], "systemInstruction": { "parts": { "text": "Add a smiley emoji after the answer." } }, "groundingSpec": { "groundingSources": [ { "googleSearchSource": { "dynamicRetrievalConfig": { "predictor":{ "threshold": 0.6 } } } } ] }, "generationSpec": { "modelId": "gemini-1.5-flash" } } '
Generar una respuesta fundamentada en varias interacciones
En la generación de respuestas en conversaciones de varias interacciones, en cada solicitud debes enviar todo el texto intercambiado entre el usuario y el modelo en todas las interacciones anteriores. De esta forma, se asegura la continuidad y se mantiene el contexto para generar la respuesta a la última petición.
Para obtener una respuesta fundamentada mediante la generación de respuestas en varias fases, haz lo siguiente:
REST
En los siguientes ejemplos se muestra cómo enviar texto de petición de seguimiento en varias conversaciones. En estas muestras se usa el método generateGroundedContent
y se fundamentan las respuestas con la Búsqueda de Google.
Puedes seguir pasos similares para generar respuestas fundamentadas usando otras fuentes.
Envía la primera petició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 }, "user_context": { "languageCode: "LANGUAGE_CODE", "latLng": { "latitude": LATITUDE, "longitude": LONGITUDE }, } }'
Haz los cambios siguientes:
PROJECT_NUMBER
: el número de tu proyecto de Google Cloud .PROMPT_TEXT_TURN_1
: el texto de la petición del usuario en la primera conversación.SYSTEM_INSTRUCTION_TURN_1
: campo opcional para proporcionar un preámbulo o contexto adicional. Para generar respuestas en varias fases, debes proporcionar las instrucciones del sistema en cada fase.MODEL_ID
: campo opcional para definir el ID del modelo de Gemini que quieras usar para generar la respuesta fundamentada. Para ver una lista de los IDs de modelos disponibles, consulta Modelos admitidos.TEMPERATURE
: campo opcional para definir la temperatura utilizada en el muestreo. Google recomienda una temperatura de 0,0. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_P
: campo opcional para definir el valor de top-P del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_K
: campo opcional para definir el valor de los K elementos principales del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.LANGUAGE_CODE
: campo opcional que se puede usar para definir el idioma de la respuesta generada y del texto del fragmento que se devuelve. Si no se puede determinar el idioma a partir de la consulta, se usa este campo. El valor predeterminado esen
. Para ver una lista de códigos de idioma, consulta Idiomas.LATITUDE
: campo opcional para definir la latitud. Introduce el valor en grados decimales. Por ejemplo,-25.34
.LONGITUDE
: campo opcional para definir la longitud. Introduce el valor en grados decimales. Por ejemplo,131.04
.
Envía la segunda petición como seguimiento. Añade la primera petición del usuario seguida de la respuesta correspondiente del modelo para proporcionar 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 }, "user_context": { "languageCode: "LANGUAGE_CODE", "latLng": { "latitude": LATITUDE, "longitude": LONGITUDE }, } }'
Haz los cambios siguientes:
PROJECT_NUMBER
: el número de tu proyecto de Google Cloud .PROMPT_TEXT_TURN_1
: el texto de la petición del usuario en la primera conversación.ANSWER_TEXT_TURN_1
: el texto de la respuesta del modelo en la primera conversación.PROMPT_TEXT_TURN_2
: el texto de la petición del usuario en el segundo turno.SYSTEM_INSTRUCTION_TURN_2
: campo opcional para proporcionar un preámbulo o contexto adicional. Para generar respuestas en varias fases, debes proporcionar las instrucciones del sistema en cada fase.MODEL_ID
: campo opcional para definir el ID del modelo de Gemini que quieras usar para generar la respuesta fundamentada. Para ver una lista de los IDs de modelos disponibles, consulta Modelos admitidos.TEMPERATURE
: campo opcional para definir la temperatura utilizada en el muestreo. Google recomienda una temperatura de 0,0. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_P
: campo opcional para definir el valor de top-P del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_K
: campo opcional para definir el valor de los K elementos principales del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.LANGUAGE_CODE
: campo opcional que se puede usar para definir el idioma de la respuesta generada y del texto del fragmento que se devuelve. Si no se puede determinar el idioma a partir de la consulta, se usa este campo. El valor predeterminado esen
. Para ver una lista de códigos de idioma, consulta Idiomas.LATITUDE
: campo opcional para definir la latitud. Introduce el valor en grados decimales. Por ejemplo,-25.34
.LONGITUDE
: campo opcional para definir la longitud. Introduce el valor en grados decimales. Por ejemplo,131.04
.
Repite este proceso para obtener más respuestas de seguimiento. En cada turno, añade todas las peticiones anteriores del usuario seguidas de las respuestas correspondientes del modelo.
Ejemplo de generación de respuestas en varias interacciones
En el siguiente ejemplo, la solicitud especifica tres textos de datos insertados como fuente de fundamentación para generar respuestas en dos turnos. En este ejemplo se usa el método generateGroundedContent
. En este ejemplo también se usa una instrucción del sistema para terminar la respuesta en el primer turno con un emoji de cara sonriente.
REST
Envía la primera petició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" } }'
Envía la segunda petición como seguimiento. Añade la primera petición del usuario seguida de la respuesta correspondiente del modelo para proporcionar 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" } }'
Transmitir respuestas fundamentadas
Puedes elegir si quieres transmitir las respuestas del modelo. Esto es útil en aquellos casos prácticos en los que la respuesta es especialmente larga y enviar toda la respuesta de una vez provoca un retraso significativo. Al transmitir la respuesta, se desglosa en una matriz de varios candidatos que contienen partes secuenciales del texto de la respuesta.
Para obtener una respuesta fundamentada y transmitida, 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 usando otras fuentes.
Envía la petició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 }, "user_context": { "languageCode: "LANGUAGE_CODE", "latLng": { "latitude": LATITUDE, "longitude": LONGITUDE }, } } ]'
Haz los cambios siguientes:
PROJECT_NUMBER
: el número de tu proyecto de Google Cloud .PROMPT_TEXT
: la petición del usuario.SYSTEM_INSTRUCTION
: campo opcional para proporcionar un preámbulo o contexto adicional.MODEL_ID
: campo opcional para definir el ID del modelo de Gemini que quieras usar para generar la respuesta fundamentada. Para ver una lista de los IDs de modelos disponibles, consulta Modelos admitidos.TEMPERATURE
: campo opcional para definir la temperatura utilizada en el muestreo. Google recomienda una temperatura de 0,0. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_P
: campo opcional para definir el valor de top-P del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.TOP_K
: campo opcional para definir el valor de los K elementos principales del modelo. Para obtener más información, consulta los parámetros del modelo Gemini.LANGUAGE_CODE
: campo opcional que se puede usar para definir el idioma de la respuesta generada y del texto del fragmento que se devuelve. Si no se puede determinar el idioma a partir de la consulta, se usa este campo. El valor predeterminado esen
. Para ver una lista de códigos de idioma, consulta Idiomas.LATITUDE
: campo opcional para definir la latitud. Introduce el valor en grados decimales. Por ejemplo,-25.34
.LONGITUDE
: campo opcional para definir la longitud. Introduce el valor en grados decimales. Por ejemplo,131.04
.
Ejemplo de streaming de respuestas fundamentadas
En el ejemplo siguiente, la solicitud especifica la Búsqueda de Google como fuente de información para transmitir una respuesta sin la configuración de recuperación dinámica. La respuesta transmitida se distribuye en varias respuestas candidatas. 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 AI Applications?" } ] } ], "groundingSpec": { "groundingSources": [ { "googleSearchSource": {} } ] }, "generationSpec": { "modelId": "gemini-1.5-flash" } } ]'
Modelos admitidos
Los siguientes modelos admiten la fundamentación:
- Gemini 1.5 Pro con entrada de texto únicamente
- Gemini 1.5 Flash con entrada de texto únicamente
Para obtener más información sobre estos modelos de Gemini, consulta Versiones y ciclo de vida de los modelos de Gemini.
Cuando llamas al método generateGroundedContent
, puedes usar los siguientes IDs de modelo:
ID del modelo | Actualizado automáticamente |
---|---|
default |
Sí |
gemini-1.5-flash |
Sí |
gemini-1.5-flash-001 |
No |
gemini-1.5-flash-002 |
No |
gemini-1.5-pro |
Sí |
gemini-1.5-pro-001 |
No |
gemini-1.5-pro-002 |
No |
Siguientes pasos
Consulta cómo usar el método de generación de resultados fundamentados con otras APIs de RAG para generar respuestas fundamentadas a partir de datos no estructurados.