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 w innych zadaniach, 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.
Model może na przykład 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 adnotacji z określonym zestawem etykiet (np. określonym zestawem 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 wyjściowe w formacie strukturalnym (np. JSON i wyliczenia) w przypadku hybrydowych interfejsów aplikacji internetowych.
Zanim zaczniesz
Upewnij się, że masz za sobą przewodnik dla początkujących po tworzeniu środowisk hybrydowych.
Konfigurowanie uporządkowanych danych wyjściowych
Generowanie danych wyjściowych o strukturze (np. 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
}
}
});
// ...