Модели Gemini по умолчанию возвращают ответы в виде неструктурированного текста. Однако в некоторых случаях требуется структурированный текст (например, JSON или перечисления). Например, вы можете использовать ответ для других задач, требующих установленной схемы данных.
Чтобы гарантировать, что выходные данные модели всегда соответствуют определенной схеме, можно определить схему , которая работает как шаблон для ответов модели. Затем можно напрямую извлекать данные из выходных данных модели с минимальной постобработкой.
Вот несколько примеров использования:
Убедитесь, что ответ модели генерирует корректный JSON и соответствует предоставленной вами схеме.
Например, модель может генерировать структурированные записи для рецептов, которые всегда включают название рецепта, список ингредиентов и этапы приготовления. Затем вы можете проще анализировать и отображать эту информацию в пользовательском интерфейсе вашего приложения.Ограничить возможности модели при выполнении задач классификации.
Например, модель может аннотировать текст определенным набором меток (например, определенным набором перечислений, таких какpositiveиnegative), а не метками, которые модель генерирует сама (которые могут иметь определенную степень вариативности, например,good»,positive,negativeилиbad»).
На этой странице описано, как генерировать структурированный вывод (например, в формате JSON и перечисления) в гибридных веб-приложениях.
Перейти к выводу JSON Перейти к выводу перечисления
Настройка структурированного вывода
Для вывода результатов с использованием как облачных, так и локальных моделей поддерживается генерация структурированных выходных данных (например, в формате JSON и перечислений).
Гибридные режимы вывода : Настройте параметры
inCloudParamsиonDeviceParamsтаким образом, чтобы модель выдавала структурированный результат независимо от того, выполняется ли вывод в облаке или на устройстве:Для моделей, устанавливаемых на устройстве : укажите
responseConstraintвonDeviceParams, используя либо схему, созданную с помощью вспомогательных методовSchema, либо обычную JSON-схему.Для моделей, размещенных в облаке : укажите
responseMimeType(application/jsonдля JSON илиtext/x.enumдля перечислений) иresponseSchemaвinCloudParams.
Негибридные режимы вывода : используйте только соответствующую конфигурацию, описанную выше.
Прежде чем начать
Чтобы просмотреть контент и код, относящиеся к вашему поставщику API Gemini , нажмите на него. |
Убедитесь, что вы завершили руководство по началу работы с созданием гибридных приложений .
Перейти к выводу JSON Перейти к выводу перечисления
вывод в формате JSON
В следующих примерах общий пример вывода в формате JSON адаптирован для учета гибридного вывода (например, PREFER_ON_DEVICE ).
В приведенных примерах модель генерирует список профилей персонажей для фэнтезийной истории со структурированными атрибутами, такими как имя, возраст, вид и дополнительные аксессуары.
Вы можете определить схемы ответов, используя один из следующих подходов:
Вспомогательные методы Firebase
Schema(рекомендуется) : Используйте вспомогательные методы (например,Schema.object()иSchema.enumString()), чтобы писать лаконичные, компактные схемы непосредственно в коде без лишнего шаблонного кода.Простая JSON-схема : используйте стандартный объект JSON Schema, если у вас уже есть существующие определения схем, вы используете общие схемы на разных платформах или в разных бэкэнд-сервисах, или импортируете схемы из JSON-файлов.
Пример 1: Использование вспомогательных методов Firebase Schema
В этом примере для определения схемы объекта используются вспомогательные методы Schema (такие как Schema.object , Schema.array , Schema.string и Schema.number ), предоставляемые SDK Firebase AI Logic .
| Прежде чем опробовать этот пример, выполните раздел «Перед началом работы » этого руководства, чтобы настроить свой проект и приложение. В этом разделе вам также нужно будет нажать кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, относящийся к данному поставщику . |
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()));
Пример 2: Использование простой JSON-схемы
В этом примере схема определяется исключительно с использованием формата JSON.
| Прежде чем опробовать этот пример, выполните раздел «Перед началом работы » этого руководства, чтобы настроить свой проект и приложение. В этом разделе вам также нужно будет нажать кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, относящийся к данному поставщику . |
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()));
Вывод перечисления
В следующих примерах общий пример вывода перечисления адаптирован для учета гибридного вывода (например, PREFER_ON_DEVICE ).
В приведенных примерах модель классифицирует описание фильма, выбирая один жанр из предопределенного списка допустимых вариантов ( drama , comedy или documentary ).
Вы можете определить схемы ответов, используя один из следующих подходов:
Вспомогательные методы Firebase
Schema(рекомендуется) : Используйте вспомогательные методы (например,Schema.object()иSchema.enumString()), чтобы писать лаконичные, компактные схемы непосредственно в коде без лишнего шаблонного кода.Простая JSON-схема : используйте стандартный объект JSON Schema, если у вас уже есть существующие определения схем, вы используете общие схемы на разных платформах или в разных бэкэнд-сервисах, или импортируете схемы из JSON-файлов.
Пример 1: Использование вспомогательных методов Firebase Schema
В этом примере для определения допустимых значений перечисления используется вспомогательный метод Schema.enumString предоставляемый Firebase AI Logic SDK.
| Прежде чем опробовать этот пример, выполните раздел «Перед началом работы » этого руководства, чтобы настроить свой проект и приложение. В этом разделе вам также нужно будет нажать кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, относящийся к данному поставщику . |
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());
Пример 2: Использование простой JSON-схемы
В этом примере схема перечисления определяется исключительно с использованием формата JSON.
| Прежде чем опробовать этот пример, выполните раздел «Перед началом работы » этого руководства, чтобы настроить свой проект и приложение. В этом разделе вам также нужно будет нажать кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, относящийся к данному поставщику . |
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());
Оставьте отзыв о вашем опыте использования Firebase AI Logic.