Capacitor LocalLLM
on-device AI в мобильных приложениях
Как запустить локальную LLM на iOS и Android через единый TypeScript API — полностью офлайн, без отправки данных в облако.
С Capacitor можно собрать практически любое приложение — не только CRUD'ы и брошюрные сайты, но и сложные нативные штуки с камерой, фоновыми процессами и AI. В этом году команда Capacitor запускает серию Capacitor Showcase, где на реальных примерах разбирают, как делать действительно сложные приложения на единой кодовой базе.
Первый выпуск — Oakline Bank, вымышленный цифровой банк под iOS и Android, собранный целиком на Capacitor. В нём есть дашборды счетов, история транзакций и AI-ассистент OakBot.
Проблема: приватность данных
Когда пользователь спрашивает OakBot «Какой у меня баланс?» или «Сколько я потратил на рестораны в этом месяце?» — ответ требует передать реальные финансовые данные в AI-модель. Если модель в облаке (OpenAI, Anthropic, Google), все личные данные уходят на сторонний сервер. Для финансового приложения это неприемлемо.
Решение — on-device AI. В 2026 году современные мобильные устройства уже умеют запускать модели локально.
Capacitor LocalLLM
Capacitor LocalLLM — нативный плагин, который даёт единый TypeScript API для on-device AI на iOS и Android. Под капотом использует Apple Intelligence (Foundation Models) и Android on-device AI (Gemini Nano).
Типичный вызов выглядит так:
const response = await LocalLLM.prompt({
sessionId: chatSessionId,
instructions: instructions,
prompt: userMessageText,
options: {
temperature: 0.7,
maximumOutputTokens: 256,
},
});
Всё работает полностью офлайн. Не нужно разбираться в различиях iOS/Android AI-фреймворков и подсовывать свои модели — плагин берёт это на себя.
Приватность по умолчанию
Данные не покидают устройство. Серверная часть не получает ни промптов, ни ответов — всё вычисляется локально.
Как OakBot работает с приватными данными
On-device модели обучены на общей информации, но ничего не знают о конкретном пользователе. Чтобы OakBot мог ответить на вопросы вроде «Сколько я потратил на продукты в этом месяце?», нужно инжектить контекст в момент инференса.
Процесс в три шага:
- Забрать данные из локального источника (в демке — in-memory состояние транзакций, загруженное из фейкового API)
- Сериализовать в естественный язык, понятный модели
- Инжектить в контекст сессии до первого сообщения пользователя
В OakBot это делает функция formatTransactionHistory(), превращая массив объектов Transaction в plain-text блок:
Spending by Category (all time):
- Housing: $7,400.00
- Groceries: $1,823.45
Recent Transactions (last 60):
- 2026-03-10: Whole Foods Market (Groceries) - -$87.43
- ...
Total transactions on record: 160
Current balance: $3,241.18
Этот блок передаётся в LocalLLM.warmup() как promptPrefix — предзагрузка контекста до начала диалога:
await LocalLLM.warmup({
sessionId: chatSessionId,
promptPrefix: systemPromptWithTransactionContext,
});
И это работает абсолютно одинаково на iOS и Android — абстракция плагина скрывает все платформенные различия.
Почему plain text, а не JSON?
Два ключевых аргумента:
{"date":"2026-03-10","merchant":"Whole Foods Market","category":"Groceries","amount":-87.43}
- 2026-03-10: Whole Foods Market (Groceries) - -$87.43
Токен-эффективность: каждая JSON-строка повторяет имена полей. На 60 транзакциях разница в токенах становится серьёзной, а у on-device моделей бюджет контекста — жёсткое ограничение.
Качество инференса: маленькие on-device модели (Foundation Models, Gemini Nano) гораздо лучше понимают естественные язык, чем структурированный JSON. GPT-4 переварит любую JSON-свалку, а локальная модель может на ней споткнуться.
Попробовать самому
- Oakline Bank Demo App — исходники приложения, запускайте на современном устройстве с поддержкой on-device AI
- Capacitor LocalLLM plugin — репозиторий плагина (пока статус Capacitor Labs)
- Cap-go/capacitor-llm — альтернативный плагин от сообщества
Статус: Capacitor Labs
LocalLLM запускается как эксперимент. On-device AI на Android ещё нестабилен. Команда Capacitor открыта к фидбеку, баг-репортам и идеям по развитию плагина.
Это первый выпуск Capacitor Showcase. В следующих частях команда обещает разобрать Rich Media, фоновую обработку и другие сложные сценарии. Следите за блогом Ionic.