Создавайте приложения и функции на основе ИИ с помощью гибридного вывода, используя Firebase AI Logic . Гибридный вывод позволяет запускать вычисления с использованием моделей на устройстве, если это возможно, и беспрепятственно переключаться на облачные модели в противном случае (и наоборот).
В этом релизе стало доступно гибридное выполнение алгоритмов с использованием клиентского SDK Firebase AI Logic для веб-приложений, а также поддержка выполнения алгоритмов на устройстве в Chrome на настольных компьютерах.
Рекомендуемые варианты использования и поддерживаемые возможности
Рекомендуемые варианты использования:
Использование встроенной в устройство модели для выполнения вычислений дает следующие преимущества:
- Повышенная конфиденциальность
- Локальный контекст
- Выводы без затрат
- Оффлайн функциональность
Использование гибридных функций предоставляет следующие возможности:
- Охватите 100% своей аудитории независимо от модели устройства или наличия подключения к интернету.
Поддерживаемые возможности и функции для выполнения вычислений на устройстве:
- Создание контента за один цикл, потоковая передача и передача без потоковой передачи.
- Генерация текста из текстового ввода
- Генерация текста из текстово-графического ввода , в частности, из изображений в форматах JPEG и PNG.
- Генерация структурированного вывода , включая JSON и перечисления.
Начать
В этом руководстве показано, как начать использовать Firebase AI Logic SDK для веб-разработки для выполнения гибридного вывода.
Для вывода результатов с использованием модели, размещенной на устройстве, используется API Prompt из Chrome ; тогда как для вывода результатов с использованием облачной модели используется выбранный вами поставщик API Gemini (либо Gemini Developer API , либо Vertex AI Gemini API ).
Начните разработку, используя localhost, как описано в этом разделе (вы также можете узнать больше об использовании API на localhost в документации Chrome). Затем, после реализации вашей функции, вы можете, при желании, предоставить конечным пользователям возможность протестировать вашу функцию .
Шаг 1 : Настройте Chrome и API Prompt для вывода информации на устройстве.
Убедитесь, что вы используете последнюю версию Chrome. Обновить можно через chrome://settings/help .
Функция определения местоположения на устройстве доступна начиная с Chrome версии 139 и выше.Включите многомодальную модель на устройстве, установив для следующего флага значение Enabled :
-
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
-
Перезапустите Chrome.
(Необязательно) Перед первым запросом загрузите модель устройства.
API Prompt встроен в Chrome; однако модель, загружаемая на устройство, по умолчанию недоступна. Если вы еще не загрузили модель до первого запроса на вывод данных на устройстве, запрос автоматически запустит загрузку модели в фоновом режиме.
Откройте Инструменты разработчика > Консоль .
Выполните следующие действия:
await LanguageModel.availability();Убедитесь, что результат
available,downloadingилиdownloadable.Если выходные данные
downloadable, начните загрузку модели, выполнив следующую команду:await LanguageModel.create();Для отслеживания хода загрузки и проверки
availableмодели перед отправкой запросов можно использовать следующую функцию обратного вызоваmonitor:const session = await LanguageModel.create({ monitor(m) { m.addEventListener("downloadprogress", (e) => { console.log(`Downloaded ${e.loaded * 100}%`); }); }, });
Шаг 2 : Создайте проект Firebase и подключите ваше приложение к Firebase.
Войдите в консоль Firebase , а затем выберите свой проект Firebase.
Если у вас еще нет проекта Firebase, нажмите кнопку для создания нового проекта Firebase, а затем воспользуйтесь одним из следующих вариантов:
Вариант 1 : Создайте совершенно новый проект Firebase (и автоматически сформируйте для него базовый проект Google Cloud ), указав новое имя проекта на первом шаге рабочего процесса.
Вариант 2 : "Добавить Firebase" в существующий проект Google Cloud , нажав кнопку "Добавить Firebase в проект Google Cloud" (внизу страницы). На первом шаге процесса начните вводить название существующего проекта, а затем выберите проект из отображаемого списка.
Выполните оставшиеся шаги отображаемого на экране процесса, чтобы создать проект Firebase. Обратите внимание, что при появлении соответствующего запроса вам не потребуется настраивать Google Analytics для использования SDK Firebase AI Logic .
В консоли Firebase перейдите на страницу Firebase AI Logic .
Нажмите « Начать» , чтобы запустить пошаговый рабочий процесс, который поможет вам настроить необходимые API и ресурсы для вашего проекта.
Выберите поставщика « Gemini API », которого вы хотите использовать с SDK Firebase AI Logic . Для начинающих пользователей рекомендуется использовать Gemini Developer API . При желании вы всегда можете добавить оплату или настроить Vertex AI Gemini API позже.
API для разработчиков Gemini — оплата необязательна (доступно в бесплатном тарифном плане Spark, при желании можно перейти на более дорогой тариф).
Консоль активирует необходимые API и создаст ключ API Gemini в вашем проекте.
Не добавляйте этот API-ключ Gemini в код вашего приложения. Узнайте больше.API Vertex AI Gemini — требуется оплата (требуется тарифный план Blaze с оплатой по факту использования)
Консоль поможет вам настроить выставление счетов и включить необходимые API в вашем проекте.
Если в процессе работы консоли появится соответствующее сообщение, следуйте инструкциям на экране, чтобы зарегистрировать ваше приложение и подключить его к Firebase.
Чтобы добавить SDK в ваше приложение, перейдите к следующему шагу в этом руководстве.
Шаг 3 : Добавьте SDK
Библиотека Firebase предоставляет доступ к API для взаимодействия с генеративными моделями. Библиотека входит в состав Firebase JavaScript SDK для веб-приложений.
Установите Firebase JS SDK для веб-разработки с помощью npm:
npm install firebaseИнициализируйте 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 для использования модели, устанавливаемой на устройстве, или для генерации исключения.PREFER_IN_CLOUD: Настраивает SDK для использования облачной модели, если она доступна, или для переключения на модель, размещенную на устройстве.ONLY_IN_CLOUD: Настраивает SDK таким образом, чтобы он никогда не использовал модель, установленную на устройстве.
При использовании PREFER_ON_DEVICE , PREFER_IN_CLOUD или ONLY_IN_CLOUD по умолчанию используется модель облачного размещения.gemini-2.0-flash-lite
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() });
// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: InferenceMode.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();
Обратите внимание, что Firebase AI Logic также поддерживает потоковую передачу текстовых ответов с помощью generateContentStream (вместо generateContent ).
Генерация текста из текстово-графического (мультимодального) входного сигнала.
| Прежде чем попробовать этот пример, убедитесь, что вы выполнили раздел « Начало работы» данного руководства. |
Вы можете использовать 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();
Обратите внимание, что Firebase AI Logic также поддерживает потоковую передачу текстовых ответов с помощью generateContentStream (вместо generateContent ).
Что еще можно сделать?
В дополнение к приведенным выше примерам, вы также можете предоставить конечным пользователям возможность протестировать вашу функцию , использовать альтернативные режимы вывода , переопределить резервную модель по умолчанию и использовать конфигурацию модели для управления ответами .
Предоставьте конечным пользователям возможность опробовать вашу функцию.
Чтобы дать конечным пользователям возможность протестировать вашу функцию, вы можете зарегистрироваться в пробной версии Chrome Origin . Обратите внимание, что продолжительность и объем использования этих пробных версий ограничены.
Зарегистрируйтесь для участия в пробной версии Prompt API Chrome Origin . Вам будет предоставлен токен.
Укажите токен на каждой веб-странице, для которой вы хотите включить пробную версию. Используйте один из следующих вариантов:
Укажите токен в качестве метатега в теге
<head>:<meta http-equiv="origin-trial" content=" TOKEN ">Укажите токен в заголовке HTTP:
Origin-Trial: TOKENПредоставьте токен программным способом .
Используйте альтернативные режимы вывода
В приведенных выше примерах использовался режим PREFER_ON_DEVICE для настройки SDK на использование модели, размещенной на устройстве, если она доступна, или на использование модели, размещенной в облаке. SDK предлагает три альтернативных режима вывода : ONLY_ON_DEVICE , ONLY_IN_CLOUD и PREFER_IN_CLOUD .
Используйте режим
ONLY_ON_DEVICE, чтобы SDK мог использовать только модель, установленную на устройстве. В этой конфигурации API выдаст ошибку, если модель, установленная на устройстве, недоступна.const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_ON_DEVICE });Используйте режим
ONLY_IN_CLOUD, чтобы SDK мог использовать только облачную модель.const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_IN_CLOUD });Используйте режим
PREFER_IN_CLOUD, чтобы SDK пытался использовать облачную модель, но переключался на модель, размещенную на устройстве, если облачная модель недоступна (например, устройство находится в автономном режиме).const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });
Определите, использовался ли вывод данных на устройстве или в облаке.
Если вы используете режимы вывода PREFER_ON_DEVICE или PREFER_IN_CLOUD , то может быть полезно знать, какой режим использовался для конкретных запросов. Эта информация предоставляется свойством inferenceSource каждого ответа (доступно начиная с JS SDK версии 12.5.0).
При обращении к этому свойству возвращаемое значение будет либо ON_DEVICE , либо IN_CLOUD .
// ...
console.log('You used: ' + result.response.inferenceSource);
console.log(result.response.text());
Переопределить модель резервного копирования по умолчанию
Модель размещения в облаке по умолчанию —gemini-2.0-flash-lite .
Эта модель является резервной облачной моделью при использовании режима PREFER_ON_DEVICE . Она также является моделью по умолчанию при использовании режима ONLY_IN_CLOUD или режима PREFER_IN_CLOUD .
С помощью параметра конфигурации inCloudParams можно указать альтернативную модель размещения в облаке по умолчанию.
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "GEMINI_MODEL_NAME"
}
});
Найдите названия моделей для всех поддерживаемых моделей Gemini .
Используйте конфигурацию модели для управления ответами.
В каждом запросе к модели можно передать конфигурацию модели, чтобы управлять тем, как модель генерирует ответ. Модели, размещенные в облаке, и модели, установленные на устройстве, предлагают разные варианты конфигурации.
Данная конфигурация сохраняется на протяжении всего срока службы экземпляра. Если вы хотите использовать другую конфигурацию, создайте новый экземпляр GenerativeModel с этой конфигурацией.
Настройте параметры для модели, размещенной в облаке.
Используйте параметр inCloudParams для настройки модели Gemini , размещенной в облаке. Узнайте о доступных параметрах .
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "GEMINI_MODEL_NAME"
temperature: 0.8,
topK: 10
}
});
Настройте параметры для модели устройства.
Обратите внимание, что при выводе данных с использованием модели, установленной на устройстве, применяется API Prompt из Chrome .
Используйте параметр onDeviceParams для настройки модели устройства. Узнайте о доступных параметрах .
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
Настройте параметры для структурированного вывода (например, в формате JSON).
Для вывода результатов с использованием как облачных, так и локальных моделей поддерживается генерация структурированных выходных данных (например, в формате 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: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "gemini-2.5-flash"
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
Вывод перечисления
Как указано выше, но с адаптацией документации по выводу перечислений для гибридного вывода:
// ...
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
Предоставление модели инструментов , помогающих ей генерировать ответ (например, вызов функций, выполнение кода и привязка к поиску Google).
Подсчет токенов
- Всегда выдает ошибку. Количество будет отличаться в облачной среде и на устройстве, поэтому интуитивно понятного резервного варианта нет.
Мониторинг ИИ в консоли Firebase для выполнения вычислений на устройстве.
- Обратите внимание, что любой вывод данных с использованием облачных моделей можно отслеживать так же, как и другие выводы данных, с помощью клиентского SDK Firebase AI Logic для веб-приложений.
Оставьте отзыв о вашем опыте использования Firebase AI Logic.