Puedes garantizar que el resultado generado por un modelo siempre cumpla con un esquema específico para que recibas respuestas con formato coherente. Por ejemplo, es posible que tengas un esquema de datos establecido que usas para otras tareas. Si haces que el modelo siga el mismo esquema, puedes extraer datos directamente del resultado del modelo sin ningún procesamiento posterior.
Para especificar la estructura del resultado de un modelo, define un esquema de respuesta, que funciona como un modelo para las respuestas del modelo. Cuando envías una instrucción y, además, incluyes el esquema de respuesta, la respuesta del modelo siempre sigue el esquema que definiste.
Puedes controlar el resultado generado cuando usas los siguientes modelos:
- Gemini 1.5 Pro
- Gemini 1.5 Flash
Para las llamadas a funciones con generación controlada (también conocidas como llamadas a funciones forzadas), consulta Introducción a las llamadas a funciones.
Ejemplos de casos de uso
Un caso de uso para aplicar un esquema de respuesta es garantizar que la respuesta de un modelo genere un JSON válido y cumpla con tu esquema. Los resultados del modelo generativo pueden tener cierto grado de variabilidad, por lo que incluir un esquema de respuesta garantiza que siempre recibas un JSON válido. Por lo tanto, tus tareas descendentes pueden esperar de forma confiable una entrada JSON válida de las respuestas generadas.
Otro ejemplo es restringir la forma en que un modelo puede responder. Por ejemplo, puedes hacer que un modelo annote texto con etiquetas definidas por el usuario, no con etiquetas que produce el modelo. Esta restricción es útil cuando esperas un conjunto específico de etiquetas, como positive
o negative
, y no quieres recibir una combinación de otras etiquetas que podría generar el modelo, como good
, positive
, negative
o bad
.
Consideraciones
En las siguientes consideraciones, se analizan las posibles limitaciones si planeas usar un esquema de respuesta:
- Debes usar la API para definir y usar un esquema de respuesta. No hay compatibilidad con consolas.
- El tamaño de tu esquema de respuesta se considera para el límite de tokens de entrada.
- Solo se admiten ciertos formatos de salida, como
application/json
otext/x.enum
. Para obtener más información, consulta el parámetroresponseMimeType
en la referencia de la API de Gemini. - La generación controlada admite un subconjunto de la referencia del esquema de Vertex AI. Para obtener más información, consulta Campos de esquema compatibles.
Un esquema complejo puede generar un error
InvalidArgument: 400
. La complejidad puede provenir de nombres de propiedades largos, límites de longitud de array largos, enums con muchos valores, objetos con muchas propiedades opcionales o una combinación de estos factores.Si recibes este error con un esquema válido, realiza uno o más de los siguientes cambios para resolverlo:
- Acorta los nombres de las propiedades o enums.
- Compacta los arrays anidados.
- Reduce la cantidad de propiedades con restricciones, como números con límites mínimos y máximos.
- Reduce la cantidad de propiedades con restricciones complejas, como las propiedades con formatos complejos, como
date-time
. - Reduce la cantidad de propiedades opcionales.
- Reduce la cantidad de valores válidos para las enums.
Campos de esquema compatibles
La generación controlada admite los siguientes campos del esquema de Vertex AI. Si usas un campo no compatible, Vertex AI puede controlar tu solicitud, pero ignora el campo.
anyOf
enum
format
items
maximum
maxItems
minimum
minItems
nullable
properties
propertyOrdering
*required
* propertyOrdering
es específicamente para la generación controlada y
no forma parte del esquema de Vertex AI. Este campo define el orden en el que se generan las propiedades. Las propiedades enumeradas deben ser únicas y deben ser claves válidas en el diccionario properties
.
Para el campo format
, Vertex AI admite los siguientes valores: date
, date-time
, duration
y time
. La descripción y el formato de cada valor se describen en el Registro de la Iniciativa de OpenAPI.
Antes de comenzar
Define un esquema de respuesta para especificar la estructura del resultado de un modelo, los nombres de los campos y el tipo de datos esperado para cada campo. Usa solo los campos compatibles que se indican en la sección Consideraciones. Se ignoran todos los demás campos.
Incluye tu esquema de respuesta solo como parte del campo responseSchema
. No
dupliques el esquema en la instrucción de entrada. Si lo haces, el resultado generado podría ser de menor calidad.
Para ver ejemplos de esquemas, consulta la sección Ejemplos de esquemas y respuestas de modelos.
Comportamiento del modelo y esquema de respuesta
Cuando un modelo genera una respuesta, usa el nombre del campo y el contexto de tu instrucción. Por lo tanto, te recomendamos que uses una estructura clara y nombres de campo inequívocos para que tu intención sea clara.
De forma predeterminada, los campos son opcionales, lo que significa que el modelo puede propagar los campos o omitirlos. Puedes configurar los campos según sea necesario para forzar al modelo a proporcionar un valor. Si no hay suficiente contexto en la instrucción de entrada asociada, el modelo genera respuestas principalmente en función de los datos con los que se entrenó.
Si no ves los resultados que esperas, agrega más contexto a tus instrucciones de entrada o revisa tu esquema de respuesta. Por ejemplo, revisa la respuesta del modelo sin generación controlada para ver cómo responde. Luego, puedes actualizar el esquema de respuesta que mejor se adapte al resultado del modelo.
Envía una instrucción con un esquema de respuesta
De forma predeterminada, todos los campos son opcionales, lo que significa que un modelo puede generar una respuesta a un campo. Para forzar al modelo a que siempre genere una respuesta para un campo, configúralo como se requiera.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- GENERATE_RESPONSE_METHOD: El tipo de respuesta que quieres que genere el modelo.
Elige un método que genere cómo quieres que se muestre la respuesta del modelo:
streamGenerateContent
: La respuesta se transmite a medida que se genera para reducir la percepción de latencia para un público humano.generateContent
: La respuesta se muestra después de que se genera por completo.
- LOCATION: La región para procesar la solicitud.
- PROJECT_ID: El ID del proyecto.
- MODEL_ID: el ID del modelo multimodal
que deseas usar. Las opciones son las siguientes:
gemini-1.5-flash
gemini-1.5-pro
- ROLE:
El rol en una conversación asociada con el contenido. Especificar un rol es obligatorio incluso en
casos de uso de un solo turno.
Los valores aceptables son los siguientes:
USER
: especifica el contenido que envías.
- TEXT: Las instrucciones de texto que se incluirán en el mensaje.
- RESPONSE_MIME_TYPE: Es el tipo de formato del texto candidato generado. Para obtener una lista de los valores admitidos, consulta el parámetro
responseMimeType
en la API de Gemini. - RESPONSE_SCHEMA: Es el esquema que debe seguir el modelo cuando genera respuestas. Para obtener más información, consulta la referencia de Esquema.
Método HTTP y URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD
Cuerpo JSON de la solicitud:
{ "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, "generation_config": { "responseMimeType": "RESPONSE_MIME_TYPE", "responseSchema": RESPONSE_SCHEMA, } }
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"
PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Ejemplo del comando curl
LOCATION="us-central1"
MODEL_ID="gemini-1.5-pro"
PROJECT_ID="test-project"
GENERATE_RESPONSE_METHOD="generateContent"
cat << EOF > request.json
{
"contents": {
"role": "user",
"parts": {
"text": "List a few popular cookie recipes."
}
},
"generation_config": {
"maxOutputTokens": 2048,
"responseMimeType": "application/json",
"responseSchema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"recipe_name": {
"type": "string",
},
},
"required": ["recipe_name"],
},
}
}
}
EOF
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
-d `@request.json`
Esquemas de ejemplo para el resultado JSON
En las siguientes secciones, se muestra una variedad de instrucciones y esquemas de respuesta de muestra. También se incluye una respuesta de modelo de muestra después de cada muestra de código.
- Resume las calificaciones de opiniones en una lista anidada
- Pronostica el clima para cada día de la semana en un array
- Clasifica un producto con una enumeración bien definida
- Identifica objetos en imágenes
Resume las calificaciones de opiniones
En el siguiente ejemplo, se muestra un array de objetos, en el que cada objeto tiene dos propiedades: la calificación y el nombre de un sabor de helado.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ejemplo de respuesta del modelo
candidates { content { role: "model" parts { text: "[\n [\n {\n \"rating\": 4\n },\n {\n \"flavor\": \"Strawberry Cheesecake\"\n },\n {\n \"rating\": 1\n },\n {\n \"flavor\": \"Mango Tango\"\n }\n ]\n] " } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.1139734759926796 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.10070161521434784 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.13695430755615234 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.12241825461387634 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.11676400154829025 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.05310790613293648 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.10521054267883301 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.08299414813518524 } } usage_metadata { prompt_token_count: 61 candidates_token_count: 66 total_token_count: 127 }
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Pronostica el clima para cada día de la semana
En el siguiente ejemplo, se muestra un objeto forecast
para cada día de la semana que incluye un array de propiedades, como la temperatura y el nivel de humedad esperados para el día. Algunas propiedades se establecen como anulables para que el modelo pueda mostrar un valor nulo cuando no tenga suficiente contexto para generar una respuesta significativa. Esta estrategia ayuda a reducir las alucinaciones.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ejemplo de respuesta del modelo
candidates { content { role: "model" parts { text: "{\"forecast\": [{\"Day\": \"Sunday\", \"Forecast\": \"sunny\", \"Humidity\": \"50%\", \"Temperature\": 77, \"Wind Speed\": 10}, {\"Day\": \"Monday\", \"Forecast\": \"partly cloudy\", \"Humidity\": null, \"Temperature\": 72, \"Wind Speed\": 15}, {\"Day\": \"Tuesday\", \"Forecast\": \"rain showers\", \"Humidity\": \"70%\", \"Temperature\": 64, \"Wind Speed\": null}, {\"Day\": \"Wednesday\", \"Forecast\": \"thunderstorms\", \"Humidity\": null, \"Temperature\": 68, \"Wind Speed\": null}, {\"Day\": \"Thursday\", \"Forecast\": \"cloudy\", \"Humidity\": \"60%\", \"Temperature\": 66, \"Wind Speed\": null}, {\"Day\": \"Friday\", \"Forecast\": \"partly cloudy\", \"Humidity\": null, \"Temperature\": 73, \"Wind Speed\": 12}, {\"Day\": \"Saturday\", \"Forecast\": \"sunny\", \"Humidity\": \"40%\", \"Temperature\": 80, \"Wind Speed\": 8}]}" } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.1037486344575882 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.09670579433441162 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.18126320838928223 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.10052486509084702 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.15960998833179474 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.09518112242221832 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.1388116478919983 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.10539454221725464 } } usage_metadata { prompt_token_count: 280 candidates_token_count: 249 total_token_count: 529 }
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Clasifica un producto
En el siguiente ejemplo, se incluyen enums en las que el modelo debe clasificar el tipo y la condición de un objeto a partir de una lista de valores determinados.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ejemplo de respuesta del modelo
candidates { content { role: "model" parts { text: " [{\n \"item_category\": \"winter apparel\",\n \"subcategory\": \"coat\",\n \"to_discard\": 1\n }] " } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.08945459872484207 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.13753245770931244 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.19208428263664246 severity: HARM_SEVERITY_LOW severity_score: 0.23810701072216034 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.07585817575454712 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.04336579889059067 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.12667709589004517 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.07396338135004044 } } usage_metadata { prompt_token_count: 38 candidates_token_count: 33 total_token_count: 71 }
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Identifica objetos en imágenes
En el siguiente ejemplo, se identifican objetos de dos imágenes que se almacenan en Cloud Storage.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ejemplo de respuesta del modelo
candidates { content { role: "model" parts { text: "[\n [\n {\n \"object\": \"globe model\"\n },\n {\n \"object\": \"tablet computer\"\n },\n {\n \"object\": \"shopping cart\"\n },\n {\n \"object\": \"Eiffel Tower model\"\n },\n {\n \"object\": \"airplane model\"\n },\n {\n \"object\": \"coffee cup\"\n },\n {\n \"object\": \"computer keyboard\"\n },\n {\n \"object\": \"computer mouse\"\n },\n {\n \"object\": \"passport\"\n },\n {\n \"object\": \"sunglasses\"\n },\n {\n \"object\": \"US Dollar bills\"\n },\n {\n \"object\": \"notepad\"\n },\n {\n \"object\": \"pen\"\n }\n ],\n [\n {\n \"object\": \"watering can\"\n },\n {\n \"object\": \"oregano\"\n },\n {\n \"object\": \"flower pot\"\n },\n {\n \"object\": \"flower pot\"\n },\n {\n \"object\": \"gardening gloves\"\n },\n {\n \"object\": \"hand rake\"\n },\n {\n \"object\": \"hand trowel\"\n },\n {\n \"object\": \"grass\"\n }\n ]\n] " } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.1872812658548355 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.16357900202274323 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: LOW probability_score: 0.37920594215393066 severity: HARM_SEVERITY_LOW severity_score: 0.29320207238197327 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.14175598323345184 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.12074951827526093 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.12241825461387634 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.0955180674791336 } } usage_metadata { prompt_token_count: 525 candidates_token_count: 333 total_token_count: 858 }
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Esquema de ejemplo para el resultado de enum
En el siguiente ejemplo, se identifica el género de una película según su descripción. El resultado es un valor de enumeración de texto sin formato que el modelo selecciona de una lista de valores que se definen en el esquema de respuesta.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ejemplo de respuesta del modelo
candidates { content { role: "model" parts { text: "documentary" } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.051025390625 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.08056640625 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.1416015625 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.068359375 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.11572265625 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.0439453125 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.099609375 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.146484375 } avg_logprobs: -8.783838711678982e-05 } usage_metadata { prompt_token_count: 33 candidates_token_count: 2 total_token_count: 35 }
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.