Блог·
На устройстве
July 7, 2026

Запуск голосового агента на устройстве
один конвейер, три бюджета памяти.

Локальный голосовой агент — это не одна модель, а конвейер из четырёх: детектор голосовой активности, распознавание речи, языковая модель и синтез речи, связанные конечным автоматом, управляющим очередями реплик. Конвейер одинаков и на телефоне, и на ноутбуке. Меняется то, какая модель стоит в каждой ячейке, и это решают два числа: сколько у вас памяти и какой ускоритель вы кормите.

Запомнить нужно всю петлю, а не одну модель: восприятие речи (STT) + генерация ответа (LLM) + синтез речи (TTS) — всё умещается внутри: ~1,2 ГБ на iPhone, ~1,5 ГБ на Galaxy S23 и меньше ~4 ГБ на Mac с настоящим «мозгом» для беседы.

Базовая библиотека

Переносимая часть — это конвейер.

Оркестрация живёт в speech-core как чистый конечный автомат на C++, не зависящий от моделей: четыре этапа — это интерфейсы, в которые вы вставляете любой бэкенд — ONNX, LiteRT, CoreML/MLX на устройстве или даже облачный API — так что один и тот же конвейер запускает вызыватель инструментов на 270M на телефоне и «мозг» Gemma 4 на Mac.

On-device voice-agent pipelineMicrophone audio passes an optional wake-word gate, echo cancellation, and enhancement, then voice activity detection, speech-to-text (perception), a language model with tool calls (generation), and text-to-speech (synthesis) back to the speaker. The synthesized audio feeds back as the echo-cancellation reference.wake word · AEC · enhance (opt.)tools?Audiomic inVADturn gateSTTperceptionLLMgenerationTTSsynthesisAudiospeakerAEC reference

Одна петля, четыре этапа. Слово-активатор, 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 120M0.04 RTF · 297 MB0.21 RTF · 232 MB
STT · Omnilingual 300M0.28 RTF · 495 MB0.15 RTF · 831 MB
TTS · Kokoro-82M0.08 RTF · 676 MB0.53 RTF · 640 MB
TTS · Supertonic-3 99M0.15 RTF · 956 MB0.34 RTF · 832 MB
LLM · FunctionGemma 270M128 tok/s · 236 MB118 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)
VADSilero v6.2.1Silero v6.2.1
STTParakeet-EOU (streaming)Parakeet-TDT (multilingual)
LLMFunctionGemma 270MGemma 4 E2B/E4B
TTSKokoro-82M / Supertonic-3Supertonic-3
Resident setiPhone ~1.2 GB · S23 ~1.5 GB~4 GB
Runner: голосовой агент, управляющий Mac

Этот десктопный путь и поставляет Runner Agent — нотаризованное приложение macOS, которое запускает Mic → VAD → Parakeet-TDT → Gemma 4 → Supertonic TTS полностью локально, DMG на 47 МБ, вся петля — около ~4 ГБ на Apple Silicon. И поскольку «мозг» выдаёт вызовы инструментов, Runner не просто отвечает — он управляет машиной голосом: открывает браузер и выполняет операции над DOM, открывает Telegram или WhatsApp, чтобы читать входящие сообщения и печатать ответы, запускает и контролирует приложения — всё голосовыми командами, всё локально. Это и есть настоящая причина, почему десктопу нужен Gemma 4, а не вызыватель инструментов на 270M: чтобы действовать на машине, нужно настоящее рассуждение, а не просто заполнение полей.

Takeaways

Один конвейер, подогнанный под бюджет.

Конвейер переносится, модели — нет

VAD → STT → LLM → TTS одинаков везде. Всё интересное — в подгонке каждого этапа под ускоритель и память устройства.

Мобильные: сначала NPU, ~1,2–1,5 ГБ

Батарея и нагрев выбирают модели. ANE делает iOS почти бесплатным по CPU; Android сегодня даёт реальное время на CPU, с запасом NPU впереди.

Десктоп: настоящий «мозг», всё ещё ~4 ГБ

Вся петля умещается в ~4 ГБ, и этот бюджет покупает рассуждение Gemma 4, управляющее машиной голосом, плюс многоязычный Parakeet-TDT.

Всё это локально

Звук и состояние диалога никогда не покидают устройство — восприятие, рассуждение и синтез идут на железе перед вами.

Where next

Читать дальше.