Розробка AI-асистента на пристрої (On-Device)
Медичні щоденники, корпоративні документи, особисті нотатки — дані не повинні покидати пристрій. On-device LLM — це архітектурне рішення, яке гарантує приватність. Ми реалізували такі проєкти для клієнтів у MedTech та FinTech: локальний асистент працює без інтернету, використовуючи лише обчислювальні ресурси смартфона. Наша команда має 5-річний досвід у мобільній розробці та понад 30 проєктів з on-device AI.
Сучасні флагмани здатні запускати 3B-моделі в INT4 квантизації зі швидкістю 15–30 токенів/сек — достатньо для діалогового асистента. Однак вибір моделі та рантайму критично впливає на продуктивність і сумісність.
Яку модель і рантайм обрати для on-device?
Apple пропонує два шляхи для iOS. Core ML — стабільний, підтримує iOS 16+, автоматично використовує Neural Engine. Модель конвертується через coremltools з PyTorch/GGUF. Обсяг після конвертації Llama 3.2 3B в INT4 — близько 1.8 ГБ.
import CoreML
class OnDeviceLLM {
private let model: MLModel
init() throws {
let config = MLModelConfiguration()
config.computeUnits = .all // CPU + GPU + Neural Engine
model = try LlamaModel(configuration: config).model
}
func generate(prompt: String) -> AsyncStream<String> {
AsyncStream { continuation in
Task.detached(priority: .userInitiated) {
// tokenize → autoregressive decode → yield tokens
let tokens = self.tokenize(prompt)
for _ in 0..<512 {
let nextToken = self.model.predictNextToken(tokens)
continuation.yield(self.detokenize(nextToken))
if nextToken == self.eosTokenId { break }
}
continuation.finish()
}
}
}
}
Apple MLX (Swift framework, iOS 16+) — більш зручний API, але вимагає iOS 16+ і працює краще на пристроях з уніфікованою пам'яттю. Офіційні конвертовані моделі від Apple доступні на Hugging Face.
llama.cpp — найбільший вибір моделей у форматі GGUF, активно підтримується спільнотою. Інтеграція через C++ bridging header складніша, ніж Core ML, але дає доступ до будь-якої GGUF-моделі.
На Android більше варіантів і менше єдиного стандарту. MediaPipe LLM Inference API (Google) — найбільш зріле рішення для Android. Підтримує Gemma 2B/7B, Phi-2, Llama 2, ExportedModels у форматі TFLite. Інтеграція через клас LlmInference:
val options = LlmInference.LlmInferenceOptions.builder()
.setModelPath("/data/local/tmp/gemma-2b-it-gpu-int4.bin")
.setMaxTokens(1024)
.setResultListener { partialResult, done ->
runOnUiThread { appendText(partialResult) }
}
.build()
val llmInference = LlmInference.createFromOptions(context, options)
llmInference.generateResponseAsync(prompt)
TFLite з кастомним LLM runner — гнучкіше, але вимагає більше роботи з інтеграції.
ExecuTorch (Meta) — офіційний рантайм для Llama на Android, підтримує Llama 3.x напряму без конвертації. Компілюється через buck2, що нетривіально налаштувати в Gradle-проєкті.
| Пристрій | RAM | Рекомендована модель | Токени/сек |
|---|---|---|---|
| iPhone 15 Pro / 16 | 8 ГБ | Llama 3.2 3B Q4_K_M | 20–30 |
| iPad Pro M4 | 16 ГБ | Llama 3.1 8B Q4_K_M | 15–25 |
| Samsung S24 Ultra | 12 ГБ | Phi-3 Mini Q4 | 25–35 |
| Бюджетні Android | 4–6 ГБ | Phi-3 Mini Q2 / Gemma 2B | 5–15 |
| Старі пристрої | 3 ГБ | Не рекомендується | — |
Намагатися запустити 7B+ модель на телефоні з 4 ГБ RAM — гарантований OOM crash. Ми допомагаємо підібрати оптимальну модель під ваш пристрій та сценарій. При переході на on-device AI клієнти економлять до 80% на витратах на серверну інфраструктуру та хмарні обчислення.
Порівняння рантаймів для on-device AI
| Runtime | Платформа | Сильні сторони | Обмеження |
|---|---|---|---|
| Core ML | iOS | Стабільність, підтримка Neural Engine | Тільки iOS, конвертація через coremltools |
| MLX | iOS | Простий API, швидке прототипування | iOS 16+, вимагає уніфіковану пам'ять |
| MediaPipe LLM | Android | Готовий API, підтримка Google | Обмежений набір моделей |
| ExecuTorch | Android | Рідна підтримка Llama, малий розмір | Складна збірка, документація в розробці |
| llama.cpp | iOS та Android | Максимальний вибір моделей | Складна інтеграція, low-level API |
Як ми інтегруємо AI-асистента: покроковий план
- Аналіз цільових пристроїв — визначаємо мінімальні характеристики (RAM, чипсет, версія ОС) і підбираємо модель з оптимальним співвідношенням якість/продуктивність.
- Конвертація та квантизація — використовуємо INT4 (Q4_K_M) для балансу розміру та точності. Для старих пристроїв — Q2_K. Конвертуємо в Core ML / MediaPipe / ExecuTorch.
- Розробка UI та архітектури — створюємо екран завантаження моделі з прогресом, інтерфейс чату зі стрімінгом токенів, налаштовуємо Deep Link для виклику асистента.
- Інтеграція рантайму та тестування — підключаємо обраний runtime, пишемо обгортку для генерації та токенізації. Тестуємо на 5+ фізичних пристроях.
- Оптимізація теплового режиму — реалізуємо моніторинг
ProcessInfo.thermalState(iOS) абоPowerManager.thermalStatus(Android) і адаптивне зниження навантаження. - Деплой та моніторинг — налаштовуємо віддалене оновлення моделі через маніфест, додаємо аналітику використання та краш-репорти.
Чому важлива правильна стратегія завантаження моделі?
Модель не можна пакувати в bundle застосунку — 1.5–3 ГБ одразу призведуть до відхилення в App Store та відлякують користувачів великим розміром APK. Правильний підхід: перший запуск → пропозиція завантажити модель → фонове завантаження з прогрес-баром → верифікація контрольної суми.
На iOS: URLSession.downloadTask з backgroundConfiguration — завантаження продовжується при переході у фон. Файл зберігається в Application Support (не Caches — там може бути видалений системою при нестачі місця). На Android: DownloadManager або WorkManager з NetworkType.UNMETERED constraint — користувач не витратить мобільний трафік.
Оновлення моделі: сервер публікує маніфест з поточною версією та SHA-256 сумою. При запуску застосунок перевіряє маніфест, якщо версія змінилася — пропонує оновити.
Чому важливо керувати тепловим станом?
Inference на Neural Engine/GPU гріє пристрій. Для довгих генерацій (>200 токенів) потрібно моніторити тепловий стан через ProcessInfo.thermalState (iOS) — при .serious знижувати n_threads або тимчасово перемикатися на CPU-only inference. На Android — PowerManager.thermalStatus. Батарейне споживання: 3B модель на iPhone 15 Pro витрачає ~5–8% батареї на 100 запитів. Це менше, ніж стрімінг відео, тому попередження користувачу не потрібні.
Що входить в роботу з інтеграції AI-асистента
- Аналіз цільових пристроїв та підбір моделі під їх характеристики.
- Конвертація моделі у формати Core ML / TFLite / MediaPipe.
- Розробка UI для завантаження моделі та взаємодії.
- Інтеграція стрімінгу токенів та управління пам'яттю.
- Тепловий моніторинг та адаптивне зниження навантаження.
- Тестування на фізичних пристроях (5+ популярних моделей).
- Документація з підтримки та навчання команди.
Орієнтовні терміни
Базовий on-device асистент (одна платформа, Core ML або MediaPipe) — 4–5 тижнів. Крос-платформа з управлінням завантаженням, оновленнями та тепловим моніторингом — 8–12 тижнів. Вартість розраховується індивідуально залежно від складності та необхідної продуктивності. Замовте консультацію — ми підготуємо план та оцінку.
Детальніше про Core ML див. офіційну документацію.
Зв'яжіться з нами, щоб обговорити ваш проєкт. Ми гарантуємо стабільну роботу на пристроях з 4 ГБ RAM і вище.







