Создавайте приложения и функции на базе ИИ с гибридным выводом с помощью Firebase AI Logic . Гибридный вывод позволяет выполнять вывод с использованием моделей на устройстве, если они доступны, и легко переходить к моделям, размещенным в облаке, в противном случае.
В этом выпуске доступен гибридный вывод с использованием клиентского SDK Firebase AI Logic для веб-сайтов с поддержкой вывода на устройстве для Chrome на ПК.
Рекомендуемые варианты использования и поддерживаемые возможности
Рекомендуемые варианты использования:
Использование модели на устройстве для вывода предлагает:
- Повышенная конфиденциальность
- Местный контекст
- Вывод бесплатно
- Оффлайн функциональность
Использование гибридной функциональности обеспечивает:
- Охватите 100% своей аудитории, независимо от доступности модели на устройстве
Поддерживаемые возможности и функции для вывода на устройстве:
- Однократная генерация контента, потоковая и непотоковая передача
- Генерация текста из текстового ввода
- Генерация текста из входных данных текста и изображения, в частности, входных типов изображений JPEG и PNG
- Генерация структурированного вывода, включая JSON и перечисления
Начать
В этом руководстве показано, как начать использовать Firebase AI Logic SDK for Web для выполнения гибридного вывода.
Вывод с использованием модели на устройстве использует API Prompt из Chrome ; тогда как вывод с использованием модели, размещенной в облаке, использует выбранного вами поставщика API Gemini ( API Gemini Developer или API Vertex AI Gemini ).
Шаг 1 : Настройте Chrome и API Prompt для вывода на устройстве
Загрузите последнюю версию Chrome Dev .
Вывод на устройстве доступен в Chrome v138 и выше.
Включите Prompt API для вашего экземпляра Chrome, установив следующие флаги:
-
chrome://flags/#optimization-guide-on-device-model
: установите значение «Включено» . -
chrome://flags/#prompt-api-for-gemini-nano
: установите значение «Включено» .
Узнайте больше об использовании API на локальном хосте в документации Chrome. При желании присоединяйтесь к программе Chrome Early Preview Program (EPP) , чтобы предоставить отзыв.
-
Включите мультимодальную модель на устройстве, установив следующий флаг:
-
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
: установите значение «Включено» .
-
Проверьте API локально:
Перезапустите Chrome.
Откройте Инструменты разработчика > Консоль .
Выполните следующее:
await LanguageModel.availability();
Убедитесь, что вывод
available
,downloading
илиdownloadable
.Если вывод
downloadable
, вы можете начать загрузку модели, выполнивawait LanguageModel.create();
. В противном случае первый запрос на вывод на устройстве запустит загрузку модели в фоновом режиме, что может занять несколько минут.
Шаг 2 : Настройте проект Firebase и подключите свое приложение к Firebase.
Войдите в консоль Firebase , а затем выберите свой проект Firebase.
Если у вас еще нет проекта Firebase, нажмите «Создать проект» , а затем воспользуйтесь одним из следующих вариантов:
Вариант 1 : создайте совершенно новый проект Firebase (и его базовый проект Google Cloud автоматически), введя новое имя проекта на первом шаге рабочего процесса «Создание проекта».
Вариант 2 : «Добавить Firebase» в существующий проект Google Cloud , выбрав имя проекта Google Cloud из раскрывающегося меню на первом шаге рабочего процесса «Создание проекта».
Обратите внимание, что при появлении соответствующего запроса вам не нужно настраивать Google Analytics для использования Firebase AI Logic SDK.
В консоли Firebase перейдите на страницу Firebase AI Logic .
Нажмите «Начать» , чтобы запустить пошаговый рабочий процесс, который поможет вам настроить необходимые API и ресурсы для вашего проекта.
Выберите поставщика " Gemini API ", который вы хотите использовать с Firebase AI Logic SDK. Вы всегда можете настроить и использовать другого поставщика API позже, если захотите.
Gemini Developer API — оплата необязательна (доступно в бесплатном тарифном плане Spark)
Консоль включит необходимые API и создаст ключ API Gemini в вашем проекте. Вы можете настроить выставление счетов позже, если захотите обновить свой тарифный план.Vertex AI Gemini API — требуется выставление счетов (требуется тарифный план Blaze с оплатой по факту использования)
Консоль поможет вам настроить биллинг и включить необходимые API в вашем проекте.
Если в рабочем процессе консоли появится соответствующий запрос, следуйте инструкциям на экране, чтобы зарегистрировать свое приложение и подключить его к Firebase.
Перейдите к следующему шагу этого руководства, чтобы добавить SDK в свое приложение.
Шаг 3 : Добавьте SDK
Библиотека Firebase обеспечивает доступ к API для взаимодействия с генеративными моделями. Библиотека включена в состав Firebase JavaScript SDK for Web.
Установите Firebase JS SDK для Web с помощью npm.
Гибридная функция выпущена под другим тегом npm, поэтому обязательно включите ее в команду установки.
npm install firebase@eap-ai-hybridinference
Инициализируйте Firebase в вашем приложении:
import { initializeApp } from "firebase/app"; // 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);
Шаг 4 : Инициализация службы и создание экземпляра модели.
Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице. |
Перед отправкой запроса модели Gemini инициализируйте службу для выбранного вами поставщика API и создайте экземпляр GenerativeModel
.
Установите один из mode
:
prefer_on_device
: настраивает SDK на использование модели на устройстве, если она доступна, или возврат к модели, размещенной в облаке.only_on_device
: настраивает SDK на использование модели на устройстве или выдачу исключения.only_in_cloud
: Настраивает SDK так, чтобы он никогда не использовал модель на устройстве.
По умолчанию при использовании prefer_on_device
или only_in_cloud
облачной моделью является gemini-2.0-flash-lite
, но вы можете переопределить модель по умолчанию .
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } 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() });
// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });
Отправьте оперативный запрос модели
В этом разделе приведены примеры того, как отправлять различные типы входных данных для генерации различных типов выходных данных, включая:
- Генерация текста из текстового ввода
- Генерация текста из текстово-изображенного (мультимодального) ввода
Если вы хотите сгенерировать структурированный вывод (например, JSON или перечисления), то используйте один из следующих примеров «генерации текста» и дополнительно настройте модель для ответа в соответствии с предоставленной схемой .
Генерация текста из текстового ввода
Прежде чем приступить к работе с этим образцом, убедитесь, что вы выполнили раздел « Начало работы» данного руководства. |
Вы можете использовать generateContent()
для генерации текста из приглашения, содержащего текст:
// Imports + initialization of FirebaseApp and backend service + creation of model instance
// Wrap in an async function so you can use await
async function run() {
// Provide a prompt that contains text
const prompt = "Write a story about a magic backpack."
// To generate text output, call `generateContent` with the text input
const result = await model.generateContent(prompt);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
Генерация текста из текстово-изображенного (мультимодального) ввода
Прежде чем приступить к работе с этим образцом, убедитесь, что вы выполнили раздел « Начало работы» данного руководства. |
Вы можете использовать generateContent()
для генерации текста из приглашения, содержащего текстовые и графические файлы, указав mimeType
каждого входного файла и сам файл.
Поддерживаемые типы входных изображений для вывода на устройстве: PNG и JPEG.
// Imports + initialization of FirebaseApp and backend service + creation of model instance
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the image
const prompt = "Write a poem about this picture:";
const fileInputEl = document.querySelector("input[type=file]");
const imagePart = await fileToGenerativePart(fileInputEl.files[0]);
// To generate text output, call `generateContent` with the text and image
const result = await model.generateContent([prompt, imagePart]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
Что еще можно сделать?
В дополнение к приведенным выше примерам вы также можете использовать альтернативные режимы вывода , переопределять резервную модель по умолчанию и использовать конфигурацию модели для управления ответами .
Используйте альтернативные режимы вывода
В приведенных выше примерах использовался режим prefer_on_device
для настройки SDK на использование модели на устройстве, если она доступна, или возврат к модели, размещенной в облаке. SDK предлагает два альтернативных режима вывода : only_on_device
и only_in_cloud
.
Используйте режим
only_on_device
, чтобы SDK мог использовать только модель на устройстве. В этой конфигурации API выдаст ошибку, если модель на устройстве недоступна.const model = getGenerativeModel(ai, { mode: "only_on_device" });
Используйте режим
only_in_cloud
, чтобы SDK мог использовать только модель, размещенную в облаке.const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
Переопределить резервную модель по умолчанию
При использовании режима prefer_on_device
SDK вернется к использованию модели, размещенной в облаке, если модель на устройстве недоступна. Резервная модель, размещенная в облаке, по умолчанию — gemini-2.0-flash-lite
. Эта размещенная в облаке модель также является моделью по умолчанию при использовании режима only_in_cloud
.
Вы можете использовать параметр конфигурации inCloudParams
, чтобы указать альтернативную модель по умолчанию, размещенную в облаке:
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.0-flash"
}
});
Найдите названия всех поддерживаемых моделей Gemini .
Используйте конфигурацию модели для управления ответами
В каждом запросе к модели вы можете отправить конфигурацию модели, чтобы контролировать, как модель генерирует ответ. Модели, размещенные в облаке, и модели на устройстве предлагают различные варианты конфигурации.
Конфигурация сохраняется на протяжении всего срока службы экземпляра. Если вы хотите использовать другую конфигурацию, создайте новый экземпляр GenerativeModel
с этой конфигурацией.
Настройте конфигурацию для модели, размещенной в облаке
Используйте опцию inCloudParams
для настройки модели Gemini, размещенной в облаке. Узнайте о доступных параметрах .
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.0-flash"
temperature: 0.8,
topK: 10
}
});
Настройте конфигурацию для модели на устройстве
Обратите внимание, что для вывода с использованием модели на устройстве используется API Prompt из Chrome .
Используйте опцию onDeviceParams
для настройки модели на устройстве. Узнайте о доступных параметрах .
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
Установите конфигурацию для структурированного вывода
Генерация структурированного вывода (например, JSON и перечисления) поддерживается для вывода с использованием как облачных, так и локальных моделей.
Для гибридного вывода используйте как inCloudParams
, так и onDeviceParams
, чтобы настроить модель на ответ со структурированным выводом. Для других режимов используйте только применимую конфигурацию.
Для
inCloudParams
: укажите соответствующийresponseMimeType
(в этом примереapplication/json
), а такжеresponseSchema
, которую должна использовать модель.Для
onDeviceParams
: укажитеresponseConstraint
, который должна использовать модель.
Вывод JSON
В следующем примере общий пример вывода JSON адаптируется для гибридного вывода:
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: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.0-flash"
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
Перечисление выходных данных
То же, что и выше, но с адаптацией документации по выводу enum для гибридного вывода:
// ...
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
// ...
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
// ...
Функции, пока недоступные для вывода на устройстве
Поскольку это экспериментальный релиз, не все возможности Web SDK доступны для вывода на устройстве . Следующие функции пока не поддерживаются для вывода на устройстве (но они обычно доступны для вывода на основе облака).
Генерация текста из входных типов файлов изображений, отличных от JPEG и PNG
- Возможен возврат к модели, размещенной в облаке; однако режим
only_on_device
выдаст ошибку.
- Возможен возврат к модели, размещенной в облаке; однако режим
Генерация текста из аудио-, видеоданных и документов (например, PDF-файлов)
- Возможен возврат к модели, размещенной в облаке; однако режим
only_on_device
выдаст ошибку.
- Возможен возврат к модели, размещенной в облаке; однако режим
Создание изображений с использованием моделей Gemini или Imagen
- Возможен возврат к модели, размещенной в облаке; однако режим
only_on_device
выдаст ошибку.
- Возможен возврат к модели, размещенной в облаке; однако режим
Предоставление файлов с использованием URL-адресов в мультимодальных запросах. Вы должны предоставить файлы как встроенные данные для моделей на устройстве.
Многооборотный чат
- Возможен возврат к модели, размещенной в облаке; однако режим
only_on_device
выдаст ошибку.
- Возможен возврат к модели, размещенной в облаке; однако режим
Двунаправленная потоковая передача с помощью Gemini Live API
- Обратите внимание, что это не поддерживается клиентским SDK Firebase AI Logic для Web даже для моделей, размещенных в облаке .
Вызов функции
- Вскоре!
Подсчет жетонов
- Всегда выдает ошибку. Количество будет отличаться для моделей, размещенных в облаке и на устройстве, поэтому интуитивно понятного варианта отката нет.
Мониторинг ИИ в консоли Firebase для получения выводов на устройстве.
- Обратите внимание, что любой вывод с использованием размещенных в облаке моделей можно отслеживать так же, как и любой другой вывод с использованием клиентского SDK Firebase AI Logic для Web.
Оставьте отзыв о своем опыте использования Firebase AI Logic