Разговор голосом поверх веб-оболочки. Секция [voice] в model.toml:
[voice]
tts_cmd = "espeak-ng -v ru --stdin -w /dev/stdout"
asr_cmd = "bash /home/agent/.agent/asr.sh"agentd отдаёт /api/tts (текст → WAV) и /api/listen (аудио → текст) — оба
прогоняют команду из конфига, stdin↔stdout. Фронт озвучивает ответы и пишет
микрофон.
espeak-ng (лёгкий, ставится apt install espeak-ng) работает под песочницей
agentd прямо сейчас. Голос естественнее — piper (та же схема stdin→WAV).
Проверено вживую: текст → валидный WAV.
vosk + русская модель:
apt install -y python3-pip ffmpeg
pip3 install --break-system-packages vosk
curl -L https://alphacephei.com/vosk/models/vosk-model-small-ru-0.22.zip -o m.zip
unzip m.zip && mv vosk-model-small-ru-0.22 /home/agent/.agent/vosk-model
cp asr.sh vosk_transcribe.py /home/agent/.agent/Круг проверен: espeak-фраза → /api/listen → vosk → русский текст.
Важно про песочницу. ffmpeg и vosk многопоточные и тяжёлые — под строгим
SystemCallFilter=@system-service @sandbox у agentd они глохнут (espeak-у
хватает, им — нет). Продакшн-путь: вынести голос в отдельный помощник вне
песочницы (по образцу agent-opd), тогда agentd остаётся закалённым. Пока ASR
опционален (asr_cmd = "" по умолчанию).