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, который отвечает требованиям:
- Используйте ML Kit, если задачу решает поддерживаемый готовый API.
- Используйте ML Kit GenAI APIs, если продукту подходят возможности Gemini Nano, языки и матрица устройств.
- Используйте MediaPipe, если функция представляет собой пайплайн восприятия в реальном времени и существует подходящее решение.
- Используйте LiteRT, если нужна собственная модель или контроль над тензорами, ускорителями, предобработкой и постобработкой.
- Используйте облачный или гибридный 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.