Запуск голосового агента на устройстве
один конвейер, три бюджета памяти.
Локальный голосовой агент — это не одна модель, а конвейер из четырёх: детектор голосовой активности, распознавание речи, языковая модель и синтез речи, связанные конечным автоматом, управляющим очередями реплик. Конвейер одинаков и на телефоне, и на ноутбуке. Меняется то, какая модель стоит в каждой ячейке, и это решают два числа: сколько у вас памяти и какой ускоритель вы кормите.
Запомнить нужно всю петлю, а не одну модель: восприятие речи (STT) + генерация ответа (LLM) + синтез речи (TTS) — всё умещается внутри: ~1,2 ГБ на iPhone, ~1,5 ГБ на Galaxy S23 и меньше ~4 ГБ на Mac с настоящим «мозгом» для беседы.
Переносимая часть — это конвейер.
Оркестрация живёт в speech-core как чистый конечный автомат на C++, не зависящий от моделей: четыре этапа — это интерфейсы, в которые вы вставляете любой бэкенд — ONNX, LiteRT, CoreML/MLX на устройстве или даже облачный API — так что один и тот же конвейер запускает вызыватель инструментов на 270M на телефоне и «мозг» Gemma 4 на Mac.
Одна петля, четыре этапа. Слово-активатор, AEC и улучшение — необязательные шаги до VAD; именно вызовы инструментов у LLM позволяют ему действовать, а не только отвечать.
Оркестратор — это VoicePipeline в speech-core. Он ведёт определение реплик, прерывания, историю диалога, цикл вызова инструментов и очередь речи — но без собственных моделей. Каждый этап заменяем за интерфейсом (VADInterface, STTInterface, LLMInterface, TTSInterface), который вы реализуете через ONNX Runtime, LiteRT, CoreML/MLX (через родственную speech-swift) или даже облачный API. Есть и более лёгкие режимы — Echo (VAD → STT → TTS) и TranscribeOnly (VAD → STT → текст).
Сначала NPU, и вся петля умещается в ~1,5 ГБ.
На телефоне ограничение — это память, батарея и нагрев, а не сырая вычислительная мощность. Правильная цель — нейропроцессор (NPU): Neural Engine от Apple на iOS, NNAPI / Hexagon на Android. Он гоняет квантованные трансформеры за долю энергии CPU или GPU и оставляет CPU свободным для звука и интерфейса.
Почему NPU, а не CPU или GPU? NPU — это движок потока данных фиксированной функции, созданный для одной задачи — умножения-накопления низкой точности, из которого состоят нейросети. Он держит веса в SRAM на кристалле прямо рядом с вычислительными блоками и пропускает выборку/декодирование инструкций и широкие универсальные тракты данных, которые съедают большую часть энергии CPU или GPU. Перемещение данных стоит куда дороже вычислений, поэтому держать и то и другое локально — и есть выигрыш: те же матричные умножения идут за долю ватт — без троттлинга, без разряда батареи, а CPU свободен для всего остального.
Поэтому мобильный конвейер — это малые, квантованные, дружественные к NPU модели: Silero VAD, Parakeet-EOU 120M (лёгкий потоковый STT со встроенным детектором конца реплики), FunctionGemma 270M («мозг» вызова инструментов) и Kokoro-82M либо Supertonic-3 для голоса. Замеры на устройстве:
| Этап · модель | iPhone 16 Pro (CoreML / ANE) | Galaxy S23 (LiteRT / ONNX, CPU) |
|---|---|---|
| STT · Parakeet-EOU 120M | 0.04 RTF · 297 MB | 0.21 RTF · 232 MB |
| STT · Omnilingual 300M | 0.28 RTF · 495 MB | 0.15 RTF · 831 MB |
| TTS · Kokoro-82M | 0.08 RTF · 676 MB | 0.53 RTF · 640 MB |
| TTS · Supertonic-3 99M | 0.15 RTF · 956 MB | 0.34 RTF · 832 MB |
| LLM · FunctionGemma 270M | 128 tok/s · 236 MB | 118 tok/s · 611 MB |
RTF = время по часам ÷ секунды аудио (меньше — быстрее; <1,0 быстрее реального времени). Пиковая память — по каждой модели отдельно.
Каждый этап опережает реальное время. Загруженные вместе для живого агента, резидентный рабочий набор — это ~1,2 ГБ на iPhone и ~1,5 ГБ на Galaxy S23: разрыв — почти целиком LLM. FunctionGemma занимает 236 МБ на ANE против 611 МБ на CPU S23. iOS уже работает на NPU (отсюда 0,04 RTF у STT и 128 tok/s у LLM); Android сегодня даёт реальное время на CPU, а делегаты NNAPI/Hexagon — это плюс, а не обязательное условие.
Попробуйте: Examples/iOSEchoDemo запускает Parakeet + Silero + Kokoro как полный эхо-цикл на iPhone; сторона Android живёт в speech-android, оборачивая тот же конвейер. (Examples/iOSBenchmark — инструмент, стоящий за цифрами iPhone выше.)
Настоящий LLM, управляющий машиной, — и всё ещё меньше 4 ГБ.
На Mac ограничение ослабевает: единая память, общая для CPU и GPU Metal. Те же четыре этапа, модели крупнее и, главное, настоящий «мозг» для беседы вместо вызывателя инструментов на 270M — и вся петля всё равно умещается в ~4 ГБ.
LLM — это «мозг», и здесь размер модели перестаёт быть необязательным. После тестов работу получили две модели: FunctionGemma 270M на мобильных (достаточно, чтобы выдать вызов инструмента, — всё, что нужно агенту на телефоне) и Gemma 4 E2B/E4B (4-bit MLX) на десктопе (настоящая многоходовая беседа и рассуждение, которые держатся, оставаясь лёгкими). Заманчивая середина — компактная чат-голова меньше 1B — выглядит бесплатной по размеру, но шатается в реальной многоходовой беседе, поэтому не прошла. Важен не скачок 0,27B → 0,8B; важен переход от вызовов инструментов FunctionGemma к беседе Gemma 4.
Остальной стек тоже поднимается: на десктопе лёгкий Parakeet-EOU меняется на Parakeet-TDT (полностью многоязычный), а TTS везде остаётся Supertonic-3 — быстрый, 44,1 кГц, стабильный. Более тяжёлые модели TTS с zero-shot-клонированием мы намеренно пропускаем; клонирование недостаточно надёжно, чтобы жить внутри всегда включённого агента.
| Этап | Мобильные | Десктоп (Mac / MLX) |
|---|---|---|
| VAD | Silero v6.2.1 | Silero v6.2.1 |
| STT | Parakeet-EOU (streaming) | Parakeet-TDT (multilingual) |
| LLM | FunctionGemma 270M | Gemma 4 E2B/E4B |
| TTS | Kokoro-82M / Supertonic-3 | Supertonic-3 |
| Resident set | iPhone ~1.2 GB · S23 ~1.5 GB | ~4 GB |
Этот десктопный путь и поставляет Runner Agent — нотаризованное приложение macOS, которое запускает Mic → VAD → Parakeet-TDT → Gemma 4 → Supertonic TTS полностью локально, DMG на 47 МБ, вся петля — около ~4 ГБ на Apple Silicon. И поскольку «мозг» выдаёт вызовы инструментов, Runner не просто отвечает — он управляет машиной голосом: открывает браузер и выполняет операции над DOM, открывает Telegram или WhatsApp, чтобы читать входящие сообщения и печатать ответы, запускает и контролирует приложения — всё голосовыми командами, всё локально. Это и есть настоящая причина, почему десктопу нужен Gemma 4, а не вызыватель инструментов на 270M: чтобы действовать на машине, нужно настоящее рассуждение, а не просто заполнение полей.
Один конвейер, подогнанный под бюджет.
VAD → STT → LLM → TTS одинаков везде. Всё интересное — в подгонке каждого этапа под ускоритель и память устройства.
Батарея и нагрев выбирают модели. ANE делает iOS почти бесплатным по CPU; Android сегодня даёт реальное время на CPU, с запасом NPU впереди.
Вся петля умещается в ~4 ГБ, и этот бюджет покупает рассуждение Gemma 4, управляющее машиной голосом, плюс многоязычный Parakeet-TDT.
Звук и состояние диалога никогда не покидают устройство — восприятие, рассуждение и синтез идут на железе перед вами.
