Hanzo Huang2026-07-28

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.

reComputer-RKrk3576llmhome-assistantwhisperpiperopenwakewordqwenGithub

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/rknpu und /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:

bash
git clone https://github.com/Hanzo-Huang/rk3576-home-assistant-voice.git
cd rk3576-home-assistant-voice

Die Sprachdienste starten:

bash
sudo docker compose up -d --pull always

Wenn Home Assistant ebenfalls auf demselben Board laufen soll, kann das optionale Profil verwendet werden:

bash
sudo docker compose --profile homeassistant up -d --pull always

Laufende Container und Logs prüfen:

bash
sudo docker compose ps
sudo docker compose logs -f

2. 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.

Code
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:

DienstFunktionPort
PiperText-zu-Sprache10200
WhisperSprach-zu-Text10300
openWakeWordWake-Word-Erkennung10400
RKLLM-APIOpenAI-kompatible lokale LLM-API8001

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:

SchrittZeit
Whisper-Transkription0.626 s
LLM-Antwort2.82 s
Piper-Synthese0.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:

DienstPort
Whisper STT10300
Piper TTS10200
openWakeWord10400

Assist-Pipeline einrichten

Unter Einstellungen → Sprachassistenten kann eine Assist-Pipeline erstellt oder bearbeitet werden. Dazu werden diese Dienste ausgewählt:

  1. Der Wyoming-Whisper-Dienst für die Spracherkennung.
  2. Der Wyoming-Piper-Dienst für die Sprachsynthese.
  3. 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:

text
Backend: OpenAI Compatible Conversations API
API-Hostname: RK3576_BOARD_IP
API-Port: 8001
API-Pfad: /v1
API-Schlüssel: sk-local
Modellname: rkllm-model

Der 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:

yaml
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576

Fü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:

yaml
llm:
  image: <rkllm-docker-model-image>

Anschließend wird der Stack neu gestartet:

bash
sudo docker compose up -d

Die 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:

yaml
command:
  - --uri
  - tcp://0.0.0.0:10400
  - --preload-model
  - ok_nabu

Die 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:

yaml
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576

durch ein anderes Image aus dem rkllm-docker-Repository und starten Sie den Stack anschließend neu:

bash
sudo docker compose up -d

Mehr 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.