Зачем это вообще нужно? (Спойлер: не только для приватности)
Смотри, вот классика: ты на встрече, записываешь все на диктофон. Потом заливаешь в облако, ждешь минуты три, пока Whisper распознает речь. Потом еще ждешь, пока GPT-4 все это осмыслит и выдаст конспект. А теперь представь: ты вышел из офиса, интернета нет, а конспект нужен прямо сейчас. Или у тебя конфиденциальные переговоры, и ты не хочешь, чтобы запись улетала куда-то в Калифорнию.
Локальный ИИ на iPhone решает все эти проблемы разом. Но есть нюанс: заставить 3-миллиардную модель работать на процессоре, который в первую очередь создан для скроллинга TikTok - это искусство. Искусство квантования, оптимизации и выбора правильных инструментов.
Актуально на 25.01.2026: За последний год Apple серьезно доработала Neural Engine в чипах A18 и M4. Теперь они справляются с моделями до 7B параметров в квантованном виде без особых проблем. Но 13B - это уже предел, и то с натяжкой.
Какие модели реально работают на iPhone в 2026 году
Забудь про GPT-4, Claude 3 и прочих монстров. На iPhone нужны легкие, но умные модели. Вот что проверено и работает:
| Модель | Размер | Качество суммирования | Скорость на iPhone 16 Pro |
|---|---|---|---|
| Qwen2.5-3B-Instruct | 3B параметров | Отличное для встреч | ~15 токенов/сек |
| Gemma2-2B-it | 2B параметров | Хорошее, быстрее Qwen | ~25 токенов/сек |
| Phi-3.5-mini-instruct | 3.8B параметров | Лучшее в своем классе | ~12 токенов/сек |
| Liquid AI LFM2.5-1.2B-Thinking | 1.2B параметров | Специализированная для рассуждений | ~40 токенов/сек |
Почему именно эти? Qwen2.5-3B - золотая середина между качеством и скоростью. Она понимает контекст встреч, выделяет решения и action items. Gemma2-2B - если нужна максимальная скорость. Phi-3.5-mini - если качество важнее всего. А про Liquid AI LFM2.5 я уже писал - она уникальна своей архитектурой, но требует специфичной настройки.
Не пытайся запихнуть на iPhone модель больше 7B параметров. Даже с квантованием. Она будет работать, но суммирование 30-минутной встречи займет 15 минут. Что бессмысленно.
Магия квантования: Как уменьшить модель в 4 раза без потери качества
Квантование - это не магия, а математика. Берешь веса модели (обычно 32-битные float) и превращаешь их в 8-битные или даже 4-битные целые числа. Размер уменьшается в 4-8 раз, скорость растет.
Но есть подвох: слишком сильно сожмешь - модель превратится в бредогенератор. Проверенные настройки для суммирования встреч:
- Q4_K_M - лучший баланс для 3B-моделей. Качество почти как у оригинала, размер в 4 раза меньше.
- Q5_K_S - если есть место в памяти. Немного лучше, особенно для длинных контекстов.
- IQ3_XXS - экспериментальный метод от llama.cpp. Для 2B-моделей дает прирост скорости в 1.5 раза.
Как это выглядит на практике? Берешь Qwen2.5-3B. Оригинал весит ~6GB. После квантования Q4_K_M - 1.8GB. Разница - между "не помещается в память" и "работает шустро".
Транскрипция: Whisper на Neural Engine
Суммировать нужно текст, а не аудио. Значит, сначала превращаем запись в текст. И здесь у Apple есть секретное оружие - Neural Engine.
Вместо того чтобы тащить полный Whisper large-v3 (1.5GB), используй Whisper-tiny или distil-whisper. Они в 10 раз меньше, а для четкой речи в тихой комнате работают почти так же хорошо.
Самое главное - запускать транскрипцию на Neural Engine, а не на CPU. Разница в скорости - в 3-4 раза. На CoreML это выглядит так:
import CoreML
import WhisperKit
// Конфигурация для Neural Engine
let config = MLModelConfiguration()
config.computeUnits = .all // Используем и CPU, и GPU, и Neural Engine
// Загрузка модели
try whisper = WhisperKit(configuration: config)
// Транскрипция напрямую с микрофона
let result = try await whisper.transcribe(
audioArray: audioSamples,
language: "ru" // Автоматическое определение тоже работает
)
На iPhone 16 Pro 30 минут аудио транскрибируются за 2-3 минуты. В фоне, пока ты идешь на следующую встречу.
Собираем все вместе: архитектура приложения
Вот где начинается настоящая инженерия. Нельзя просто взять и запустить модель. Нужно:
- Записать аудио (AVFoundation)
- Транскрибировать (Whisper + CoreML)
- Подготовить промпт для суммирования
- Запустить LLM (через llama.cpp или Swift Transformers)
- Показать результат и сохранить
Ключевой момент - промпт. Для суммирования встреч нужен специальный шаблон:
Транскрипт встречи:
"""
{transcript}
"""
Суммаризируй эту встречу, выделив:
1. Основные темы обсуждения
2. Принятые решения
3. Action items (кто, что, к когда)
4. Открытые вопросы
5. Следующие шаги
Будь кратким, но информативным. Используй маркеры.
1 Выбор инструментов: не изобретай велосипед
В 2026 году есть три рабочих пути:
- Swift Transformers 1.0 - нативный Swift, идеально для простых сценариев
- llama.cpp + Swift binding - максимальная производительность, но сложнее
- AnyLanguageModel - абстракция над разными бэкендами, если планируешь поддержку и облачных моделей
Для нашего случая (только локальные модели, максимум производительности) - llama.cpp. Да, придется повозиться с биндингами, но результат того стоит.
2 Подготовка модели: конвертация в CoreML
Здесь многие спотыкаются. Берешь квантованную модель в формате GGUF (от llama.cpp) и конвертируешь в CoreML. Но не напрямую!
Правильный путь:
# 1. Скачиваем оригинальную модель (не квантованную)
git clone https://huggingface.co/Qwen/Qwen2.5-3B-Instruct
# 2. Конвертируем в ONNX
python -m transformers.onnx --model ./Qwen2.5-3B-Instruct onnx_output/
# 3. Конвертируем ONNX в CoreML
coremltools.converters.onnx.convert(
model="onnx_output/model.onnx",
minimum_ios_deployment_target="18.0",
compute_units=coremltools.ComputeUnit.ALL
)
Почему так сложно? Потому что прямая конвертация GGUF -> CoreML часто ломает attention layers. А через ONNX все работает стабильно.
Не пытайся конвертировать на Mac с Intel. Результат будет работать, но в 2 раза медленнее. Используй Apple Silicon (M1/M2/M3/M4) - там конвертер генерирует оптимизированные под Neural Engine веса.
3 Оптимизация памяти: игра в тетрис с RAM
iPhone 16 Pro имеет 8GB RAM. Модель 3B в Q4_K_M - 1.8GB. Транскрипт 30-минутной встречи - 0.5GB. Остается ~5.7GB. Вроде много, но система тоже ест память.
Трюки:
- Memory mapping - загружай модель по частям, а не целиком
- Context window 2048 - для суммирования встреч хватает. Не ставь 8192, как для чата
- Очистка кэша - после каждого суммирования сбрасывай context
В llama.cpp это настройки -ngl 35 (сколько слоев на GPU) и -c 2048 (длина контекста).
Готовые решения: когда нет времени на разработку
Если все это кажется слишком сложным (а так и есть), есть готовые варианты:
- KernelAI - 43 модели в одном приложении, включая суммирование
- Lekh AI - специализируется на локальной обработке документов и встреч
- Мое собственное приложение (ссылка в профиле) - заточенное именно под суммирование встреч с русским языком
Но готовые решения имеют ограничения. Нельзя поменять промпт, нельзя добавить свою модель, нельзя оптимизировать под конкретный сценарий.
Ошибки, которые все совершают (и ты совершишь)
Из моего опыта и статьи про ошибки:
| Ошибка | Что происходит | Как исправить |
|---|---|---|
| Квантование до Q2_K | Модель генерирует бессмыслицу | Используй минимум Q4_K_M для суммирования |
| Контекст 8192 токенов | Приложение падает при длинных встречах | 2048 достаточно, предварительно обрежь транскрипт |
| Загрузка модели в main thread | UI зависает на 10 секунд | Загружай в фоне, показывай индикатор |
| Нет кэширования модели | Каждое суммирование ждет загрузки | Держи модель в памяти, пока приложение активно |
Что будет дальше? (Прогноз на 2026-2027)
Сейчас мы на грани. Модели 7B параметров уже почти помещаются на iPhone. Через год, с iPhone 17 и чипом A19, 13B-модели станут нормой.
Но главный тренд - не размер, а эффективность. Та же Liquid AI показывает, что можно делать модели в 10 раз меньше, но с таким же качеством, за счет новой архитектуры.
Мой совет: начни с Qwen2.5-3B-Instruct в Q4_K_M. Это проверенный вариант, который работает здесь и сейчас. Через полгода, когда появятся более эффективные модели, сможешь легко переключиться.
А самое главное - ты больше не зависишь от облаков, API-ключей и интернета. Твои встречи остаются твоими. И суммируются тогда, когда нужно тебе.