Modele Gemini domyślnie zwracają odpowiedzi w postaci nieustrukturyzowanego tekstu. W niektórych przypadkach użycia wymagany jest jednak tekst strukturalny, np. JSON. Możesz na przykład używać odpowiedzi do innych zadań na kolejnych etapach, które wymagają ustalonego schematu danych.
Aby mieć pewność, że wygenerowane dane wyjściowe modelu zawsze są zgodne z określonym schematem, możesz zdefiniować schemat, który działa jak plan odpowiedzi modelu. Dzięki temu możesz bezpośrednio wyodrębniać dane z wyników modelu, co wymaga mniej przetwarzania końcowego.
Oto przykłady:
Upewnij się, że odpowiedź modelu zawiera prawidłowy kod JSON i jest zgodna z podanym schematem.
Na przykład model może generować uporządkowane wpisy dotyczące przepisów, które zawsze zawierają nazwę przepisu, listę składników i kroki. Dzięki temu możesz łatwiej analizować i wyświetlać te informacje w interfejsie aplikacji.Ograniczanie sposobu, w jaki model może odpowiadać podczas zadań klasyfikacji.
Możesz na przykład poprosić model o dodanie do tekstu określonego zestawu etykiet (np. określonego zestawu wyliczeń, takich jakpositiveinegative), a nie etykiet generowanych przez model (które mogą mieć pewien stopień zmienności, np.good,positive,negativelubbad).
Z tego artykułu dowiesz się, jak generować dane strukturalne (np. JSON i wyliczenia) w przypadku aplikacji hybrydowych.
Zanim zaczniesz
Upewnij się, że masz za sobą przewodnik po tworzeniu środowisk hybrydowych.
Konfigurowanie uporządkowanych danych wyjściowych
Generowanie danych wyjściowych o strukturze (takich jak JSON i wyliczenia) jest obsługiwane w przypadku wnioskowania z użyciem modeli hostowanych w chmurze i na urządzeniu.
W przypadku wnioskowania hybrydowego użyj obu tych elementów:inCloudParams i onDeviceParams, aby skonfigurować model tak, aby odpowiadał w formacie strukturalnym. W przypadku pozostałych trybów używaj tylko odpowiedniej konfiguracji.
W przypadku
inCloudParams: określ odpowiedni parametrresponseMimeType(np.application/json) oraz parametrresponseSchema, którego ma używać model.W przypadku
onDeviceParams: określresponseConstraint, którego ma używać model.
Dane wyjściowe JSON
W tym przykładzie dostosowano ogólny przykład danych wyjściowych JSON do wnioskowania hybrydowego (w tym przypadku 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
}
}
});
// ...
Wynik w formie wyliczenia
W tym przykładzie dostosowujemy ogólny przykład danych wyjściowych wyliczenia do wnioskowania hybrydowego (w tym przykładzie 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
}
}
});
// ...