Per impostazione predefinita, i modelli Gemini restituiscono le risposte come testo non strutturato. Tuttavia, alcuni casi d'uso richiedono testo strutturato, come JSON. Ad esempio, potresti utilizzare la risposta per altre attività downstream che richiedono uno schema di dati stabilito.
Per assicurarti che l'output generato dal modello rispetti sempre uno schema specifico, puoi definire uno schema, che funziona come un progetto per le risposte del modello. Potrai quindi estrarre direttamente i dati dall'output del modello con una post-elaborazione ridotta.
Ecco alcuni esempi:
Assicurati che la risposta di un modello produca JSON valido e sia conforme allo schema fornito.
Ad esempio, il modello può generare voci strutturate per le ricette che includono sempre il nome della ricetta, l'elenco degli ingredienti e i passaggi. Potrai quindi analizzare e visualizzare più facilmente queste informazioni nell'interfaccia utente della tua app.Limita il modo in cui un modello può rispondere durante le attività di classificazione.
Ad esempio, puoi fare in modo che il modello annoti il testo con un insieme specifico di etichette (ad esempio, un insieme specifico di enum comepositiveenegative), anziché con le etichette prodotte dal modello (che potrebbero avere un certo grado di variabilità comegood,positive,negativeobad).
Questa pagina descrive come generare output strutturato (come JSON ed enum) nelle esperienze ibride per le app web.
Prima di iniziare
Assicurati di aver completato la guida introduttiva alla creazione di esperienze ibride.
Imposta la configurazione per l'output strutturato
La generazione di output strutturato (come JSON ed enum) è supportata per l'inferenza che utilizza sia modelli ospitati nel cloud sia modelli on-device.
Per l'inferenza ibrida, utilizza sia
inCloudParams
sia
onDeviceParams
per configurare il modello in modo che risponda con output strutturato. Per le altre modalità, utilizza solo la configurazione applicabile.
Per
inCloudParams: specifica ilresponseMimeTypeappropriato (ad esempio,application/json) e ilresponseSchemache vuoi che il modello utilizzi.Per
onDeviceParams: specifica ilresponseConstraintche vuoi che il modello utilizzi.
Output JSON
L'esempio seguente adatta l'
esempio di output JSON generale
per adattarsi all'inferenza ibrida (in questo esempio, 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
}
}
});
// ...
Output enum
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
}
}
});
// ...