ЧТО ИЗМЕНИЛОСЬ К 2026 ГОДУ
Ещё пару лет назад голосовой ассистент собирался по классике: микрофон пишет аудио, файл целиком уходит в STT, текст летит в LLM, ответ гонится в TTS, и только потом пользователь слышит звук. Каждый этап — блокирующий. Суммарная задержка легко переваливала за 3-4 секунды, и разговор ощущался как переписка по рации.
Сейчас всё крутится вокруг двух слов: realtime и streaming. Аудио обрабатывается кусками по 20-40 мс, распознавание идёт потоково, LLM отдаёт токены по мере генерации, а TTS начинает озвучивать первое предложение, пока модель ещё дописывает второе. Плюс появился отдельный класс — speech-to-speech модели, которые едят звук и выдают звук напрямую, без промежуточного текста. По ощущениям это разница между звонком по спутнику и живым разговором в комнате.
АНАТОМИЯ ГОЛОСОВОГО АГЕНТА
Даже в 2026-м классический пайплайн никуда не делся — он гибче, дешевле и предсказуемее для продакшена. Разложим по слоям:
- VAD (Voice Activity Detection) — определяет, где речь, а где тишина. Именно VAD решает, когда пользователь закончил фразу. Лёгкие модели вроде Silero VAD крутятся прямо на CPU.
- STT (Speech-to-Text) — распознавание речи. Потоковый режим отдаёт частичные гипотезы каждые несколько сотен миллисекунд.
- LLM — мозг агента. Здесь живёт системный промпт, функции (tools) и память диалога.
- TTS (Text-to-Speech) — синтез речи. Стриминговый TTS критичен: он режет задержку до первого звука (time-to-first-byte).
- Оркестратор — склеивает всё, обрабатывает перебивания (barge-in), таймауты и переключение ходов.
Ключевая метрика всей системы — не точность распознавания сама по себе, а end-to-end latency: время от конца вашей фразы до первого звука ответа. Ниже 800 мс диалог звучит естественно, выше 1.5 секунды — уже раздражает.
SPEECH-TO-SPEECH ПРОТИВ КЛАССИЧЕСКОГО СТЕКА
Speech-to-speech (realtime API от крупных провайдеров, а также открытые модели) убирает промежуточный текст: интонация, паузы, смех и эмоции доходят до модели напрямую. Звучит человечнее, задержка минимальная. Но есть цена: сложнее логировать, труднее вставить строгую бизнес-логику и валидацию, дороже за минуту, и вы почти не контролируете, что именно модель «услышала».
Классическая цепочка проигрывает в естественности, зато выигрывает в контроле. У вас есть текстовый транскрипт для аналитики, можно подменить любой компонент, легко прикрутить RAG и жёсткие правила. Для банковского бота или техподдержки это решает.
| Критерий | Speech-to-Speech | Классический STT→LLM→TTS |
|---|---|---|
| Задержка (end-to-end) | ~300-500 мс | ~600-1200 мс |
| Естественность интонации | Высокая | Средняя (зависит от TTS) |
| Контроль над логикой | Низкий | Полный |
| Текстовый транскрипт | Опционально, приблизительно | Точный, из коробки |
| Замена компонентов | Нет, всё монолитно | Любой слой меняется |
| Стоимость за минуту | Выше | Ниже, гибко оптимизируется |
ВЫБОР ДВИЖКОВ: STT И TTS В 2026
Распознавание (STT)
Для локального и офлайн-сценария по-прежнему актуально семейство Whisper и его ускоренные форки (faster-whisper на CTranslate2) — они дают отличное качество на многих языках, включая русский. Для потокового распознавания в реальном времени берут специализированные streaming-модели, потому что Whisper по своей природе батчевый и не любит короткие чанки. Из открытого — распознавалки на базе Conformer и NeMo хорошо тянут стриминг.
Синтез (TTS)
Здесь выбор шире, чем когда-либо. Открытые модели (семейства XTTS, а также новые нейросетевые синтезаторы с клонированием голоса по нескольким секундам образца) дают приличное качество бесплатно, но требуют GPU для низкой задержки. Облачные стриминговые TTS выигрывают по time-to-first-byte — первый звук приходит за ~150-300 мс. Свежие релизы движков удобно отслеживать в каталоге REDDYX, там открытые TTS/STT-репозитории появляются раньше, чем про них пишут в новостях.
- Нужна экономия и приватность — faster-whisper + локальный XTTS на своей GPU.
- Нужна минимальная задержка без своего железа — облачный streaming STT + streaming TTS.
- Нужен максимально живой диалог — realtime speech-to-speech API.
СОБИРАЕМ РАБОЧИЙ ПАЙПЛАЙН НА PYTHON
Ниже минимальный, но честно работающий каркас классического агента: VAD ловит конец фразы, STT распознаёт, LLM отвечает потоком, а TTS озвучивает по предложениям, не дожидаясь полного ответа. Это скелет — подключайте свои клиенты STT/TTS/LLM.
import asyncio
import re
from faster_whisper import WhisperModel
stt = WhisperModel("small", device="cuda", compute_type="float16")
# --- STT: распознаём накопленный аудиобуфер ---
def transcribe(audio_pcm_path: str) -> str:
segments, _ = stt.transcribe(audio_pcm_path, language="ru", beam_size=1)
return " ".join(s.text for s in segments).strip()
# --- Режем поток LLM на фразы, чтобы TTS стартовал раньше ---
async def sentence_chunks(token_stream):
buffer = ""
async for token in token_stream:
buffer += token
# как только видим конец предложения — отдаём кусок в синтез
if re.search(r"[.!?…]\s*$", buffer):
yield buffer.strip()
buffer = ""
if buffer.strip():
yield buffer.strip()
# --- Оркестрация одного хода диалога ---
async def handle_turn(audio_path, llm_stream_fn, tts_speak_fn, history):
user_text = transcribe(audio_path)
print(f"[user] {user_text}")
history.append({"role": "user", "content": user_text})
token_stream = llm_stream_fn(history) # async-генератор токенов
full_reply = ""
async for phrase in sentence_chunks(token_stream):
full_reply += phrase + " "
# запускаем озвучку фразы параллельно, диалог не ждёт конца ответа
asyncio.create_task(tts_speak_fn(phrase))
history.append({"role": "assistant", "content": full_reply.strip()})
return full_reply
Фишка тут в sentence_chunks: мы не ждём, пока LLM допишет весь абзац. Первое же завершённое предложение уходит в TTS, и пользователь слышит начало ответа, пока модель ещё думает над концовкой. Это самый дешёвый способ срезать секунду задержки без смены провайдеров.
ТРИ ГРАБЛИ, О КОТОРЫЕ ВСЕ СПОТЫКАЮТСЯ
1. Перебивание (barge-in)
Человек начинает говорить, пока агент ещё вещает. Без обработки barge-in бот тупо договаривает свою реплику в пустоту. Решение: держать VAD активным во время воспроизведения TTS и по детекту речи мгновенно глушить синтез и сбрасывать очередь озвучки.
2. Определение конца хода (endpointing)
Слишком короткий таймаут тишины — бот перебивает на паузе для вдоха. Слишком длинный — неловкое молчание. Практика 2026-го: адаптивный порог, 500-800 мс тишины по умолчанию, но короче, если фраза грамматически завершена.
3. Накопление задержки
Каждый слой добавляет свои миллисекунды, и они складываются. Меряйте latency каждого этапа отдельно (VAD, STT, TTFT LLM, TTFB TTS) — почти всегда узкое место одно, и чинить надо именно его, а не всё подряд.
ГДЕ ЭТО ЖИВЁТ В ПРОДАКШЕНЕ
Голосовые агенты уже вышли за пределы демок. Реальные применения 2026-го:
- Исходящие и входящие звонки — квалификация лидов, напоминания, первичная поддержка. Тут связка с телефонией (SIP/WebRTC) обязательна.
- Голосовой интерфейс в приложениях — руки заняты (готовка, вождение, склад), голос выигрывает у тапов.
- Ассистенты внутри устройств — на edge, где важна приватность и офлайн-работа, тянут квантованные локальные модели.
Для WebRTC-транспорта в браузере стандартом де-факто стали открытые фреймворки-оркестраторы, которые берут на себя буферизацию, barge-in и синхронизацию потоков — не изобретайте это руками. Подборку таких инструментов и свежие voice-AI фреймворки удобно мониторить в каталоге REDDYX.
Частые вопросы
Чем STT отличается от TTS?
STT (speech-to-text) — распознавание речи, превращает звук в текст. TTS (text-to-speech) — синтез речи, превращает текст в звук. В голосовом агенте они стоят на входе и на выходе соответственно, а между ними работает языковая модель.
Какая задержка считается нормальной для голосового ассистента?
Естественным диалог ощущается при end-to-end задержке до 800 мс от конца вашей фразы до первого звука ответа. Realtime speech-to-speech модели опускают её до ~300-500 мс, классический стек обычно держится в диапазоне 600-1200 мс.
Можно ли собрать голосового агента полностью локально и бесплатно?
Да. Связка Silero VAD + faster-whisper для распознавания + локальный TTS с клонированием голоса + открытая LLM работает офлайн. Плата — нужна GPU для приемлемой задержки, иначе синтез и распознавание будут ощутимо тормозить.
Что выбрать: speech-to-speech или классический пайплайн?
Speech-to-speech — для максимально живого разговора, где важна интонация и минимум задержки. Классический STT→LLM→TTS — там, где нужен точный транскрипт, строгая бизнес-логика, RAG и возможность менять любой компонент независимо.
Голосовой интерфейс в 2026-м проходит ровно тот путь, что чат-боты в 2023-м: из игрушки в рабочий инструмент. Кто соберёт нормальный realtime-стек сейчас, будет впереди на год. Новые открытые TTS, STT и voice-агент фреймворки я разбираю в Telegram-канале REDDYX AI — новые репозитории каждые 30-60 минут.