Создавайте интеллектуальные приложения для Android: облачные и гибридные вычисления.
8 минут чтения
Добро пожаловать обратно в серию статей блога « Создание интеллектуальных приложений для Android », где мы берем обычное приложение для Android и превращаем его в персонализированное , интеллектуальное и управляемое приложение. В нашей предыдущей статье мы рассмотрели, как создавать интеллектуальные функции на устройстве с помощью Gemini Nano через API Prompt от ML Kit.
В этой статье мы рассмотрим, как можно использовать Firebase AI Logic. для создания облачных и гибридных функций искусственного интеллекта:
- Обоснование ответов в контексте реального мира
- Динамическая маршрутизация запросов между облачным и локальным выполнением с использованием гибридного вывода.
- Перевод контента с использованием пользовательских систем маршрутизации
Иногда для решения конкретных задач требуются модели ИИ с более глубокими знаниями об окружающем мире, гораздо большим контекстным окном или способностью обрабатывать сложные запросы. В таких сценариях мы можем использовать облачные модели.
В других случаях вам нужно получить лучшее из обоих миров: использовать гибридный вывод для работы на устройстве, когда это возможно, чтобы снизить затраты, и одновременно переключаться на облако для обеспечения совместимости со всеми устройствами.

Давайте посмотрим, как мы реализовали три облачные и гибридные функции в Jetpacker :
- помощник музея с опытом работы в интернете
- составление обзора гибридного ресторана
- Чат поддержки отеля с возможностью индивидуальной маршрутизации и переводом в режиме реального времени.
Используйте знания, полученные в рамках программы LLM, для получения актуальной информации. Чат-бот-помощник для музея с знаниями, полученными в рамках программы LLM.
Музеевый ассистент — это интерактивный чат-бот, разработанный для того, чтобы помочь пользователям планировать посещение музеев. Он предоставляет посетителям актуальную информацию о конкретных экспозициях, текущем времени работы, ценах на билеты и многом другом.

При создании функций ИИ распространенной проблемой является получение от модели ответов на основе актуальной, точной и конкретной информации из реального мира. Хотя облачные модели обладают огромными массивами знаний о мире, они могут ничего не знать о сезонных выставках или часах работы в текущий день.

Чтобы преодолеть этот разрыв, мы можем использовать методы привязки, чтобы добавить дополнительный контекст в контекстное окно модели. SDK Firebase AI Logic поддерживает три типа привязки:
- Привязка к URL-адресу : Привязка ответов к содержимому конкретной веб-страницы (например, текущим ценам на билеты или правилам музея).
- Поддержка Google Search : предоставление модели возможности запрашивать актуальную информацию из поискового индекса Google в режиме реального времени.
- Привязка к картам : использование данных о местоположении Google Maps.
В Jetpacker мы динамически формируем доступные инструменты на основе включенных флагов функций и инициализируем генеративную модель с помощью Firebase AI SDK:
// implementation("com.google.firebase:firebase-ai-logic") private var toolList = mutableListOf<Tool>() init { if (ENABLE_SEARCH_GROUNDING) { toolList.add(Tool.googleSearch()) } if (ENABLE_URL_GROUNDING) { toolList.add(Tool.urlContext()) } } private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", systemInstruction = content { text("You are a helpful museum assistant answering questions about a museum. Use plain text.") }, tools = toolList )
Когда пользователь обращается к помощнику, если включена привязка URL-адресов, мы добавляем URL-адреса конкретных музейных ресурсов непосредственно в подсказку:
val groundingText = if (FeatureFlags.ENABLE_URL_GROUNDING) { "\n If the following message above is about the rules and terms to visit Le Louvre, " + "if needed answer this urls ${urlList.joinToString()}" } else { "" } val prompt = "$text $groundingText" var response = chat.sendMessage(prompt)
Гибридный вывод: генерация отзывов на устройстве с использованием глубоких ссылок на Карты.
Не для каждой задачи ИИ требуется облачная модель, и не каждое устройство подключено к интернету. Чтобы помочь разработчикам найти баланс между задержкой, стоимостью и доступностью в автономном режиме, мы недавно представили API Firebase для гибридного вывода .
В Jetpacker функция отзывов о ресторанах позволяет пользователям оставлять отзывы по выбранным темам и автоматически создавать черновики. Чтобы сделать это доступным для всех пользователей, мы отдаем приоритет локальному выполнению с помощью Gemini Nano и переключаемся на облачные модели на устройствах, не поддерживающих Gemini Nano.

