Gemini modelos retornam respostas como texto não estruturado por padrão. No entanto, alguns casos de uso exigem texto estruturado, como JSON. Por exemplo, você pode estar usando a resposta para outras tarefas downstream que exigem um esquema de dados estabelecido.
Para garantir que a saída gerada do modelo sempre siga um esquema específico, defina um esquema, que funciona como um modelo de respostas. Em seguida, você pode extrair dados diretamente da saída do modelo com menos pós-processamento.
Veja alguns exemplos:
Garanta que a resposta de um modelo gere um JSON válido e esteja em conformidade com o esquema fornecido.
Por exemplo, o modelo pode gerar entradas estruturadas para receitas que sempre incluem o nome, a lista de ingredientes e as etapas. Em seguida, você pode analisar e mostrar essas informações com mais facilidade na interface do app.Restrinja a forma como um modelo pode responder durante tarefas de classificação.
Por exemplo, você pode fazer com que o modelo anote o texto com um conjunto específico de rótulos (por exemplo, um conjunto específico de enums comopositiveenegative), em vez de rótulos produzidos pelo modelo (que podem ter um grau de variabilidade comogood,positive,negative, oubad).
Esta página descreve como gerar saída estruturada (como JSON e enums) nas experiências híbridas para apps da Web.
Antes de começar
Conclua o guia para iniciantes sobre como criar experiências híbridas.
Definir a configuração para saída estruturada
A geração de saída estruturada (como JSON e enums) é compatível com a inferência usando modelos hospedados na nuvem e no dispositivo.
Para inferência híbrida, use both
inCloudParams
and
onDeviceParams
para configurar o modelo para responder com saída estruturada. Para os outros modos,
use apenas a configuração aplicável.
Para
inCloudParams: especifique oresponseMimeTypeadequado (por exemplo,application/json) e oresponseSchemaque você quer que o modelo use.Para
onDeviceParams: especifique aresponseConstraintque você quer que o modelo use.
Saída JSON
O exemplo a seguir adapta o
exemplo geral de saída JSON
para acomodar a inferência híbrida (neste exemplo, 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
}
}
});
// ...
Saída de enumeração
O exemplo a seguir adapta o
exemplo geral de saída de enumeração
para acomodar a inferência híbrida (neste exemplo, 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
}
}
});
// ...