Een privé Home Assistant-voice-assistent bouwen op de RK3576
Bouw een privé, lokaal Home Assistant-voice-assistent op Rockchip RK3576. De stack combineert Whisper voor spraakherkenning, Piper voor spraaksynthese, openWakeWord voor wake-worddetectie en Qwen voor lokale conversatie, alles versneld door de NPU van de RK3576.
Een privé Home Assistant-spraakassistent bouwen op de RK3576
Home Assistant Assist is veel meer dan alleen een cloudgebonden spraakinterface. Met een Rockchip RK3576 is het mogelijk om de volledige spraakworkflow lokaal uit te voeren: van spraakherkenning en wake-worddetectie tot taalmodelredenering en spraaksynthese.
Dit project bundelt die functionaliteit in een Docker Compose-stack. Whisper, Piper, openWakeWord en Qwen werken samen, terwijl de belangrijkste AI-taken worden versneld door de NPU van de RK3576.
1. Snel starten
Vereisten
- Een Rockchip RK3576-board met Linux ARM64
- Docker Engine met de Docker Compose-plug-in
- Toegang tot de RK3576-apparaatnodes, inclusief
/dev/rknpuen/dev/dma_heap - Een Home Assistant-instantie in hetzelfde netwerk, of voldoende middelen om Home Assistant rechtstreeks op het board uit te voeren
Kloon het project op het RK3576-board:
git clone https://github.com/Hanzo-Huang/rk3576-home-assistant-voice.git
cd rk3576-home-assistant-voiceStart de spraakdiensten:
sudo docker compose up -d --pull alwaysAls Home Assistant ook op hetzelfde board moet draaien, gebruik dan het optionele profiel:
sudo docker compose --profile homeassistant up -d --pull alwaysControleer de draaiende containers en logs:
sudo docker compose ps
sudo docker compose logs -f2. Architectuur
De stack verdeelt elke stap van de spraakinteractie in aparte services. Home Assistant communiceert via het Wyoming-protocol met de spraakdiensten en via een OpenAI-compatibele API met het lokale taalmodel.
Gebruiker
│ spraakinput
▼
Home Assistant Assist
│ audio
▼
openWakeWord ── geactiveerd ──▶ Whisper STT
│ transcript
▼
Lokale Qwen 2.5 LLM
│ antwoordtekst
▼
Piper TTS
│ audio-antwoord
▼
Home Assistant Assist
│
▼
Gebruiker
Whisper STT, Qwen 2.5 en Piper TTS draaien met NPU-versnelling op de RK3576.De diensten zijn beschikbaar via deze poorten:
| Service | Functie | Poort |
|---|---|---|
| Piper | Tekst-naar-spraak | 10200 |
| Whisper | Spraak-naar-tekst | 10300 |
| openWakeWord | Wake-worddetectie | 10400 |
| RKLLM API | OpenAI-compatibele lokale LLM-API | 8001 |
Het standaard taalmodel is Qwen2.5-1.5B-Instruct met W4A16-kwantisering. De RKLLM-service stelt dit beschikbaar voor Home Assistant als lokale conversatieagent, zodat spraakverzoeken verwerkt kunnen worden zonder de gesprekgegevens naar een externe provider te sturen.
3. Prestaties
De geteste configuratie gebruikt:
- Whisper voor spraak-naar-tekst
- Qwen2.5-1.5B-Instruct voor conversaties
- Piper Amy Medium voor spraaksynthese
Met de modellen die door de NPU van de RK3576 worden versneld, was de gemeten latency als volgt:
| Stap | Tijd |
|---|---|
| Whisper-transcriptie | 0.626 s |
| LLM-antwoord | 2.82 s |
| Piper-synthese | 0.474 s |
De totale reactietijd hangt af van de lengte van het gesproken verzoek, de lengte van het gegenereerde antwoord en de verwerking binnen Home Assistant zelf. Toch biedt de RK3576 een praktische basis voor een snelle, privé spraakassistent aan de rand van het netwerk.
Het 1,5B-model gebruikt ongeveer 1,5 GB RAM. Een getest 3B W4A16-model gebruikt ongeveer 2,5 GB RAM, waardoor geheugencapaciteit een belangrijke overweging is bij de keuze voor een groter model.
4. Installatiegids
Wyoming-services toevoegen
In Home Assistant open je Instellingen → Apparaten en services, kies je Integratie toevoegen en zoek je naar Wyoming Protocol.
Voeg vervolgens de volgende services toe, met het IP-adres van het RK3576-board als host:
| Service | Poort |
|---|---|
| Whisper STT | 10300 |
| Piper TTS | 10200 |
| openWakeWord | 10400 |
Een Assist-pijplijn aanmaken
Open Instellingen → Spraakassistenten en maak of bewerk een Assist-pijplijn. Selecteer:
- De Wyoming Whisper-service voor spraak-naar-tekst.
- De Wyoming Piper-service voor tekst-naar-spraak.
- De Wyoming openWakeWord-service voor wake-worddetectie.
De lokale conversatieagent configureren
Om Qwen als conversatieagent te gebruiken, installeer je de Local LLM-integratie via HACS. Configureer deze met de volgende waarden:
Backend: OpenAI Compatible Conversations API
API hostname: RK3576_BOARD_IP
API port: 8001
API path: /v1
API key: sk-local
Model name: rkllm-modelDe API-key is hier slechts een placeholder voor deze lokale server. Nadat je de integratie hebt toegevoegd, ga je terug naar de Assist-pijplijn en selecteer je de nieuwe lokale conversatieagent.
Een ander LLM kiezen
Het LLM wordt geleverd als Docker-image, waardoor gebruikers het model kunnen wisselen zonder de Home Assistant-configuratie aan te passen. De standaardimage is:
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576Om een ander model te gebruiken, kies je een RK3576-compatibele image uit de rkllm-docker-repository en vervang je de waarde van llm.image in docker-compose.yml:
llm:
image: <rkllm-docker-model-image>Vervolgens start je de stack opnieuw:
sudo docker compose up -dDe beschikbare modellen kunnen verschillende RAM-behoeften, antwoordkwaliteit en latency hebben. Controleer de modeldocumentatie voordat je kiest voor een groter model voor het board.
De wake word aanpassen
Het standaard wake-wordmodel is ok_nabu. Verander de openwakeword-opdracht in docker-compose.yml om een ander ondersteund model vooraf te laden:
command:
- --uri
- tcp://0.0.0.0:10400
- --preload-model
- ok_nabuDe Whisper-taal wijzigen
De Whisper-image bevat Engelse en Chinese woordenschat. Engels is de standaard; Chinees kan worden geselecteerd door --language zh toe te voegen aan de Whisper-serviceopdracht in docker-compose.yml.
5. Verbeteringen: meer modellen toevoegen
De huidige configuratie gebruikt compacte modellen om een goede balans te houden tussen kwaliteit, geheugenverbruik en latency. De logische volgende stap is om in de hele spraakpipeline meer modellen te ondersteunen: taalmodellen, STT-modellen en TTS-stemmen.
Meer LLM-modellen toevoegen
De LLM-image kan worden gewijzigd in docker-compose.yml. Vervang bijvoorbeeld de standaardimage:
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576door een andere image uit de rkllm-docker-repository en start daarna de stack opnieuw:
sudo docker compose up -dMeer STT-modellen toevoegen
Whisper wordt momenteel gebruikt voor spraakherkenning. De Whisper-service kan worden uitgebreid met extra modelgroottes, talen en RKNN-geconverteerde encoder/decoder-paren. Gebruikers kunnen dan kiezen voor een kleiner model met lagere latency of een groter model met betere transcriptienauwkeurigheid.
STT-ondersteuning zou het volgende moeten omvatten:
- Engelse, Chinese en andere taalvocabulaire.
- Meerdere Whisper-modelgroottes.
- Modelspecifieke configuratie in
docker-compose.yml. - Benchmarks voor transcriptienauwkeurigheid, RAM-gebruik en realtime factor.
Meer TTS-modellen en stemmen toevoegen
Piper levert momenteel de Amy Medium-stem. Meer Piper-stemmen kunnen worden meegeleverd in de TTS-image, zodat gebruikers verschillende talen, accenten en stemstijlen kunnen kiezen. Ook kunnen RKNN-compatibele decoder-modellen worden toegevoegd om de RK3576-NPU voor meer stemconfiguraties te benutten.
TTS-ondersteuning zou het volgende kunnen omvatten:
- Meerdere Piper-stemmen en talen.
- Stemselectie via Compose-configuratie of Home Assistant.
- Verschillende kwaliteits- en snelheidsprofielen.
- Streaming en kortere audioblokken voor snellere afspeelreactie.
Andere verbeteringen
Toekomstige verbeteringen kunnen ook zijn:
- Een eenvoudige modelselectievariabele voor elke service.
- Benchmarking van de volledige pipeline over verschillende modelcombinaties.
- Streaming LLM-antwoorden om de waargenomen reactietijd te verkorten.
- Ondersteuning voor aangepaste wake-wordmodellen.
- Documentatie van aanbevolen modelcombinaties voor verschillende RAM-capaciteiten.
Grotere modellen kunnen de gesprekskwaliteit verbeteren, maar vereisen ook meer RAM en kunnen de latency verhogen. Het beste model is daarom een balans tussen de mogelijkheden van het board en de gewenste ervaring thuis.
Conclusie
Dit project laat zien dat een moderne Home Assistant-spraakassistent niet per se afhankelijk hoeft te zijn van de cloud. Door open-source spraakmodellen, Docker, het Wyoming-protocol en RK3576-NPU-versnelling te combineren, kan de volledige interactie lokaal draaien op een compact edge-apparaat.
Het resultaat is een privacyvriendelijke, aanpasbare en sterk geïntegreerde spraakinterface met Home Assistant, terwijl er ruimte blijft voor experimenten met snellere, grotere en krachtigere modellen in de toekomst.