Zum Inhalt

Voice — Sprachpfad

Spracherkennung und Sprachausgabe für Home Assistant, beides über das Wyoming-Protokoll. Das Sprachmodell selbst läuft nicht hier, sondern resident auf llama-swap.

Endpunkte

Dienst Endpunkt Modell
STT tcp://10.10.10.7:10300 parakeet-tdt-0.6b-v3 (WER 7,6 %, 0,12 s)
TTS tcp://10.10.10.7:10200 Piper de_DE-thorsten-high

Beide Container laufen im Docker-Netz ai und veröffentlichen ihre Ports ins LAN — Wyoming ist binäres TCP und läuft nicht über einen Reverse Proxy.

Kette

Wake Word (CPU) → HA → Parakeet (CPU, 0,12 s) → HA → voice-agent (iGPU, resident) → HA → Piper (CPU)

End-to-End: 634 ms im Median. Home Assistant löst einfache Kommandos über seine eigene Intent-Erkennung; das Sprachmodell ist der Auffangpfad für alles, was dort nicht greift.

Die Aufteilung ist Absicht: Alles, was nie warten darf, läuft auf der CPU. Der ASR-Burst von rund 30 Threads über 0,12 s ist unkritisch, und die iGPU bleibt den Sprachmodellen vorbehalten.

Warum Parakeet und nicht Whisper

Im Sprachpfad-Turnier (T3, Juli 2026) trat Parakeet gegen Whisper auf der NPU und gegen einen einstufigen gemma4-Ansatz an:

Kandidat WER Latenz
Parakeet TDT v3 (CPU) 7,6 % 0,12 s
Whisper (NPU, FastFlowLM) 12,1 % 16-fach

Parakeet gewann in beiden Disziplinen. Der FastFlowLM-Stack wurde daraufhin stillgelegt, der npu-whisper-Container entfernt. Das Whisper-Modell liegt noch unter /opt/ai/npu-models.

Modell-Caches

Pfad Inhalt Größe
/opt/ai/volumes/parakeet ONNX-Modell ~600 MB
/opt/ai/volumes/piper Stimm-Datei ~100 MB

Beide laden beim ersten Start selbst nach. Sie sind deshalb aus dem Backup ausgeschlossen — reproduzierbar und zusammen 4,9 GB.

Beide Verzeichnisse müssen vorab existieren und 1000:1000 gehören:

sudo mkdir -p /opt/ai/volumes/parakeet /opt/ai/volumes/piper
sudo chown -R 1000:1000 /opt/ai/volumes/parakeet /opt/ai/volumes/piper

Betrieb

docker compose -f /opt/aiserver/voice/docker-compose.yaml up -d
docker ps --filter name=wyoming-          # beide healthy?
docker logs wyoming-parakeet --tail 50

Der Healthcheck ist eine TCP-Verbindungsprobe — Wyoming spricht kein HTTP, ein curl gegen den Port läuft ins Leere.

Anbindung in Home Assistant

Settings → Devices & Services → Add Integration → Wyoming Protocol, je Endpunkt einmal:

  • Host 10.10.10.7, Port 10300 (STT)
  • Host 10.10.10.7, Port 10200 (TTS)

Als Conversation-Agent kommt llama-swap über die OpenAI-kompatible API (http://10.10.10.7:9292/v1, Modell voice-llamacpp).

Der Sprachpfad existiert derzeit doppelt

Parakeet und Piper laufen mit demselben Image und Modell auch auf dem NUC (siehe Voice-Stack). Der NUC-Stack ist dort produktiv angebunden und nutzt Google Gemini als Conversation-Agent; die hiesige Instanz ist die lokale Ablösung. Die Umstellung von Home Assistant auf diese Endpunkte steht noch aus.

Offen

  • Voice-Pipeline gegen echtes Home Assistant fahren (Wyoming-Endpunkte umstellen)
  • gemma4:e4b als einstufigen Audio-Fallback evaluieren (Ollama temporär starten)