Перейти к содержанию

AI на Android

Android-приложение может использовать AI без обучения моделей внутри приложения. Основные инженерные решения - какая возможность нужна продукту, где выполняется инференс и насколько полный контроль над моделью и обработкой данных нужен команде.

Этот домен посвящён интеграции AI-функций в Android-приложения: выбору решения, обработке входных и выходных данных, жизненному циклу, производительности, приватности, безопасности и тестированию. Обучение моделей рассматривается только там, где оно меняет мобильный контракт.

Основные подходы

Подход Когда подходит Типичные примеры
ML Kit Готовые on-device задачи для изображений и языка Распознавание текста, сканирование штрихкодов, распознавание лиц, перевод
ML Kit GenAI APIs Поддерживаемые задачи Gemini Nano на совместимых устройствах Суммаризация, переписывание, описание изображений, генерация по промпту
LiteRT Запуск собственных моделей с прямым контролем инференса Классификация, сегментация, эмбеддинги, аудиомодели
MediaPipe Межплатформенные пайплайны восприятия в реальном времени Ключевые точки рук, отслеживание позы, обработка изображения или аудио
Облачный или гибридный AI Крупные модели, централизованные обновления и серверная оркестрация Чат, мультимодальный анализ, RAG

Подходы можно комбинировать. Например, ML Kit может локально извлечь текст, после чего облачная модель интерпретирует его, если приложение получило подходящее согласие на отправку данных.

On-device, облачный и гибридный инференс

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

Облачный инференс даёт доступ к более крупным моделям и централизованным обновлениям, но добавляет сетевую задержку, риск недоступности, стоимость backend, аутентификацию и требования к обработке данных. Не помещайте неограниченный секрет провайдера в APK: используйте безопасный для мобильного клиента SDK с защитой от злоупотреблений или выполняйте запросы через backend.

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

Выбор стека

Начинайте с самого высокоуровневого API, который отвечает требованиям:

  1. Используйте ML Kit, если задачу решает поддерживаемый готовый API.
  2. Используйте ML Kit GenAI APIs, если продукту подходят возможности Gemini Nano, языки и матрица устройств.
  3. Используйте MediaPipe, если функция представляет собой пайплайн восприятия в реальном времени и существует подходящее решение.
  4. Используйте LiteRT, если нужна собственная модель или контроль над тензорами, ускорителями, предобработкой и постобработкой.
  5. Используйте облачный или гибридный API, если возможности модели или централизованная работа важнее ограничений по задержке, offline-режиму, приватности и стоимости.

Не выбирайте низкоуровневый runtime только ради гибкости. Контракт модели, предобработка, постобработка, совместимость и проверка производительности становятся долгосрочной ответственностью команды.

Архитектура приложения

UI-код не должен зависеть от выбранного runtime:

Камера / файл / пользовательский ввод
                  |
                  v
       Валидация и предобработка
                  |
                  v
        Интерфейс AI-функции
                  |
                  +-- реализация на ML Kit
                  +-- реализация на LiteRT / MediaPipe
                  +-- облачная реализация
                  |
                  v
          Доменный результат
                  |
                  v
          ViewModel и UI state

Возвращайте доменные типы вроде RecognizedText, DetectedObject или Classification, а не тензоры или объекты ответа SDK. Так детерминированную обработку проще тестировать, а реализацию можно заменить без переписывания UI.

Инференс не должен блокировать главный поток. Камеру и аудиопоток следует считать источниками с обратным давлением: ограничивайте параллельную работу, обрабатывайте только тот объём данных, который функция успевает потреблять, и всегда освобождайте кадры и другие ресурсы.

Что важно в production

Доступность и жизненный цикл

Проверьте версию Android, аппаратные возможности, требования к Google Play services или системным сервисам, поддерживаемые языки и необходимость загрузки модели. При необходимости отображайте состояния недоступности, загрузки, готовности, занятости и ошибки.

У on-device генеративных API матрица поддержки уже, чем у обычных API ML Kit. Результат также может отличаться между версиями модели. Текущие ML Kit GenAI APIs могут применять квоты ресурсов для приложения и разрешать инференс только на переднем плане, поэтому доступность нужно проверять во время выполнения, а не определять только по версии ОС.

Производительность

Проводите измерения на репрезентативных физических устройствах, а не только на эмуляторе или флагмане. Отслеживайте холодную инициализацию, задержку прогретого инференса, память и аллокации, размер загрузки, расход батареи, температурное поведение и пропускную способность потоков. Выбирайте ускорение на CPU, GPU или NPU только после измерения задержки и совместимости на целевом наборе устройств.

Приватность, защита и безопасность результата

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

Считайте AI-результат недоверенным вводом для остального приложения. Проверяйте форматы и диапазоны, применяйте правила безопасности продукта и требуйте явного подтверждения перед значимыми действиями. Предусмотрите fallback для недоступной модели, результата с низкой уверенностью и сетевой ошибки.

Тестирование и оценка качества

Отделяйте детерминированные предобработку и постобработку от адаптера runtime. Проверяйте преобразования unit-тестами с фиксированными входами и поддерживайте небольшой версионируемый набор данных, покрывающий нужные языки, освещение, ориентации, классы устройств и некорректный ввод.

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

Связанные темы

  • ML Kit - готовые on-device API для распространённых мобильных задач.
  • LiteRT - собственные модели и прямое управление инференсом.

Источники: AI на Android, ML Kit, ML Kit GenAI APIs, LiteRT для Android, MediaPipe Solutions.