Голосовой интерфейс - это не «наговорить и отправить в LLM». Это пайплайн из VAD, ASR, обработки ошибок и UX, который прощает пользователю. Делимся опытом сборки на Whisper для одного из клиентов.
Архитектура
- VAD (voice activity detection) на клиенте - режем тишину, не льём в API лишнее.
- Стриминг аудио на бэкенд - небольшими чанками по 2–4 секунды.
- Whisper API (large-v3) - ASR на каждый чанк.
- Постобработка: коррекция терминов через словарь, нормализация чисел и дат.
- Передача в LLM с контекстом диалога.
- TTS-ответ для голосового канала или текст для UI.
Whisper API vs self-hosted
OpenAI Whisper API стоит $0.006 за минуту. На объёме до 3000 минут в месяц - дешевле, чем держать GPU. Дальше - выгоднее self-hosted на Whisper-large-v3 (нужна A100 или 2 × A10).
Качество в реальных условиях
- Чистый микрофон, тихая комната - WER 3–5% на русском.
- Через мобильный микрофон в офисе - 8–12%.
- В метро или с улицы - 18–25%, бесполезно для большинства задач.
- Профессиональный сленг (медицина, юриспруденция) - без custom vocabulary падает катастрофически.
UX, который прощает ошибки
Главное правило: пользователь должен видеть промежуточную транскрипцию и иметь возможность поправить. Если показать только финальный ответ - любая ошибка ASR превращается в нерелевантный ответ LLM, и пользователь теряет доверие за 2-3 раза.
Latency
На стриминге Whisper отдаёт первый чанк за 600–900мс после конца речи. С учётом LLM-ответа и TTS - до полной озвучки уходит 3–5 секунд. Это работает в одних сценариях (обращение в саппорт) и не работает в других (живой диалог).