Как это устроено: распознавание речи (фаза 2) → языковая модель с инструментами Home Assistant (фаза 5) → синтез речи (фаза 3). Мы взяли 40 типичных команд — свет, шторы, климат, таймеры, вопросы «что включено?» — и озвучили их тремя синтетическими голосами. Получилось 120 голосовых команд плюс их зашумлённые копии. Весь конвейер честно работал на NAS: распознавание и LLM одновременно на одном iGPU.
Живые диалоги
Вот как это выглядело в живом стеке: whisper → LLM → Silero. Слева Qwen3.5-4B, справа Ling 3.0 Tiny. Можно послушать саму команду, она синтетическая.
HassClimateSetTemperature(temperature=22, name="Кондиционер", area="Гостиная")HassClimateSetTemperature(temperature=22, name="Кондиционер", area="Гостиная")Оба поняли. Но Ling ответил цифрами, и Silero без нормализатора сказал бы «Кондиционер в гостиной установлен на градуса». Qwen ответил словами, правда, с «двадцать две градуса».
HassTurnOff(name="Свет в коридоре", area="Коридор")HassTurnOn(name="Свет в коридоре", area="Коридор")«Погаси» для Ling оказалось незнакомым словом, и свет он включил. Зато бодро отчитался.
HassStartTimer(hours=0, minutes=30, seconds=0, name="Пирог")Whisper услышал «засейки». Qwen догадался, что это таймер, Ling ищет устройство «засейки».
GetLiveContext()Распознавание потеряло «?», и Qwen принял вопрос за утверждение: ответил, ничего не проверив. Чайник он выдумал (угадал, но всё же).
HassTurnOff(name="Телевизор", area="Гостиная")Голос Piper с неверными ударениями: распознавание выдало абракадабру. Qwen сказал, что всё выключил, но ничего не вызвал, а Ling выключил телевизор вместо люстры.
Где тратится время
Главный тормоз — языковая модель. Распознавание и синтез вместе укладываются в 2.5 секунды с whisper или в 0.3 секунды с Vosk. А Qwen3.5-4B думает 6.5 секунды, чтобы выбрать действие, и ещё почти 2 секунды, чтобы сформулировать ответ. Из этого времени около 4 секунд уходит на генерацию ~40 токенов вызова: на этом iGPU 4B-модель выдаёт около 10 токенов в секунду.
Как ускорить
- Vosk вместо whisper: на коротких командах он и точнее, и в 10 раз быстрее (0.2 с против 2.3 с).
- На действия отвечать «Готово» без второго обращения к LLM. Для вопросов о состоянии второй шаг всё равно нужен.
- Вместе с Qwen3.5-4B это около 7 секунд, с Ling — около 3. Но Ling ошибается заметно чаще.
Точность
Qwen3.5-4B по тексту выполнил все 40 команд, а со звука — 90–93%. Почти все ошибки распознавания — от голоса Piper с кривыми ударениями: на двух голосах Silero связка whisper + Qwen3.5-4B выполнила 79 команд из 80. Живой голос, скорее всего, где-то посередине.
Шум почти не мешает: точность падает на 0–3 пункта.
Две опасные ошибки
Потерянный «?» — выдуманный ответ
Если распознавание теряет вопросительный знак, «На кухне что-нибудь включено?» превращается в утверждение. Тогда Qwen3.5-4B не проверяет дом, а сразу отвечает «На кухне включён чайник». Лечится строгим требованием в системном промпте: про состояние дома — только через проверку. Ещё можно взять STT, который пунктуацию не ставит вовсе (Vosk), — тогда её не потеряешь.
Потерянная запятая — отказ
«Сделай свет потусклее процентов на тридцать» без запятой Qwen3.5-4B отклоняет: «не могу изменить яркость».
Приятная мелочь: Qwen3.5-4B отвечает словами
Мы попросили модели отвечать так, чтобы ответ можно было сразу озвучить: коротко, числа словами. Qwen3.5-4B сделал так в 100% случаев, даже когда Home Assistant вернул ему «21.5 °C». Qwen3-4B и Ling так делают только в половине ответов о состоянии. Значит, с Qwen3.5-4B нормализатор текста перед Silero не нужен.
Qwen3.5-4B: «Сейчас в спальне двадцать одна градус пять десятых по Цельсию.»
Qwen3-4B: «Температура в спальне: 21.5 °C.» ← Silero скажет «Температура в спальне», и всё.
Что в итоге
- Точный вариант: Vosk → Qwen3.5-4B → Silero, около 9 секунд. Сойдёт для «включи кондиционер», но живым диалогом это не назовёшь.
- Быстрый вариант: Vosk → Ling 3.0 Tiny → Silero, около 4 секунд, зато 86% команд и путаница «погаси / включи».
- STT и LLM на одном iGPU не мешают друг другу: whisper в стеке работает так же быстро, как один.
- В Home Assistant всё это подключается штатно, через Wyoming и OpenAI-совместимые API.
Чего мы не проверили
Живые голоса: дикцию, эхо, расстояние до микрофона. Потоковый режим, где ассистент начинает говорить, ещё не додумав, сильно сократил бы ожидание. Его тоже не пробовали.