// implementation("com.google.firebase:firebase-ai-logic") // implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta03") // Initialize the model with hybrid routing configuration val reviewModel = Firebase.ai.generativeModel( modelName = "gemini-3.1-flash-lite", onDeviceConfig = OnDeviceConfig( inferenceMode = InferenceMode.PREFER_ON_DEVICE ) )
API гибридного вывода поддерживает четыре различных режима маршрутизации:
- PREFER_ON_DEVICE: Приоритет отдается локальному выполнению, а в случае недоступности Gemini Nano переключается на облачное хранилище.
- PREFER_IN_CLOUD: Приоритет отдается выполнению в облаке, и в случае отключения устройства от сети происходит переключение на выполнение на самом устройстве.
- ONLY_ON_DEVICE: Ограничивает выполнение строго данным устройством.
- ONLY_IN_CLOUD: Ограничивает выполнение исключительно облачными средами.
После создания отзыва мы копируем его в буфер обмена и используем Intent для открытия страницы отзывов ресторана непосредственно в Google Maps, обеспечивая удобный пользовательский интерфейс:
private fun copyAndOpenMapsReview(context: Context, reviewText: String, placeId: String) { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText("User Review", reviewText) clipboard.setPrimaryClip(clip) val uri = Uri.parse("https://search.google.com/local/writereview/mobile?placeid=$placeId") val intent = Intent(Intent.ACTION_VIEW, uri).apply { setPackage("com.google.android.apps.maps") } context.startActivity(intent) }
Настраиваемая гибридная маршрутизация: перевод чата поддержки отеля с использованием смоделированных персонажей.
Чат поддержки отеля был создан для того, чтобы пользователи могли завершить логистику и проверить детали бронирования. Эта функция использует системные инструкции для настройки локализованного администратора на ресепшене. Передавая в инструкциях конкретную информацию, такую как предпочтительный язык и данные об отеле, мы можем создать диалоговый образ, представляющий конкретный отель.
private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( systemInstruction = content { text(""" You are a helpful hotel receptionist at $hotelName only speaking $language. Answer politely in $language. The bar closes at 10pm and breakfast is from 7am to 10am. There's someone at the desk 24/7. You can retrieve your luggage from the storage room at the back of the lobby at any time. """) }, modelName = "gemini-3-flash-preview" )
Поскольку ответы администратора поступают на местном языке отеля (например, французский для отеля Le Meurice в Париже), нам необходимо переводить сообщения на предпочитаемый пользователем язык.

