Modele Gemini domyślnie zwracają odpowiedzi w postaci nieuporządkowanego tekstu. Niektóre przypadki użycia wymagają jednak tekstu uporządkowanego (np. JSON lub typów wyliczeniowych). Możesz na przykład używać odpowiedzi do innych zadań podrzędnych, które wymagają ustalonego schematu danych.
Aby mieć pewność, że dane wyjściowe wygenerowane przez model zawsze są zgodne z określonym schematem, możesz zdefiniować schemat, który działa jak plan odpowiedzi modelu. Możesz wtedy bezpośrednio wyodrębnić dane z danych wyjściowych modelu przy mniejszym przetwarzaniu końcowym.
Oto kilka przykładowych przypadków użycia:
Upewnij się, że odpowiedź modelu generuje 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 typów wyliczeniowych, takich jakpositiveinegative), a nie etykiet, które model generuje (które mogą mieć pewien stopień zmienności, np.good,positive,negativelubbad).
Na tej stronie opisujemy, jak generować uporządkowane dane wyjściowe (takie jak JSON i typy wyliczeniowe) w hybrydowych aplikacjach internetowych.
Przejdź do danych wyjściowych JSON Przejdź do danych wyjściowych typu wyliczeniowego
Konfiguracja uporządkowanych danych wyjściowych
Generowanie uporządkowanych danych wyjściowych (takich jak JSON i typy wyliczeniowe) jest obsługiwane w przypadku wnioskowania przy użyciu modeli hostowanych w chmurze i na urządzeniu.
Hybrydowe tryby wnioskowania: skonfiguruj zarówno
inCloudParams, jak ionDeviceParams, aby model zwracał ustrukturyzowane dane wyjściowe niezależnie od tego, czy wnioskowanie jest wykonywane w chmurze, czy na urządzeniu:W przypadku modeli na urządzeniu: określ
responseConstraintwonDeviceParams, używając schematu utworzonego za pomocą metod pomocniczychSchemalub zwykłego schematu JSON.W przypadku modeli hostowanych w chmurze: określ
responseMimeType(application/jsonw przypadku JSON lubtext/x.enumw przypadku typów wyliczeniowych) iresponseSchemawinCloudParams.
Tryby wnioskowania niehybrydowego: używaj tylko odpowiedniej konfiguracji opisanej powyżej.
Zanim zaczniesz
|
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dotyczące tego dostawcy. |
Upewnij się, że masz za sobą przewodnik dla początkujących dotyczący tworzenia środowisk hybrydowych.
Przejdź do danych wyjściowych JSON Przejdź do danych wyjściowych typu wyliczeniowego
Dane wyjściowe JSON
Poniższe przykłady dostosowują ogólny przykład danych wyjściowych JSON do wnioskowania hybrydowego (np. PREFER_ON_DEVICE).
W scenariuszu przedstawionym w tych przykładach model generuje listę profili postaci do opowiadania fantasy z uporządkowanymi atrybutami, takimi jak imię, wiek, gatunek i opcjonalne akcesoria.
Schematy odpowiedzi możesz definiować na 2 sposoby:
Metody pomocnicze Firebase
Schema(zalecane): używaj metod pomocniczych (takich jakSchema.object()iSchema.enumString()), aby pisać zwięzłe, kompaktowe schematy bezpośrednio w kodzie bez dodatkowego kodu stałego.Zwykły schemat JSON: użyj standardowego obiektu schematu JSON, jeśli masz już definicje schematów, udostępniasz schematy na różnych platformach lub w usługach backendu albo importujesz schematy z plików JSON.
Przykład 1. Korzystanie z metod pomocniczych Firebase Schema
W tym przykładzie użyto metod pomocniczych Schema (takich jak Schema.object, Schema.array, Schema.string i Schema.number) udostępnianych przez pakiet SDK Firebase AI Logic do definiowania schematu obiektu.
|
Zanim wypróbujesz ten przykład, wykonaj czynności opisane w sekcji Zanim zaczniesz tego przewodnika, aby skonfigurować projekt i aplikację. W tej sekcji klikniesz też przycisk wybranego dostawcy Gemini API, aby wyświetlić na tej stronie treści dotyczące tego dostawcy. |
import { initializeApp } from "firebase/app";
import {
getAI,
getGenerativeModel,
GoogleAIBackend,
InferenceMode,
Schema
} from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Define a schema using the `Schema` helper methods.
// Optional properties are specified in optionalProperties.
const jsonSchema = Schema.object({
properties: {
characters: Schema.array({
items: Schema.object({
properties: {
name: Schema.string(),
age: Schema.number(),
species: Schema.string(),
accessory: Schema.string()
},
optionalProperties: ["accessory"]
})
})
}
});
// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
// For cloud-hosted models, specify MIME type and response schema.
inCloudParams: {
model: "CLOUD_MODEL_NAME",
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
}
},
// For on-device models, pass the schema as the response constraint.
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
const prompt = "Create profiles for some characters for a fantasy story.";
// Generate the structured output.
const result = await model.generateContent(prompt);
// Access the generated JSON string conforming to the schema from response.text().
console.log(result.response.text());
// Parse the JSON string into a JavaScript object.
console.log(JSON.parse(result.response.text()));
Przykład 2. Użycie zwykłego schematu JSON
W tym przykładzie schemat jest definiowany tylko za pomocą formatu JSON.
|
Zanim wypróbujesz ten przykład, wykonaj czynności opisane w sekcji Zanim zaczniesz tego przewodnika, aby skonfigurować projekt i aplikację. W tej sekcji klikniesz też przycisk wybranego dostawcy Gemini API, aby wyświetlić na tej stronie treści dotyczące tego dostawcy. |
import { initializeApp } from "firebase/app";
import {
getAI,
getGenerativeModel,
GoogleAIBackend,
InferenceMode
} from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Define the schema as a plain JSON object.
// Properties are required by default unless omitted from the required array.
const jsonSchema = {
type: "object",
properties: {
characters: {
type: "array",
items: {
type: "object",
properties: {
name: {
type: "string",
nullable: false
},
age: {
type: "number",
nullable: false
},
species: {
type: "string",
nullable: false
},
accessory: {
type: "string",
nullable: true
}
},
nullable: false,
required: [
"name",
"age",
"species"
]
},
nullable: false
}
},
nullable: false,
required: [
"characters"
]
};
// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
// For cloud-hosted models, specify MIME type and response schema.
inCloudParams: {
model: "CLOUD_MODEL_NAME",
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
}
},
// For on-device models, pass the schema as the response constraint.
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
const prompt = "Create profiles for some characters for a fantasy story.";
// Generate the structured output.
const result = await model.generateContent(prompt);
// Access the generated JSON string conforming to the schema from response.text().
console.log(result.response.text());
// Parse the JSON string into a JavaScript object.
console.log(JSON.parse(result.response.text()));
Dane wyjściowe typu wyliczeniowego
Poniższe przykłady dostosowują ogólny przykład danych wyjściowych typu wyliczeniowego do wnioskowania hybrydowego (np. PREFER_ON_DEVICE).
W scenariuszu dla tych przykładów model klasyfikuje opis filmu, wybierając jeden gatunek ze wstępnie zdefiniowanej listy dozwolonych opcji (drama, comedy lub documentary).
Schematy odpowiedzi możesz definiować na 2 sposoby:
Metody pomocnicze Firebase
Schema(zalecane): używaj metod pomocniczych (takich jakSchema.object()iSchema.enumString()), aby pisać zwięzłe, kompaktowe schematy bezpośrednio w kodzie bez dodatkowego powtarzalnego kodu.Zwykły schemat JSON: użyj standardowego obiektu schematu JSON, jeśli masz już definicje schematów, udostępniasz schematy na różnych platformach lub w usługach backendu albo importujesz schematy z plików JSON.
Przykład 1. Korzystanie z metod pomocniczych Firebase Schema
W tym przykładzie użyto metody pomocniczej Schema.enumString udostępnianej przez pakiet SDK Firebase AI Logic do definiowania dozwolonych wartości typu wyliczeniowego.
|
Zanim wypróbujesz ten przykład, wykonaj czynności opisane w sekcji Zanim zaczniesz tego przewodnika, aby skonfigurować projekt i aplikację. W tej sekcji klikniesz też przycisk wybranego dostawcy Gemini API, aby wyświetlić na tej stronie treści dotyczące tego dostawcy. |
import { initializeApp } from "firebase/app";
import {
getAI,
getGenerativeModel,
GoogleAIBackend,
InferenceMode,
Schema
} from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Define an enum schema using the `Schema` helper method with allowed string values.
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"]
});
// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
// For cloud-hosted models, specify MIME type and response schema.
inCloudParams: {
model: "CLOUD_MODEL_NAME",
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
}
},
// For on-device models, pass the enum schema as the response constraint.
onDeviceParams: {
promptOptions: {
responseConstraint: enumSchema
}
}
});
const prompt = `The film aims to educate and inform viewers about real-life
subjects, events, or people. It offers a factual record of a particular topic
by combining interviews, historical footage, and narration. The primary purpose
of a film is to present information and provide insights into various aspects
of reality.`;
// Generate the structured enum output.
const result = await model.generateContent(prompt);
// Access the selected enum value string from response.text().
console.log(result.response.text());
Przykład 2. Użycie zwykłego schematu JSON
W tym przykładzie schemat typu wyliczeniowego jest definiowany tylko za pomocą formatu JSON.
|
Zanim wypróbujesz ten przykład, wykonaj czynności opisane w sekcji Zanim zaczniesz tego przewodnika, aby skonfigurować projekt i aplikację. W tej sekcji klikniesz też przycisk wybranego dostawcy Gemini API, aby wyświetlić na tej stronie treści dotyczące tego dostawcy. |
import { initializeApp } from "firebase/app";
import {
getAI,
getGenerativeModel,
GoogleAIBackend,
InferenceMode
} from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Define the enum schema as a plain JSON object.
const enumSchema = {
type: "string",
enum: ["drama", "comedy", "documentary"]
};
// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
// For cloud-hosted models, specify MIME type and response schema.
inCloudParams: {
model: "CLOUD_MODEL_NAME",
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
}
},
// For on-device models, pass the enum schema as the response constraint.
onDeviceParams: {
promptOptions: {
responseConstraint: enumSchema
}
}
});
const prompt = `The film aims to educate and inform viewers about real-life
subjects, events, or people. It offers a factual record of a particular topic
by combining interviews, historical footage, and narration. The primary purpose
of a film is to present information and provide insights into various aspects
of reality.`;
// Generate the structured enum output.
const result = await model.generateContent(prompt);
// Access the selected enum value string from response.text().
console.log(result.response.text());
Prześlij opinię o korzystaniu z usługi Firebase AI Logic