Por padrão, os modelos do Gemini retornam respostas como texto não estruturado. 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. Assim, é possível extrair dados diretamente da saída do modelo com menos pós-processamento.
Veja alguns exemplos:
Garantir 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. Assim, é mais fácil analisar e mostrar essas informações na interface do app.Restringir a forma como um modelo pode responder durante tarefas de classificação.
Por exemplo, você pode permitir 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 que o modelo produz (que podem ter um grau de variabilidade comogood,positive,negativeoubad).
Nesta página, descrevemos como gerar saída estruturada (como JSON e enums) nas suas 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 inCloudParams e onDeviceParams para configurar o modelo e gerar uma 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 oresponseConstraintque você quer que o modelo use.
Saída JSON
O exemplo a seguir adapta o
exemplo de saída JSON geral
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 de saída de enumeração geral 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
}
}
});
// ...