← Назад к статьям
Capacitor Showcase

Capacitor LocalLLM
on-device AI в мобильных приложениях

Как запустить локальную LLM на iOS и Android через единый TypeScript API — полностью офлайн, без отправки данных в облако.

📅 14 мая 2026 · 📖 8 мин · 🏷️ Capacitor · AI · iOS · Android

С 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 мог ответить на вопросы вроде «Сколько я потратил на продукты в этом месяце?», нужно инжектить контекст в момент инференса.

Процесс в три шага:

  1. Забрать данные из локального источника (в демке — in-memory состояние транзакций, загруженное из фейкового API)
  2. Сериализовать в естественный язык, понятный модели
  3. Инжектить в контекст сессии до первого сообщения пользователя

В 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?

Два ключевых аргумента:

✕ JSON — больше токенов

{"date":"2026-03-10","merchant":"Whole Foods Market","category":"Groceries","amount":-87.43}

✓ Natural language — компактнее

- 2026-03-10: Whole Foods Market (Groceries) - -$87.43

Токен-эффективность: каждая JSON-строка повторяет имена полей. На 60 транзакциях разница в токенах становится серьёзной, а у on-device моделей бюджет контекста — жёсткое ограничение.

Качество инференса: маленькие on-device модели (Foundation Models, Gemini Nano) гораздо лучше понимают естественные язык, чем структурированный JSON. GPT-4 переварит любую JSON-свалку, а локальная модель может на ней споткнуться.

Попробовать самому

⚠️

Статус: Capacitor Labs

LocalLLM запускается как эксперимент. On-device AI на Android ещё нестабилен. Команда Capacitor открыта к фидбеку, баг-репортам и идеям по развитию плагина.

Это первый выпуск Capacitor Showcase. В следующих частях команда обещает разобрать Rich Media, фоновую обработку и другие сложные сценарии. Следите за блогом Ionic.