Создавайте веб-приложения и функции на основе ИИ с помощью гибридного вывода, используя Firebase AI Logic . Гибридный вывод позволяет запускать вывод с использованием моделей на устройстве, если это возможно, и беспрепятственно переключаться на облачные модели в противном случае (и наоборот).
На этой странице описано, как начать работу с клиентским SDK , а также представлены дополнительные параметры конфигурации и возможности , такие как структурированный вывод.
Обратите внимание, что вывод данных на устройстве поддерживается для веб-приложений, работающих в Chrome на настольных компьютерах .
Рекомендуемые варианты использования и поддерживаемые возможности
Рекомендуемые варианты использования:
Использование встроенной в устройство модели для выполнения вычислений дает следующие преимущества:
- Повышенная конфиденциальность
- Локальный контекст
- Выводы без затрат
- Автономная функциональность
Использование гибридных функций предоставляет следующие возможности:
- Охватите 100% своей аудитории независимо от модели устройства или наличия подключения к интернету.
Поддерживаемые возможности и функции для выполнения вычислений на устройстве:
- Создание контента за один цикл, потоковая передача и передача без потоковой передачи.
- Генерация текста из текстового ввода
- Генерация текста из текстово-графического ввода , в частности, из изображений в форматах JPEG и PNG.
- Генерация структурированного вывода , включая JSON и перечисления.
Прежде чем начать
Обратите внимание на следующее:
Для вывода результатов с использованием модели, размещенной на устройстве, используется 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 ".
Мы рекомендуем начать работу с использованием API Gemini Developer . В любой момент вы всегда можете настроить API Vertex AI Gemini (и необходимые для выставления счетов параметры).
Для доступа к Gemini Developer API консоль активирует необходимые API и создаст ключ Gemini API в вашем проекте.
Не добавляйте этот API-ключ Gemini в код вашего приложения. Узнайте больше.Если в процессе работы консоли появится соответствующее сообщение, следуйте инструкциям на экране, чтобы зарегистрировать ваше приложение и подключить его к 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 , нажмите на него. |
Перед отправкой запроса модели выполните следующие действия.
Инициализируйте сервис для выбранного вами API-провайдера.
Создайте экземпляр
GenerativeModel. Убедитесь, что выполнены следующие действия:Вызовите
getGenerativeModelпосле или при взаимодействии с конечным пользователем (например, при нажатии кнопки). Это является необходимым условием дляinferenceMode.Установите один из следующих
mode:PREFER_ON_DEVICE: Использовать модель, размещенную на устройстве, если она доступна; в противном случае, вернуться к модели, размещенной в облаке .ONLY_ON_DEVICE: Использовать модель, указанную на устройстве, если она доступна; в противном случае сгенерировать исключение .PREFER_IN_CLOUD: Использовать облачную модель, если она доступна; в противном случае, вернуться к модели, размещенной на устройстве .ONLY_IN_CLOUD: Используйте облачную модель, если она доступна; в противном случае выбросьте исключение .
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
// Call `getGenerativeModel` after or on an end-user interaction
// Set the mode (for example, use the on-device model if it's available)
const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
Шаг 5 : Отправьте запрос модели.
В этом разделе показано, как отправлять различные типы входных данных для генерации различных типов выходных данных, включая:
- Создание текста из текстового ввода.
- Генерация текста из текстово-графического (мультимодального) входного сигнала.
Если вы хотите генерировать структурированный вывод (например, 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 , но это лишь один из четырех доступных режимов вывода .
PREFER_ON_DEVICE: Использовать модель, размещенную на устройстве, если она доступна; в противном случае, вернуться к модели, размещенной в облаке .const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });ONLY_ON_DEVICE: Использовать модель, указанную на устройстве, если она доступна; в противном случае сгенерировать исключение .const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_ON_DEVICE });PREFER_IN_CLOUD: Использовать облачную модель, если она доступна; в противном случае, вернуться к модели, размещенной на устройстве .const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });ONLY_IN_CLOUD: Используйте облачную модель, если она доступна; в противном случае выбросьте исключение .const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_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.5-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
Предоставление модели инструментов , помогающих ей генерировать ответ (таких как вызов функций, выполнение кода, контекст URL и привязка к поиску Google).
Подсчет токенов
- Всегда выдает ошибку. Количество будет отличаться в облачной среде и на устройстве, поэтому интуитивно понятного резервного варианта нет.
Мониторинг ИИ в консоли Firebase для выполнения вычислений на устройстве.
- Обратите внимание, что любой вывод данных с использованием облачных моделей можно отслеживать так же, как и другие выводы данных, с помощью клиентского SDK Firebase AI Logic для веб-приложений.
Оставьте отзыв о вашем опыте использования Firebase AI Logic.