Aufbau eines privaten Home-Assistant-Sprachassistenten auf dem RK3576
Erstellen Sie einen privaten, lokal laufenden Home-Assistant-Sprachassistenten auf Rockchip RK3576. Der Stack kombiniert Whisper für Spracherkennung, Piper für Sprachsynthese, openWakeWord für Wake-Word-Erkennung und Qwen für lokale Konversation – alles beschleunigt durch die NPU des RK3576.
Aufbau eines privaten Home-Assistant-Sprachassistenten auf dem RK3576
Home Assistant Assist muss nicht bloß an eine cloudbasierte Sprachoberfläche gekoppelt sein. Mit einem Rockchip RK3576 lässt sich die komplette Sprachpipeline lokal betreiben: von der Spracherkennung über die Wake-Word-Erkennung bis hin zu Sprachmodell-Logik und Sprachsynthese.
Dieses Projekt bündelt genau diese Funktionalität in einem Docker-Compose-Stack. Whisper, Piper, openWakeWord und Qwen arbeiten gemeinsam zusammen, während die wichtigsten KI-Aufgaben durch die NPU des RK3576 beschleunigt werden.
1. Schnellstart
Voraussetzungen
- Ein Rockchip RK3576-Board mit Linux ARM64
- Docker Engine mit dem Docker-Compose-Plugin
- Zugriff auf die RK3576-Geräteknoten, inklusive
/dev/rknpuund/dev/dma_heap - Eine Home-Assistant-Instanz im selben Netzwerk oder genügend Ressourcen, um Home Assistant direkt auf dem Board auszuführen
Projekt auf dem RK3576-Board klonen:
git clone https://github.com/Hanzo-Huang/rk3576-home-assistant-voice.git
cd rk3576-home-assistant-voiceDie Sprachdienste starten:
sudo docker compose up -d --pull alwaysWenn Home Assistant ebenfalls auf demselben Board laufen soll, kann das optionale Profil verwendet werden:
sudo docker compose --profile homeassistant up -d --pull alwaysLaufende Container und Logs prüfen:
sudo docker compose ps
sudo docker compose logs -f2. Architektur
Der Stack teilt die gesamte Sprachinteraktion in einzelne, klar getrennte Dienste auf. Home Assistant spricht über das Wyoming-Protokoll mit den Sprachdiensten und über eine OpenAI-kompatible API mit dem lokalen Sprachmodell.
Nutzer
│ Spracheingabe
▼
Home Assistant Assist
│ Audio
▼
openWakeWord ── aktiviert ──▶ Whisper STT
│ Transkript
▼
Lokales Qwen 2.5 LLM
│ Antworttext
▼
Piper TTS
│ Audio-Antwort
▼
Home Assistant Assist
│
▼
Nutzer
Whisper STT, Qwen 2.5 und Piper TTS laufen mit NPU-Beschleunigung auf dem RK3576.Die Dienste sind über folgende Ports erreichbar:
| Dienst | Funktion | Port |
|---|---|---|
| Piper | Text-zu-Sprache | 10200 |
| Whisper | Sprach-zu-Text | 10300 |
| openWakeWord | Wake-Word-Erkennung | 10400 |
| RKLLM-API | OpenAI-kompatible lokale LLM-API | 8001 |
Das Standard-Sprachmodell ist Qwen2.5-1.5B-Instruct in W4A16-Quantisierung. Der RKLLM-Dienst stellt es Home Assistant als lokalen Konversationsagenten zur Verfügung, sodass Sprachanfragen auch ohne Weiterleitung an einen externen Anbieter verarbeitet werden können.
3. Leistung
Die getestete Konfiguration verwendet:
- Whisper für die Spracherkennung
- Qwen2.5-1.5B-Instruct für die Konversation
- Piper Amy Medium für die Sprachsynthese
Mit den Modellen, die durch die NPU des RK3576 beschleunigt werden, lag die gemessene Latenz bei:
| Schritt | Zeit |
|---|---|
| Whisper-Transkription | 0.626 s |
| LLM-Antwort | 2.82 s |
| Piper-Synthese | 0.474 s |
Die komplette Antwortzeit hängt von der Länge der gesprochenen Anfrage, der Länge der erzeugten Antwort und der Verarbeitung in Home Assistant selbst ab. Dennoch bietet der RK3576 eine praktische Basis für einen schnellen, privaten Sprachassistenten direkt am Rand des Netzwerks.
Das 1,5-B-Modell benötigt rund 1,5 GB RAM. Ein getestetes 3-B-W4A16-Modell braucht ungefähr 2,5 GB RAM. Deshalb ist die Speicherkapazität ein wichtiger Faktor, wenn ein größeres Modell gewählt werden soll.
4. Setup-Anleitung
Wyoming-Dienste hinzufügen
In Home Assistant öffnet man unter Einstellungen → Geräte & Dienste die Option Integration hinzufügen und sucht nach Wyoming Protocol.
Danach werden die folgenden Dienste mit der IP-Adresse des RK3576-Boards als Host hinzugefügt:
| Dienst | Port |
|---|---|
| Whisper STT | 10300 |
| Piper TTS | 10200 |
| openWakeWord | 10400 |
Assist-Pipeline einrichten
Unter Einstellungen → Sprachassistenten kann eine Assist-Pipeline erstellt oder bearbeitet werden. Dazu werden diese Dienste ausgewählt:
- Der Wyoming-Whisper-Dienst für die Spracherkennung.
- Der Wyoming-Piper-Dienst für die Sprachsynthese.
- Der Wyoming-openWakeWord-Dienst für die Wake-Word-Erkennung.
Lokalen Konversationsagenten konfigurieren
Für Qwen als Konversationsagent lässt sich die Local LLM-Integration über HACS installieren. Die Konfiguration erfolgt mit diesen Werten:
Backend: OpenAI Compatible Conversations API
API-Hostname: RK3576_BOARD_IP
API-Port: 8001
API-Pfad: /v1
API-Schlüssel: sk-local
Modellname: rkllm-modelDer API-Schlüssel dient hier nur als Platzhalter für den lokalen Server. Nach dem Hinzufügen der Integration kehrt man zur Assist-Pipeline zurück und wählt den neuen lokalen Konversationsagenten aus.
Ein anderes LLM wählen
Das LLM wird als Docker-Image bereitgestellt. Dadurch lässt sich das Modell austauschen, ohne die Home-Assistant-Konfiguration zu ändern. Das Standard-Image lautet:
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576Für ein anderes Modell wird ein RK3576-kompatibles Image aus dem rkllm-docker-Repository ausgewählt und der Wert von llm.image in docker-compose.yml ersetzt:
llm:
image: <rkllm-docker-model-image>Anschließend wird der Stack neu gestartet:
sudo docker compose up -dDie verfügbaren Modelle haben unterschiedliche RAM-Anforderungen, Antwortqualität und Latenzzeiten. Die Modell-Dokumentation sollte deshalb vor der Wahl eines größeren Modells geprüft werden.
Wake Word anpassen
Das Standard-Wake-Word-Modell ist ok_nabu. Der Befehl für openwakeword in docker-compose.yml kann angepasst werden, um ein anderes unterstütztes Modell vorauszuladen:
command:
- --uri
- tcp://0.0.0.0:10400
- --preload-model
- ok_nabuDie Whisper-Sprache ändern
Das Whisper-Image enthält englisches und chinesisches Sprachvokabular. Englisch ist die Standardoption; Chinesisch lässt sich wählen, indem --language zh zum Whisper-Servicebefehl in docker-compose.yml ergänzt wird.
5. Verbesserungen: Weitere Modelle hinzufügen
Die aktuelle Konfiguration verwendet kompakte Modelle, um Qualität, Speicherverbrauch und Latenz in einem vernünftigen Gleichgewicht zu halten. Der nächste logische Schritt ist es, in der gesamten Sprachpipeline weitere Modelle zu unterstützen: Sprachmodelle, STT-Modelle und TTS-Stimmen.
Mehr LLM-Modelle hinzufügen
Das LLM-Image lässt sich in docker-compose.yml ändern. Ersetzen Sie dazu das Standard-Image:
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576durch ein anderes Image aus dem rkllm-docker-Repository und starten Sie den Stack anschließend neu:
sudo docker compose up -dMehr STT-Modelle hinzufügen
Whisper wird derzeit für die Spracherkennung verwendet. Der Whisper-Dienst lässt sich erweitern, sodass weitere Modellgrößen, Sprachen und aus RKNN konvertierte Encoder- und Decoder-Paare unterstützt werden. So können Nutzer ein kleineres Modell für geringere Latenz oder ein größeres Modell für bessere Transkriptionsgenauigkeit wählen.
Die STT-Unterstützung sollte Folgendes umfassen:
- Englische, chinesische und weitere Sprachvokabulare.
- Mehrere Whisper-Modellgrößen.
- Modellbezogene Konfiguration in
docker-compose.yml. - Benchmarks für Transkriptionsgenauigkeit, Speicherverbrauch und Echtzeitfaktor.
Mehr TTS-Modelle und Stimmen hinzufügen
Piper stellt derzeit die Stimme Amy Medium bereit. Weitere Piper-Stimmen können in das TTS-Image integriert werden, sodass Nutzer verschiedene Sprachen, Akzente und Stile auswählen können. RKNN-kompatible Decoder-Modelle lassen sich ebenfalls ergänzen, um den RK3576 für weitere Sprachkonfigurationen zu nutzen.
Die TTS-Unterstützung könnte Folgendes umfassen:
- Mehrere Piper-Stimmen und Sprachen.
- Sprachauswahl über die Compose-Konfiguration oder Home Assistant.
- Unterschiedliche Qualitäts- und Geschwindigkeitsprofile.
- Streaming und kürzere Audiosegmente für schnellere Wiedergabe.
Weitere Verbesserungen
Zukünftige Verbesserungen könnten außerdem Folgendes umfassen:
- Eine einfache Modell-Auswahlvariable für jeden Dienst.
- Benchmarking der gesamten Pipeline über verschiedene Modellkombinationen hinweg.
- Streaming von LLM-Antworten, um die wahrgenommene Reaktionszeit zu reduzieren.
- Unterstützung für benutzerdefinierte Wake-Word-Modelle.
- Dokumentation empfohlener Modellkombinationen für unterschiedliche RAM-Kapazitäten.
Größere Modelle können die Gesprächsqualität verbessern, erfordern aber auch mehr RAM und können die Latenz erhöhen. Das beste Modell ist deshalb immer ein Kompromiss zwischen den Möglichkeiten des Boards und dem gewünschten Erlebnis im Zuhause.
Fazit
Dieses Projekt zeigt, dass ein moderner Home-Assistant-Sprachassistent nicht zwingend auf die Cloud angewiesen sein muss. Wenn Whisper, Piper, openWakeWord, Qwen und die RK3576-NPU zusammenkommen, kann die gesamte Interaktion lokal auf einem kompakten Edge-Gerät laufen.
Das Ergebnis ist eine sprachgesteuerte Schnittstelle, die privat, anpassbar und eng in Home Assistant integriert ist – und gleichzeitig Raum für Experimente mit schnelleren, größeren und leistungsfähigeren Modellen lässt.