De forma predeterminada, los modelos de Gemini devuelven respuestas como texto no estructurado. Sin embargo, algunos casos de uso requieren texto estructurado, como JSON. Por ejemplo, es posible que uses la respuesta para otras tareas posteriores que requieran un esquema de datos establecido.
Para garantizar que el resultado generado por el modelo siempre cumpla con un esquema específico, puedes definir un esquema, que funciona como un modelo para las respuestas del modelo. Luego, puedes extraer datos directamente del resultado del modelo con menos procesamiento posterior.
Estos son algunos ejemplos:
Garantizar que la respuesta de un modelo genere un JSON válido y cumpla con el esquema que proporcionaste
Por ejemplo, el modelo puede generar entradas estructuradas para recetas que siempre incluyen el nombre de la receta, la lista de ingredientes y los pasos. Luego, puedes analizar y mostrar esta información con mayor facilidad en la IU de tu app.Restringe la forma en que un modelo puede responder durante las tareas de clasificación.
Por ejemplo, puedes hacer que el modelo anote texto con un conjunto específico de etiquetas (por ejemplo, un conjunto específico de enumeraciones comopositiveynegative), en lugar de etiquetas que produce el modelo (que podrían tener un grado de variabilidad comogood,positive,negativeobad).
En esta página, se describe cómo generar resultados estructurados (como JSON y enumeraciones) en tus experiencias híbridas para apps web.
Antes de comenzar
Asegúrate de haber completado la guía de introducción para crear experiencias híbridas.
Cómo establecer la configuración para los resultados estructurados
La generación de resultados estructurados (como JSON y enumeraciones) se admite para la inferencia con modelos alojados en la nube y en el dispositivo.
Para la inferencia híbrida, usa inCloudParams y onDeviceParams para configurar el modelo de modo que responda con un resultado estructurado. Para los demás modos, usa solo la configuración aplicable.
Para
inCloudParams: Especifica elresponseMimeTypeadecuado (por ejemplo,application/json) y elresponseSchemaque deseas que use el modelo.Para
onDeviceParams: Especifica elresponseConstraintque quieres que use el modelo.
Salida de JSON
En el siguiente ejemplo, se adapta el ejemplo general de salida en formato JSON para admitir la inferencia híbrida (en este ejemplo, PREFER_ON_DEVICE):
import {
getAI,
getGenerativeModel,
Schema
} from "firebase/ai";
const jsonSchema = Schema.object({
properties: {
characters: Schema.array({
items: Schema.object({
properties: {
name: Schema.string(),
accessory: Schema.string(),
age: Schema.number(),
species: Schema.string(),
},
optionalProperties: ["accessory"],
}),
}),
}
});
const model = getGenerativeModel(ai, {
mode: InferenceMode.PREFER_ON_DEVICE,
inCloudParams: {
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
// ...
Salida de enumeración
En el siguiente ejemplo, se adapta el ejemplo general de salida de enumeración para admitir la inferencia híbrida (en este ejemplo, PREFER_ON_DEVICE):
import {
getAI,
getGenerativeModel,
Schema
} from "firebase/ai";
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
mode: InferenceMode.PREFER_ON_DEVICE,
inCloudParams: {
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: enumSchema
}
}
});
// ...