Инструкции

Создавайте интеллектуальные приложения для Android: вывод информации непосредственно на устройстве.

6 минут чтения
Посмотреть профиль Карен Чанг
Caren Chang инженер по связям с разработчиками

Добро пожаловать обратно в серию статей блога «Создание интеллектуальных приложений для Android», где мы берем обычное приложение для Android и превращаем его в персонализированное , интеллектуальное и управляемое приложение. В нашей предыдущей статье мы представили Jetpacker , демонстрационное приложение, которое мы будем использовать на протяжении всей этой серии.

В этой статье мы расскажем, как использовать Gemini Nano через API Prompt в ML Kit для создания интеллектуальных функций на устройстве.

Создание интеллектуальных функций непосредственно на устройстве подразумевает возможность обработки запросов и данных непосредственно на устройстве без отправки данных на сервер. Это дает ряд преимуществ:

  • Обработка пользовательских данных может осуществляться локально на устройстве, что обеспечивает конфиденциальность пользователя.
  • Функциональность модели остается надежной даже при нестабильном или отсутствующем интернет-соединении.
  • Дополнительные затраты на облачные вычисления отсутствуют, поскольку все работает на оборудовании пользователя.

Учитывая преимущества использования приложения непосредственно на устройстве, мы определили три функции, которые можно добавить в Jetpacker для улучшения пользовательского опыта: составление сводных маршрутов поездок, управление расходами и запись голосовых заметок.

Screenshot 2026-07-02 at 12.57.08PM.png
Функции Jetpacker на устройстве: составление сводных маршрутов поездок, управление расходами и голосовые заметки.

Высококачественное, специально разработанное резюме коротких текстов.

Экран с маршрутом предоставляет пользователям краткий обзор всех мероприятий, запланированных на данную поездку. Поскольку этот экран содержит много информации, он может быстро стать перегруженным. Чтобы помочь пользователям подготовиться, не чувствуя себя перегруженными, мы можем добавить вверху раздел «Подготовка к поездке» .

Screenshot_20260702_111934.png
Романтическое путешествие в Париж можно описать как классическое парижское приключение, сочетающее искусство, достопримечательности и изысканную кухню. Также добавлены советы и несколько полезных фраз.

Введя маршрут поездки и попросив LLM составить его краткое описание, мы можем получить сводный отчет о путешествии, а также советы по сбору багажа и полезные местные фразы. Это отличный пример использования модели на устройстве по нескольким причинам:

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

Для разработки приложений с использованием встроенных систем мы применяем Gemini Nano — самую эффективную модель Google, оптимизированную для мобильных устройств. Gemini Nano была впервые представлена ​​несколько лет назад и сейчас работает на более чем 140 миллионах устройств. Последняя версия модели, Gemini Nano 4, построена на архитектурной основе недавно выпущенной модели Gemma 4 и дополнительно оптимизирована для максимальной эффективности использования батареи и повышения производительности.

Используя API Prompt в ML Kit, мы можем воспользоваться новыми возможностями модели Gemini Nano 4 для создания прототипов функций нашего устройства. Мы создадим запрос, включающий маршрут поездки, и попросим модель сгенерировать краткое описание вместе с советами по подготовке.

Поиск оптимального варианта ответа обычно требует нескольких итераций, и приложение AICore идеально подходит для этого этапа процесса. После включения предварительной версии AICore для разработчиков мы можем загрузить предварительные модели, такие как Gemini Nano 4, чтобы протестировать варианты ответов и увидеть ожидаемые результаты работы модели. После нескольких итераций с вариантом ответа нам удалось улучшить скорость ответа с 13 секунд до менее чем 2 секунд! Ознакомиться с окончательной реализацией кода и вариантом ответа можно здесь.

[ЗДЕСЬ НАХОДИТСЯ МАТЕРИАЛ - ФАЙЛ СЛИШКОМ БОЛЬШОЙ НА ДАННЫЙ МОМЕНТ]

Локальная обработка конфиденциальных пользовательских данных.

Далее, чтобы помочь пользователям сделать свою поездку еще приятнее, мы создадим простой менеджер расходов, который избавит от необходимости вручную сортировать чеки и рассчитывать бюджеты.

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

Кроме того, Gemini Nano 4 обладает улучшенными возможностями моделирования для мультимодальности, особенно для задач распознавания изображений, таких как оптическое распознавание символов (OCR) и извлечение визуальных данных, что делает его отличным решением для таких задач, как извлечение информации из чеков.

В данном случае запрос проанализирует изображение чека и выведет такую ​​информацию, как: сгенерированный заголовок, потраченная сумма и категория расходов. Чтобы гарантировать, что модель выводит информацию в предпочтительном формате, мы можем использовать API структурированного вывода ML Kit для беспрепятственного вывода объекта данных Kotlin, который мы определим.

// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")

@Generable("Information extracted from an expense receipt")
data class ParsedReceipt(
  @Guide("Generated title for the expense less than 6 words. Based on restaurant or activity name.")
  val title: String,
  @Guide("Total amount of the expense. Look for values at the bottom and words like total or balance due.")
  val amount: Double,
  @Guide("Type of expense", enumValues = ["travel", "food", "shopping", "entertainment", "other"])
  val category: String,
)

val prompt = "Determine if the image is a receipt or expense. 
    If it is NOT a receipt or expense, output the text 'NOT_A_RECEIPT'.
    Otherwise, parse the receipt information."

val request = generateContentRequest(ImagePart(bitmap), TextPart(prompt)) {}
val requestWithStructuredOutput = generateTypedContentRequest(request, ParsedReceipt::class)

// Define the configuration for Gemini Nano 4 E4B preview model  
// When selecting models, you can specify which performance charactertists are most important
//  for your use case. Use ModelPreference.FULL when you want to prioritize reasoning power over speed. 
//  Use ModelPreference.FAST when complex logic is not required and latency is a priority.
val previewFullConfig = generationConfig {
    modelConfig = modelConfig {
        releaseStage = ModelReleaseStage.PREVIEW
        preference = ModelPreference.FULL
    }
}

val geminiNano4BPreviewModel = Generation.getClient(previewFullConfig)
val response = geminiNano4BPreviewModel.generateContent(requestWithStructuredOutput)
val parsedReceipt: ParsedReceipt? = response.candidates.firstOrNull()?.response

Мультимодальный ввод

Наконец, чтобы помочь пользователям записывать аудиозаметки во время поездки, давайте создадим полноценную функцию голосовых заметок на устройстве. Используя API распознавания речи ML Kit , мы позволим пользователям записывать короткие голосовые заметки, которые автоматически будут преобразованы в текст. С помощью преобразованного текста мы будем использовать API подсказок ML Kit, чтобы определить, какое действие в поездке связано с записанной голосовой заметкой, что позволит пользователям легко вспоминать свою поездку, просматривая маршрут.

Screenshot_20260702_115529.png
В программе римского отпуска представлены фрагменты голосовых заметок.

API распознавания речи ML Kit GenAI позволяет преобразовывать аудиоконтент в текст непосредственно на устройстве, используя два различных режима. Базовый режим использует традиционную модель распознавания речи на устройстве и доступен на большинстве устройств Android с уровнем API 31 и выше. Расширенный режим использует Gemini Nano для обеспечения более широкого языкового охвата и лучшего качества и в настоящее время поддерживается на устройствах Pixel 10.

Для нашей функции мы объединили API распознавания речи с API подсказок GenAI из набора инструментов машинного обучения:

// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

val tripEvents = ... 

// Set up speech recognition
val speechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(speechRecognizerOptions)

suspend fun transcribeVoiceNote(recognizer: SpeechRecognizer) {
    // Display partial text as the user is recording audio
    var partialTextResponse = ""

    // Display the full text once user is finished recording audio
    var transcription = ""

    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    recognizer.startRecognition(request).collect { response ->
        when (response) {
            is SpeechRecognizerResponse.PartialTextResponse -> {
                partialTextResponse = response.text
            }
            is SpeechRecognizerResponse.FinalTextResponse -> {
                transcription = response.text
                processAndCategorizeVoiceNote(transcription, tripEvents)
            }
        }
    }
}

fun processAndCategorizeVoiceNote(transcribedVoiceNote: String, events: List<Event>) {
    val prompt = "Given the voice note $transcribedVoiceNote
     and the following events for this trip: $events, rewrite this transcription
     to remove filler words. Then, identify which events from the
     list this rewritten transcription matches to."

     // Utilize ML Kit's Prompt API to process voice note and tag it with the relevant trip activities
     Generation.getClient().generateContent(prompt)
}

Заключение

Используя API GenAI от ML Kit, мы смогли воспользоваться преимуществами Gemini Nano для разработки полностью интеллектуальных функций для приложения JetPacker, работающих непосредственно на устройстве, и обеспечить улучшенный пользовательский опыт без каких-либо дополнительных затрат на облачные сервисы.

Полный исходный код Jetpacker можно найти на Github, а также посмотреть видео «Создавайте интеллектуальные приложения для Android с помощью ИИ от Google», чтобы узнать больше о том, как интегрировать интеллектуальные функции непосредственно в ваше приложение, используя модели на устройстве, облачные вычисления и новейшие агентные фреймворки.

Узнать больше

Ознакомьтесь с другими частями этой серии статей в блоге:

Часть 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
Автор:
Продолжить чтение