В то время как гибридные модели позволяют настраивать простые параметры маршрутизации, сложные сценарии требуют пользовательской логики маршрутизации. В Jetpacker мы реализовали собственный стек маршрутизации, который учитывает:
- Определение языка: Используя встроенный в ML Kit API определения языка , мы можем определить язык входящего сообщения.
- Перевод непосредственно на устройстве (Gemini Nano): API Prompt от ML Kit позволяет переводить распространенные языковые пары прямо на устройстве, экономя пропускную способность и затраты на облачные сервисы.
- Облачный перевод (Gemini 3 Flash): Для более сложных языков мы используем Gemini Flash 3 для получения более качественного перевода.
// implementation("com.google.android.gms:play-services-mlkit-language-id:17.0.0") // ML Kit for Language Identification (powered by Google Play Services) private val languageIdentifier = LanguageIdentification.getClient() // On-device translator model (prefer Gemini Nano) for translating common language pairs private val hybridTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE) ) // Cloud translator model for more complex language pairs private val cloudTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash" )
Когда сообщение необходимо перевести, мы определяем исходный язык и применяем нашу собственную логику маршрутизации, выполняя перевод либо на устройстве, либо в облаке:
fun translateMessage(message: SupportChatMessage) { viewModelScope.launch { // 1. Detect language using ML Kit Language Identification val sourceLang = try { Tasks.await(languageIdentifier.identifyLanguage(message.text)) } catch (e: Exception) { "Undefined" } // 2. Custom routing: we've verified the translation quality for English and Korean with Gemini Nano, and will translate message on-device for those two languages val routeToCloud = sourceLang != "en" && sourceLang != "kr" val prompt = "Translate the following text to $selectedLanguage. Just return the translated sentence: ${message.text}." val (translatedText, routePrefix) = if (routeToCloud) { val result = cloudTranslationModel.generateContent(prompt) result.text to "[Cloud]" } else { val result = hybridTranslationModel.generateContent(prompt) result.text to "[On-Device]" } if (translatedText != null) { _translations.update { current -> current + (message.id to "$routePrefix: $translatedText") } } } }
В этом примере пользовательская логика маршрутизации учитывает только исходный и целевой языки перевода. Однако, в зависимости от сценария использования вашего приложения, вы можете расширить логику маршрутизации, включив в нее другие факторы, такие как версия модели устройства, сетевое подключение, состояние батареи и многое другое.
Обеспечение безопасности конвейеров ИИ: Firebase App Check
Наконец, использование ИИ в облаке открывает возможности для злоупотребления ключами API или несанкционированного выставления счетов. Для защиты вызовов API мы интегрировали Firebase App Check , используя как Play Integrity (в производственной среде), так и локальный Debug Provider (для локальной разработки или эмуляторов).
В файле JetPackerApplication.kt мы устанавливаем отладочный провайдер при запуске и запускаем анонимную аутентификацию для установления безопасной пользовательской сессии:
// implementation("com.google.firebase:firebase-appcheck-playintegrity") // implementation("com.google.firebase:firebase-appcheck-debug") // implementation("com.google.firebase:firebase-auth") override fun onCreate() { super.onCreate() Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance() ) Firebase.auth.signInAnonymously() }
При локальной сборке на эмуляторе App Check выводит локальный секретный токен в logcat:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
После регистрации в консоли Firebase локальные запросы полностью проверяются и аутентифицируются с помощью App Check, что защищает наш бэкэнд и позволяет нам тестировать приложение локально.
Заключение
By combining cloud model capabilities (grounding, system instructions) with on-device capabilities (hybrid routing, translation, security app checks), we created a travel app that is smart, secure, and available offline.
Полный исходный код Jetpacker можно найти на GitHub , а для начала работы изучите документацию Firebase:
Документация Firebase AI Logic
API гибридного вывода Firebase
Узнать больше
Ознакомьтесь с другими частями этой серии статей в блоге:
Часть 1 : Введение в приложение и общий обзор.
Часть 2 : Встроенный интеллект. Подробное изучение API GenAI от ML Kit и Gemini Nano для создания функций, ориентированных на конфиденциальность, таких как составление кратких описаний маршрутов, анализ квитанций и локальная обработка звука.
Часть 3 (в этом посте!): Гибридные и облачные методы рассуждений. Узнайте, как использовать Firebase AI Logic для обоснования ответов LLM реальными данными, такими как Google Maps и веб-контекст.
Часть 4: Системная интеграция. Интеграция с интеллектуальной системой Android с использованием AppFunctions.
Часть 5 (скоро): Внутриприложениевые агентские рабочие процессы. Расширьте возможности приложения с помощью комплексного помощника по бронированию на базе A2UI и ADK.
Хотите узнать больше о разработке под Android? Подписывайтесь на Android Developers на YouTube или LinkedIn !
Все фрагменты кода в этой статье блога защищены следующим уведомлением об авторских правах:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
ИнструкцииДобро пожаловать обратно в серию статей блога «Создание интеллектуальных приложений для Android», где мы берем обычное приложение для Android и превращаем его в персонализированное, интеллектуальное и управляемое агентом приложение. В нашей предыдущей статье мы представили Jetpacker, демонстрационное приложение, которое мы будем использовать на протяжении всей этой серии.
Caren Chang • 6 мин чтения
ИнструкцииJetpacker — это демонстрационное техническое приложение, разработанное нашей командой с нуля для конференции Google I/O в этом году (с использованием технологии Antigravity). По своей сути, Jetpacker помогает пользователям планировать, исследовать и наслаждаться своим следующим большим приключением.
Jolanda Verhoef • Чтение, 4 минуты
ИнструкцииДобро пожаловать обратно в серию статей блога «Создание интеллектуальных приложений для Android», где мы берем обычное приложение для Android и превращаем его в персонализированное, интеллектуальное и управляемое агентом приложение. В нашей предыдущей статье мы рассмотрели, как использовать Firebase AI Logic для создания облачных и гибридных функций искусственного интеллекта.
Ben Weiss • 6 мин чтения
Получайте еженедельно самые свежие новости о разработке Android прямо на свою электронную почту.




