Инженер по связям с разработчиками
Чтобы встроить генеративный искусственный интеллект в приложение для Android, недостаточно просто подключиться к LLM. Нужны средства контроля расходов и безопасности корпоративного уровня. На этом занятии вы узнаете, как Firebase AI Logic помогает разработчикам развертывать безопасные и экономичные ИИ-решения в больших масштабах.
Мы рассмотрим основы безопасности и проверку приложений Firebase, управление расходами, динамическую маршрутизацию моделей и использование мультимодальных возможностей.
Расшифровка
Добро пожаловать на саммит для разработчиков Android.
Меня зовут Анкита Саксена, я менеджер по продукту Firebase.
А я Артур Томпсон, инженер по связям с разработчиками в команде Firebase.
Сегодня мы покажем, как добавить генеративные функции в приложения для Android.
Теперь
Что такое Firebase?
Поднимите руку, если вы слышали о Firebase.
О, я много чего вижу.
Отлично.
Firebase – это платформа Google для разработки приложений.
Firebase – это единая платформа, которая объединяет более 20 продуктов, поэтому вам не придется использовать разрозненные инструменты.
Давайте поговорим о сложностях, связанных с внедрением генеративного ИИ в мобильные приложения.
Мы выделили три основные проблемы.
Во-первых, утечка ключей API. На их извлечение уходят минуты.
Во-вторых, обновление названий моделей. Мы всегда рекомендуем разработчикам не задавать их в коде приложений, иначе при каждом появлении новой модели придется выпускать обновление.
Третий аспект – конфиденциальность файлов. Для разработчиков и пользователей приложений очень важно, чтобы данные были защищены и в приложении были предусмотрены необходимые меры безопасности.
Firebase AI Logic – это ключевое решение для преодоления трудностей, о которых мы говорили.
В чем ценностное предложение Firebase AI Logic для вас?
Мы берем на себя всю сложную работу по настройке серверной части, чтобы вам не пришлось делать это самостоятельно.
Во-вторых, используя наши клиентские SDK, вы можете вызывать Gemini API напрямую и безопасно из своих мобильных приложений.
Давайте заглянем под капот и разберемся, как устроена архитектура.
Слева у нас клиентские SDK Firebase.
В настоящее время мы поддерживаем множество клиентских SDK.
Я хочу отметить, что мы также поддерживаем Kotlin.
Когда разработчик хочет выполнить действие ИИ, SDK отправляет запрос в Firebase AI Logic, который затем безопасно перенаправляет его в Gemini Developer API или Agent Platform Gemini API.
То есть мы берем на себя всю работу с серверной частью, которую вы сейчас выполняете самостоятельно.
И ценность, которую мы получаем от этого, заключается в том, что вы ускоряете время выхода на рынок при нулевых затратах.
Теперь самое интересное.
Это будет демонстрация приложения FriendlyMeals.
Кстати, мы будем использовать это приложение для остальных демонстраций в рамках этого занятия, поэтому вы можете его скачать.
Вы можете отсканировать его с помощью QR-кода.
Давайте посмотрим демоверсию.
Приложение FriendlyMeals помогает находить рецепты на основе ингредиентов, которые вы вводите.
Итак, в этом рабочем процессе вы видите два способа, по сути, захвата этих ингредиентов.
Первый – вы вводите ингредиенты, которые у вас есть.
Затем вы фотографируете ингредиенты.
Я собираюсь использовать первый рабочий процесс, который заключается в вводе ингредиентов.
Это все, что я нашел в холодильнике.
Пока генерируется рецепт, я хочу обратить ваше внимание на несколько вещей.
Итак, под капотом мы вызываем модели Gemini.
В этом примере мы вызываем три модели Gemini 3.8 Flash.
Если вы посмотрите на верхнее изображение, то оно создано с помощью модели Gemini Nano Banana, а именно последней версии 2.1 Nano Banana.
Прежде чем перейти к коду, я хочу подчеркнуть ценностное предложение, которое вы получаете благодаря Firebase AI Logic.
Первый – это бессерверные SDK.
Вы хотите добавить функцию ИИ, но не хотите создавать серверную часть.
Для этого и нужны наши клиентские SDK.
Вы звоните напрямую в Gemini из приложения Android.
Второе – надежные встроенные функции безопасности.
Для вызовов Gemini можно использовать такие инструменты, как Firebase App Check, шаблоны запросов на сервере и другие. О них мы поговорим позже.
В-третьих, это поддержка продвинутых функций, таких как мультимодальные входные данные и потоковая передача.
Допустим, вы хотите создать приложение с простой ИИ-функцией, которая генерирует историю о волшебном рюкзаке.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model=Firebase.ai.generativeModel("gemini-4-argon")
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}Чтобы добавить эту ИИ-функцию и подготовить ее к работе, необходимо выполнить три простых шага.
Firebase AI Logic позволяет легко добавлять в приложение ИИ-функции. Но как обеспечить их безопасность?
Давайте перейдем к деталям безопасности, начиная с Проверкой приложений Firebase.
Проверка приложений Firebase помогает защищать данные и пользователей, а также контролировать доступ к ресурсам API, подтверждая, что запросы поступают из вашего приложения.
Это дополнительный уровень защиты, который помогает предотвратить злоупотребления в приложении.
Прежде чем перейти к коду, необходимо выполнить несколько действий в консоли Firebase.
В консоли Firebase в разделе "Проверка приложений" вы регистрируете приложение для Android и добавляете поставщиков аттестации.
например Play Integrity или reCAPTCHA Enterprise.
Обратите внимание, что после настройки Проверки приложений лучше начать с режима без принудительного применения.
Это позволит вашему приложению предоставлять телеметрию, чтобы убедиться, что все ваши приложения получают успешные вызовы API к вашему бэкенду, прежде чем вы примените принудительное исполнение.
Когда вы увидите, что телеметрия поступает правильно, вы можете принудительно включить проверку приложений. После этого все запросы, не имеющие действительного токена, подтвержденного аппаратным обеспечением, будут отклоняться.
Вот как выглядит код для реализации Проверки приложений.
class FireTravelApp : Application() {
lateinit var appContainer: AppContainer
private set
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Firebase.appCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)
} else {
Firebase.appCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)
}
appContainer = AppContainer(this)
}
}В классе приложения установите поставщика Проверки приложений.
На этапе разработки вы можете использовать отладочный поставщик, а когда будете готовы к запуску, переключитесь на Play Integrity или reCAPTCHA Enterprise.
Помните, что Проверку приложений нужно настроить до того, как вы будете выполнять другие вызовы Firebase.
При создании ИИ-функций разработчики часто встраивают запросы прямо в код приложения, но это создает две большие проблемы.
Во-первых, если в подсказку нужно внести изменения, вам придется полностью обновить ее.
Во-вторых, любой, кто распакует ваше приложение, получит доступ к вашему собственному составлению запросов.
Чтобы решить эту проблему, Firebase AI Logic использует шаблоны запросов на сервере.
Вместо того чтобы хранить ваши запросы на устройстве, они сохраняются в облаке.
Это представление шаблонов подсказок сервера, как оно выглядит в консоли Firebase.
Шаблоны создаются в формате .prompt.
---
model: 'gemini-3-flash'
input:
schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.
{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.Вы можете задать название модели прямо здесь.
Вы можете изменить его в любое время.
Вам не нужно выпускать полное обновление приложения.
Вы также можете обновить системные инструкции. Кроме того, для ввода и вывода используется строгая схема JSON.
Выпускать новую версию приложения не нужно.
Поскольку он находится в облаке, вы можете мгновенно настроить подсказку или поменять модель.
А вот как выглядит код на Kotlin.
val generativeModel = Firebase.ai.templateGenerativeModel()
val response = generativeModel.generateContent("storyteller-v1",
mapOf(
"topic" to topic,
"length" to length,
"language" to language
)
)
output.value = response.textОбратите внимание, что шаблоны запросов к серверу находятся в общедоступной предварительной версии.
Вы также можете реализовать режим только авторизации.
Для авторизации запроса используются токены пользователей Firebase Auth.
Чтобы дополнить функции защиты и полностью защитить приложение, вы можете включить режим Template-Only Mode непосредственно в консоли Firebase.
После публикации приложения вы можете захотеть узнать, как оно работает.
На вкладке "ИИ-мониторинг" вы можете одним кликом включить ИИ-мониторинг и настроить частоту дискретизации.
Firebase будет автоматически собирать показатели, задержки и количество токенов, и вам не придется писать для этого специальный код аналитики.
Обратите внимание, что оба режима, о которых мы только что говорили, доступны в одном окне.
После того как вы включите ИИ-мониторинг в консоли Firebase, данные будут поступать непосредственно на панель управления ИИ-мониторингом.
Вы можете отслеживать задержку 95-го процентиля, выявлять внезапные всплески ошибок и отслеживать потребление токенов в различных модальностях, таких как текст, изображения и аудио.
Вы также можете использовать Trace Viewer, чтобы посмотреть определенные трассировки.
В этом случае, поскольку он демонстрирует, как diff-- модель, которую мы используем, вы можете увидеть задержку, долю успешных запросов.
В консоли Firebase, где можно получить все телеметрические данные и информацию о том, как работает ИИ-функция.
Например, если вы видите внезапный скачок в использовании токенов или задержке, гибридный подход может помочь снизить эти затраты или задержку.
А поскольку функции на основе генеративного ИИ становятся ключевой частью наших приложений, полагаться на 100 % только на облако, вероятно, не лучший выбор.
Использование Nano 4, локальной модели на Android, дает три основных преимущества, которые вам, возможно, уже знакомы.
Первый – офлайн-режим.
Поэтому, находитесь ли вы на большой конференции, в самолете или в метро, ваша ИИ-функция все равно будет работать.
Стоимость.
Поскольку инференс выполняется на устройстве, вы можете добавлять эти функции и не беспокоиться о росте расходов на ИИ-функции.
И третий – конфиденциальность данных.
Поэтому, если это данные деликатного характера, вы можете гарантировать своим пользователям, что никакие умозаключения не покинут ваше устройство.
Firebase AI Logic позволяет задавать режимы инференса и настраивать стратегии маршрутизации, такие как PREFER_ON_DEVICE, PREFER_IN_CLOUD или ONLY_ON_DEVICE.
Если вы выберете ONLY_ON_DEVICE, SDK будет использовать модель на устройстве, не обращаясь к облаку.
Давайте переключимся на телефон.
Итак, мы снова открываем FriendlyMeals и смотрим, какие возможности есть на устройстве.
Итак, первое, что мы попробуем сделать, – это создать рецепт на основе некоторых ингредиентов, которые могут быть в нашем холодильнике.
Ранее вы видели, как Анкита использовала ручной метод, просто вводя ингредиенты, а затем генерируя рецепт.
Давайте попробуем другой способ.
Давайте возьмем этот настоящий холодильник, который точно не сгенерирован.
В холодильнике много оливок. Посмотрим, какой рецепт мы получим.
Я хочу обратить ваше внимание на несколько моментов.
Во-первых, изображение не покидало устройство.
Изображение было проанализировано локально моделью Nano от Gemma…
Nano 4.
И второе – это скорость, с которой пришел ответ.
Итак, ингредиенты сгенерированы.
Таким образом, вы получаете два преимущества.
Данные не покидают устройство, а задержка значительно снижается.
Давайте посмотрим, какой рецепт мы получим для холодильника, заполненного оливками.
Поэтому в этот раз мы используем облако.
Мы берем ингредиенты, которые были идентифицированы в холодильнике, и отправляем их в облако, используя Firebase AI Logic для создания рецепта.
Я не вижу лосося в холодильнике, но он есть в рецепте.
Но давайте вернемся к слайдам.
Как мы видели в демонстрации, переключение между локальной и облачной моделями довольно простое.
Сейчас Firebase AI Logic позволяет выполнять логический вывод, используя базовую маршрутизацию на основе доступности сети.
Чтобы управлять этим умозаключением, вы можете думать об этом как о защитных ограждениях.
Поэтому архитектура включает встроенную поддержку таких функций, как мультимодальные схемы ввода и вывода, а также полную интеграцию с Gemma, извините, с Gemini Nano 4.
Давайте посмотрим, как эти ограничения реализуются на практике.
Таким образом, гибридная маршрутизация не требует от вас создания сложного промежуточного ПО или большого количества резервной логики.
В коде это просто дополнительный параметр.
Чтобы задать нужный режим, передайте параметр onDeviceConfig.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}В этом случае SDK сначала попробует использовать локальную модель, а если она недоступна, автоматически переключится на облачную.
Теперь, когда мы обсудили, как создавать безопасные приложения и использовать локальные модели, давайте поговорим об оптимизации затрат.
Функции генеративного ИИ могут быстро масштабироваться, что может привести к увеличению расходов на облачные сервисы.
Поэтому нам нужны надлежащие меры предосторожности, чтобы у нас были правильные упреждающие средства управления инфраструктурой и автоматизированные функции, которые могут помочь сделать ваши бюджеты предсказуемыми, а ваши приложения финансово эффективными.
Артур только что подчеркнул, что вывод на устройстве полностью бесплатен, но всегда будут сценарии, требующие сложных задач по рассуждению, а также требующие резервного копирования и маршрутизации в облако.
Чтобы контролировать расходы, вам нужны ограничения.
Именно для этого и нужны пределы расходов Firebase.
С пределами расходов вы можете более детально контролировать затраты на приложения.
То есть вместо общего бюджета на весь проект и оповещений по электронной почте вы можете задать лимит для отдельных сервисов, например Firebase AI Logic.
Когда расходы достигают 100 %, Firebase автоматически приостанавливает работу ИИ-сервиса, чтобы предотвратить непредвиденные траты.
Помимо простых пределов расходов, существует несколько продвинутых стратегий оптимизации затрат.
Сегодня мы хотим рассказать о триггерах Firebase AI Logic.
Что если вам нужна собственная логика?
Это триггеры Firebase AI Logic.
Вы можете запустить функцию до или после генерации контента.
Используйте его, чтобы проверить пользователя, отфильтровать входные данные, добавить контекст, а также скорректировать ответ.
Мы рассмотрели оптимизацию расходов и безопасность. Теперь давайте перейдем к возможностям моделей и посмотрим, что предлагает Firebase AI Logic.
Чтобы обеспечить работу этих мультимодальных функций, Firebase AI Logic предоставляет обширный каталог готовых к использованию моделей и инструментов.
Для быстрого анализа, работы с текстом, кодом и медиафайлами можно использовать Gemini 4 Argon, Gemini 3.1 Pro, Gemini 3.8 Flash и другие модели.
Вы также можете подключить эти модели к реальным данным с помощью обоснования в Поиске и Картах.
И наконец, для голоса мы предлагаем естественное преобразование текста в речь и генерацию аудио в Gemini Live.
Давайте ещё раз переключимся на телефон.
Итак, у нас есть сладкое и соленое.
Ой, извините, не то.
Вот наш быстрый сырный тост с кетчупом.
Звучит аппетитно.
И первое, что мы хотим рассмотреть, это Live API.
В этом случае мы сможем использовать видео, которое возвращается, и я могу сказать: "Эй, Gemini, не мог бы ты сказать мне, что на столе из ингредиентов?"
Судя по изображению на экране ноутбука, у вас есть хлеб, сыр чеддер и кетчуп.
Теперь
Можем ли мы начать с первого шага рецепта?
Да.
Сначала разогрейте духовку или гриль до средней температуры.
Спасибо!
Теперь
В этом случае использовался Live API, и разговор оставался открытым, пока я его не завершил.
Ещё одна функция, которую я хочу показать, – это преобразование речи в текст. Точнее, преобразование текста в речь.
А с помощью преобразования текста в речь, в этом примере, у нас есть инструкции по рецепту.
И вместо того, чтобы читать, я могу нажать "Сгенерировать" или "Озвучить", и текст инструкции будет отправлен в модель преобразования текста в речь.
Она сгенерирует аудио и отправит его обратно на устройство.
Я могу воспроизвести его, сохранить в кеше и посмотреть позже.
1.
Разогрейте духовку или гриль до средней температуры.
2.
Положите два ломтика хлеба на противень или поддон тостера.
Хорошо.
Здорово, правда?
Firebase AI Logic позволяет реализовать такие функции всего несколькими строками кода.
Вернемся к слайдам.
Теперь, когда мы увидели, как работает Gemini Live API, что если вы хотите создать собственный разговорный интерфейс с голосовым управлением?
Gemini Live API позволяет создавать двусторонние голосовые разговоры.
Ваше приложение для Android может передавать аудио с микрофона и кадры с камеры и получать естественные голосовые ответы в реальном времени с низкой задержкой.
В Kotlin настройка выглядит довольно знакомо.
val model = Firebase.ai.liveModel(
modelName = "gemini-3.1-flash-live-preview",
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
},
systemInstruction = "Your main job is to change the color...",
tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)
val session = model.connect(::handler)
session.startAudioConversation(::handler)
session.stopAudioConversation()Вы создаете экземпляр модели Live, настроенной для аудиоответов, и подключаетесь к сеансу с помощью обработчика потока.
Самое главное, что нужно отметить, – SDK полностью обрабатывает все, что связано с WebSocket и протоколами потоковой передачи.
Так что вам не нужно писать код, верно?
Продолжайте писать.
В завершение демонстраций и в преддверии будущего разработки приложений мы хотели бы выделить один мощный инструмент для вашего рабочего процесса – навыки агента Firebase.
# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skillsКроме того, для тех, кто использует Antigravity и Android Studio, мы уже интегрировали Firebase AI Logic непосредственно в процесс адаптации.
В заключение я хочу дать вам три совета. Во-первых, начните создавать агентов. Во-вторых, как можно раньше начните использовать инструменты для работы с ними, например те, что связаны с безопасностью и о которых мы сегодня говорили. В-третьих, используйте навыки агентов везде, где это возможно.
Спасибо!
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model=Firebase.ai.generativeModel("gemini-4-argon")
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}class FireTravelApp : Application() {
lateinit var appContainer: AppContainer
private set
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Firebase.appCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)
} else {
Firebase.appCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)
}
appContainer = AppContainer(this)
}
}---
model: 'gemini-3-flash'
input:
schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.
{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.val generativeModel = Firebase.ai.templateGenerativeModel()
val response = generativeModel.generateContent("storyteller-v1",
mapOf(
"topic" to topic,
"length" to length,
"language" to language
)
)
output.value = response.textimport com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}val model = Firebase.ai.liveModel(
modelName = "gemini-3.1-flash-live-preview",
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
},
systemInstruction = "Your main job is to change the color...",
tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)
val session = model.connect(::handler)
session.startAudioConversation(::handler)
session.stopAudioConversation()# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skills