Вы можете создавать приложения и функции Android на основе ИИ с гибридным выводом, используя Firebase AI Logic. Гибридный вывод позволяет использовать модели на устройстве, если они доступны, и автоматически переключаться на облачные модели в противном случае (и наоборот).
На этой странице описано, как начать работу с клиентским SDK, а также показаны дополнительные параметры конфигурации и возможности.
Обратите внимание, что инференс на устройстве с помощью Firebase AI Logic поддерживается для приложений Android, использующих Firebase AI Logic SDK версии 17.10.0 или более поздней (BoM версии 34.10.0 или более поздней) и работающих на определенных устройствах. Его использование регулируется Условиями использования ML Kit, а также Условиями использования генеративного ИИ в ML Kit.
Рекомендуемые варианты использования и поддерживаемые функции
Рекомендуемые варианты использования
Локальная модель для логического вывода позволяет:
- Повышенная конфиденциальность
- Локальный контекст
- Бесплатный вывод
- Офлайн-функции
Использование гибридных функций позволяет:
- Охватите больше пользователей, учитывая доступность модели на устройстве и подключение к интернету.
Поддерживаемые функции и возможности для локального вывода
Вывод на устройстве поддерживает только одноходовое генерирование текста (не чат) с потоковой или непотоковой передачей данных. Она поддерживает следующие возможности генерации текста:
Генерировать текст на основе текстового запроса.
Генерировать текст на основе текста и изображения, в частности одного растрового изображения.
Обязательно ознакомьтесь со списком функций, которые пока не поддерживаются при локальном выводе, внизу этой страницы.
Подготовка
Обратите внимание на следующее:
Поддерживаемые API:
При выводе в облаке используется выбранный вами поставщик Gemini API (Gemini Developer API или Agent Platform Gemini API (formerly Vertex AI)).
Для вывода на устройстве используется Prompt API из ML Kit. Он находится на этапе бета-тестирования и доступен только на определенных устройствах.
На этой странице рассказывается, как начать работу с этим инструментом.
После завершения стандартной настройки ознакомьтесь с дополнительными параметрами и возможностями.
Поддерживаемые устройства Android и их модели на устройстве
Список поддерживаемых устройств и их моделей для вывода на устройстве (с использованием Prompt API из ML Kit) можно найти в документации ML Kit.
Начать
В этом разделе описаны общие действия, которые нужно выполнить, чтобы отправить любой поддерживаемый запрос.
Шаг 1. Настройте проект Firebase и подключите к нему приложение
Войдите в консоль Firebase и выберите проект Firebase.
В консоли Firebase выберите Сервисы ИИ > Логика ИИ.
Нажмите Начать, чтобы запустить пошаговый процесс настройки необходимых API и ресурсов для проекта.
Если появится запрос, следуйте инструкциям на экране, чтобы зарегистрировать приложение и добавить в него конфигурацию Firebase.
Когда вам будет предложено выбрать поставщика Gemini API, рекомендуем выбрать Gemini Developer API. Это позволит вам быстро начать работу без дополнительных затрат.
Вы всегда можете настроить Agent Platform Gemini API (formerly Vertex AI) позже (и выполнить требования к оплате).
Продолжите настройку, чтобы задать необходимые API и связанные сервисы для Firebase AI Logic.
С начала июля 2026 года на этом этапе рабочего процесса автоматически включается Firebase App Check для AI Logic. Это критически важный сервис, который помогает защитить Gemini API при прямом доступе из приложения. В рамках подготовки (см. шаги ниже) вам нужно будет настроить отладочный поставщик App Check для локальной разработки, когда App Check включен.
Перейдите к следующему шагу этого руководства, чтобы добавить в приложение необходимые SDK.
Шаг 2. Добавьте все необходимые SDK.
Firebase AI Logic SDK для Android (firebase-aifirebase-ai-ondevice
В файле Gradle на уровне модуля (приложения) (например, <project>/<app-module>/build.gradle.kts) добавьте зависимости для библиотек Firebase AI Logic и App Check для Android:
Kotlin
dependencies { // ... other androidx dependencies // Add the dependencies for the Firebase AI Logic and App Check libraries // Note that the on-device SDK is not yet included in the Firebase Android BoM implementation("com.google.firebase:firebase-ai:18.0.0") implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta06") implementation("com.google.firebase:firebase-appcheck-debug:20.0.0") }
Java
Для Java необходимо добавить две дополнительные библиотеки.
dependencies { // ... other androidx dependencies // Add the dependencies for the Firebase AI Logic and App Check libraries // Note that the on-device SDK is not yet included in the Firebase Android BoM implementation("com.google.firebase:firebase-ai:18.0.0") implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta06") implementation("com.google.firebase:firebase-appcheck-debug:20.0.0") // Required for one-shot operations (to use `ListenableFuture` from Guava Android) implementation("com.google.guava:guava:31.0.1-android") // Required for streaming operations (to use `Publisher` from Reactive Streams) implementation("org.reactivestreams:reactive-streams:1.0.4") }
Шаг 3. Настройте поставщика отладки App Check для локальной разработки
С начала июля 2026 года в рамках пошаговой настройки AI Logic в консоли Firebase App Check будет автоматически применяться для защиты Gemini API. Для локальной разработки необходимо настроить App Check отладочный поставщик, чтобы обойти проверку, сохраняя при этом принудительное применение App Check.
В отладочной сборке настройте App Check так, чтобы он использовал фабрику поставщика отладочной версии:
Kotlin
Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), )Java
FirebaseApp.initializeApp(/*context=*/ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance());Получите токен отладки:
Запустите приложение в эмуляторе или на тестовом устройстве.
Найдите в журналах токен отладки App Check. Пример:
D DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678Скопируйте токен (например,
123a4567-b89c-12d3-e456-789012345678).
Зарегистрируйте токен отладки в App Check:
В консоли Firebase перейдите в раздел Security (Безопасность) > App Check (Проверка приложений) > Apps (Приложения).
Найдите свое приложение, нажмите на значок дополнительного меню () и выберите Управление токенами отладки.
Зарегистрируйте токен отладки, следуя инструкциям на экране.
Подробнее о поставщике отладки (в том числе о том, как получить новый токен отладки) можно узнать в официальной документации App Check.
Шаг 4. Проверьте, доступна ли модель на устройстве
С помощью FirebaseAIOnDevice проверьте, доступна ли модель на устройстве. Если нет, скачайте ее.
После скачивания AICore будет автоматически обновлять модель. Дополнительную информацию об AICore и управлении скачиванием модели на устройстве вы найдете в примечаниях после фрагмента кода.
Kotlin
val status = FirebaseAIOnDevice.checkStatus()
when (status) {
OnDeviceModelStatus.UNAVAILABLE -> {
Log.w(TAG, "On-device model is unavailable")
}
OnDeviceModelStatus.DOWNLOADABLE -> {
FirebaseAIOnDevice.download().collect { status ->
when (status) {
is DownloadStatus.DownloadStarted ->
Log.w(TAG, "Starting download - ${status.bytesToDownload}")
is DownloadStatus.DownloadInProgress ->
Log.w(TAG, "Download in progress ${status.totalBytesDownloaded} bytes downloaded")
is DownloadStatus.DownloadCompleted ->
Log.w(TAG, "On-device model download complete")
is DownloadStatus.DownloadFailed ->
Log.e(TAG, "Download failed ${status}")
}
}
}
OnDeviceModelStatus.DOWNLOADING -> {
Log.w(TAG, "On-device model is being downloaded")
}
OnDeviceModelStatus.AVAILABLE -> {
Log.w(TAG, "On-device model is available")
}
}
Java
Checking for, downloading, and warming up the model is not yet available for Java.
However, all other APIs and interactions in this guide are available for Java.
Обратите внимание на следующее:
Время скачивания модели на устройство зависит от многих факторов, в том числе от вашей сети.
Если в вашем коде используется модель на устройстве для основного или резервного вывода, убедитесь, что модель загружается на ранних этапах жизненного цикла вашего приложения, чтобы модель на устройстве была доступна до того, как конечные пользователи столкнутся с кодом в вашем приложении.
Если модель на устройстве недоступна при запросе на вывод на устройстве, SDK не будет автоматически запускать скачивание модели. SDK переключится на модель, размещенную в облаке, или вызовет исключение (подробнее о режимах работы).
AICore (системный сервис Android) управляет тем, какая модель и версия скачиваются, а также поддерживает модель в актуальном состоянии. Обратите внимание, что на устройстве может быть скачана только одна модель. Если другое приложение на устройстве ранее успешно скачало локальную модель, то при проверке будет возвращено, что модель доступна.
Оптимизация задержки
Чтобы оптимизировать первый вызов логического вывода, приложение может вызывать функцию onDeviceExtension?.warmUp() (в настоящее время доступна только для Kotlin). Это загрузит модель на устройстве в память и инициализирует компоненты среды выполнения.
Шаг 5. Инициализируйте сервис и создайте экземпляр модели
|
Нажмите на поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему. |
Прежде чем отправлять запрос модели, настройте следующее:
Инициализируйте сервис для выбранного поставщика API.
Создайте экземпляр
GenerativeModelи задайте дляmodeодно из следующих значений: Здесь приведены только общие сведения, а подробную информацию о поведении этих режимов можно найти в разделе Как задать режим вывода.PREFER_ON_DEVICE: попытка использовать модель на устройстве; в противном случае переход на модель, размещенную в облаке.ONLY_ON_DEVICE: попытаться использовать модель на устройстве, в противном случае выдать исключение.PREFER_IN_CLOUD: попытка использовать облачную модель. Если это не удается, используется модель на устройстве.ONLY_IN_CLOUD– попытаться использовать облачную модель, а в случае неудачи выдать исключение.
Kotlin
// Using this SDK to access on-device inference is an Experimental release and requires opt-in
@OptIn(PublicPreviewAPI::class)
// ...
// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel(
modelName = "CLOUD_MODEL_NAME",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
)
Java
// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
"CLOUD_MODEL_NAME",
new OnDeviceConfig(InferenceMode.PREFER_ON_DEVICE)
);
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Шаг 6. Отправьте запрос модели
В этом разделе показано, как отправлять различные типы входных данных для генерации различных типов выходных данных, в том числе:
Как генерировать текст на основе текстового запроса
| Прежде чем использовать этот пример, убедитесь, что вы выполнили все инструкции из раздела Начало работы. |
Вы можете использовать generateContent(), чтобы генерировать сгенерированный текст на основе запроса, содержащего текст.
Kotlin
// Imports + initialization of Gemini API backend service + creation of model instance
// Provide a prompt that contains text
val prompt = "Write a story about a magic backpack."
// To generate text output, call generateContent with the text input
val response = model.generateContent(prompt)
print(response.text)
Java
// Imports + initialization of Gemini API backend service + creation of model instance
// Provide a prompt that contains text
Content prompt = new Content.Builder()
.addText("Write a story about a magic backpack.")
.build();
// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Обратите внимание, что Firebase AI Logic также поддерживает потоковую передачу текстовых ответов с помощью generateContentStream (вместо generateContent).
Как генерировать текст на основе текста и изображения (мультимодальный ввод)
| Прежде чем использовать этот пример, убедитесь, что вы выполнили все инструкции из раздела Начало работы. |
Вы можете использовать generateContent(), чтобы сгенерировать текст на основе запроса, содержащего текст и до одного файла изображения (только в формате Bitmap), указав mimeType для каждого входного файла и сам файл.
Kotlin
// Imports + initialization of Gemini API backend service + creation of model instance
// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)
// Provide a prompt that includes the image specified above and text
val prompt = content {
image(bitmap)
text("What developer tool is this mascot from?")
}
// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)
Java
// Imports + initialization of Gemini API backend service + creation of model instance
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
.addImage(bitmap)
.addText("What developer tool is this mascot from?")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Обратите внимание, что Firebase AI Logic также поддерживает потоковую передачу текстовых ответов с помощью generateContentStream (вместо generateContent).
Что ещё ты умеешь делать?
Для гибридных экспериментов можно использовать различные дополнительные параметры конфигурации и возможности:
Определить, использовался ли вывод на устройстве или в облаке.
Генерировать структурированные выходные данные (например, JSON или перечисления).
Функции, которые пока недоступны для обработки на устройстве
Поскольку это экспериментальная версия, не все возможности облачных моделей доступны для вывода на устройстве. Следующие функции пока недоступны для инференса на устройстве (но обычно доступны для облачного инференса).
Генерирование изображений
- Можно вернуться к модели, размещенной в облаке, но в режиме
ONLY_ON_DEVICEбудет выдано исключение.
- Можно вернуться к модели, размещенной в облаке, но в режиме
Генерировать текст на основе изображений, формат которых отличается от Bitmap (изображение загружено в память).
- Можно вернуться к модели, размещенной в облаке, но в режиме
ONLY_ON_DEVICEбудет выдано исключение.
- Можно вернуться к модели, размещенной в облаке, но в режиме
Создание сгенерированного текста на основе файла с изображением. Для инференса на устройстве необходимо предоставить текст в составе мультимодального запроса.
- Можно вернуться к модели, размещенной в облаке, но в режиме
ONLY_ON_DEVICEбудет выдано исключение.
- Можно вернуться к модели, размещенной в облаке, но в режиме
Генерирование текста на основе нескольких графических файлов
- Можно вернуться к модели, размещенной в облаке, но в режиме
ONLY_ON_DEVICEбудет выдано исключение.
- Можно вернуться к модели, размещенной в облаке, но в режиме
Генерация текста на основе аудио, видео и документов (например, PDF-файлов).
- Может переключиться на модель, размещенную в облаке, но в режиме
ONLY_ON_DEVICEбудет выдана ошибка.
- Может переключиться на модель, размещенную в облаке, но в режиме
Предоставление файлов с помощью URL в мультимодальных запросах. Для вывода на устройстве необходимо предоставить одно изображение в формате Bitmap.
- Если вы укажете URL файла с помощью
fileData(FileDataPart), то в качестве резервного варианта может использоваться модель, размещенная в облаке (в режимеONLY_ON_DEVICEбудет выдано исключение). - Если вы вставите URL непосредственно в текстовый запрос, он не будет автоматически перенаправлен в облачную модель (модель на устройстве игнорирует встроенные URL).
- Если вы укажете URL файла с помощью
Отправка запросов, превышающих 4000 токенов (примерно 3000 слов на английском языке).
- Можно вернуться к модели, размещенной в облаке, но в режиме
ONLY_ON_DEVICEбудет выдано исключение.
- Можно вернуться к модели, размещенной в облаке, но в режиме
Многоэтапный чат
- Не переключается автоматически на облачную модель. При локальном инференсе история запросов объединяется в один текстовый запрос. Поскольку локальная модель не различает роли и воспринимает историю как одно сообщение, она не будет такой же точной, как облачная.
- Если вы хотите использовать пошаговый чат, рекомендуем выбрать режим
ONLY_IN_CLOUD.
Предоставление модели инструментов, которые помогают ей генерировать ответы (например, вызов функций, выполнение кода, контекст URL, обоснование с помощью
Google Search и обоснование с помощьюGoogle Maps ).- Не переключается автоматически на модель, размещенную в облаке. Если вы хотите использовать инструменты, рекомендуем режим
ONLY_IN_CLOUD.
- Не переключается автоматически на модель, размещенную в облаке. Если вы хотите использовать инструменты, рекомендуем режим
ИИ-мониторинг в консоли Firebase не показывает данные о локальном выводе (включая локальные журналы). Однако любой вывод, в котором используется модель, размещенная в облаке, можно отслеживать так же, как и другие выводы, с помощью Firebase AI Logic.
Дополнительные ограничения
Помимо перечисленного выше, у инференса на устройстве есть следующие ограничения (подробнее об этом рассказывается в документации ML Kit):
Конечный пользователь вашего приложения должен использовать поддерживаемое устройство для вывода на устройстве.
Приложение может выполнять вывод на устройстве, только когда оно активно.
Для локального вывода проверены только английский и корейский языки.
Максимальный лимит токенов для всего запроса на локальный инференс составляет 4000 токенов. Если ваши запросы могут превысить это ограничение, настройте режим инференса, который может использовать модель, размещенную в облаке.
Мы не рекомендуем использовать варианты использования инференса на устройстве, требующие длинного вывода (более 256 токенов).
AICore (системный сервис Android, который управляет моделями на устройстве) устанавливает квоту на инференс для каждого приложения. Если за короткий период времени будет отправлено слишком много запросов к API, вы получите ответ
ErrorCode.BUSY. Если вы получаете эту ошибку, попробуйте использовать экспоненциальную выдержку для повторной отправки запроса. Кроме того, код ошибкиErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDEDможет быть возвращен, если приложение превышает квоту на длительный период (например, дневную квоту).
Оставить отзыв о работе с Firebase AI Logic