Hanzo Huang2026-07-28

Construir un asistente de voz privado de Home Assistant en el RK3576

Crea un asistente de voz privado y local de Home Assistant en Rockchip RK3576. La pila combina Whisper para reconocimiento de voz, Piper para síntesis de voz, openWakeWord para detección de palabras de activación y Qwen para conversación local, todo acelerado por la NPU del RK3576.

reComputer-RKrk3576llmhome-assistantwhisperpiperopenwakewordqwenGithub

Construir un asistente de voz privado de Home Assistant en el RK3576

Home Assistant Assist puede ser mucho más que una simple interfaz de voz conectada a la nube. Con una placa Rockchip RK3576, es posible ejecutar la cadena completa de procesamiento de voz de forma local: desde el reconocimiento de voz hasta la detección de palabras de activación, pasando por el razonamiento con modelos de lenguaje y la síntesis de voz.

Este proyecto reúne toda esa lógica en una pila de Docker Compose. Whisper, Piper, openWakeWord y Qwen trabajan juntos, mientras las tareas principales de IA se aceleran gracias a la NPU del RK3576.

1. Inicio rápido

Requisitos

  • Una placa Rockchip RK3576 con Linux ARM64
  • Docker Engine y el plugin de Docker Compose
  • Acceso a los nodos de dispositivo del RK3576, incluyendo /dev/rknpu y /dev/dma_heap
  • Una instancia de Home Assistant en la misma red, o suficientes recursos para ejecutarlo directamente en la placa

Clona el proyecto en la placa RK3576:

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

Inicia los servicios de voz:

bash
sudo docker compose up -d --pull always

Si también quieres que Home Assistant se ejecute en la misma placa, puedes usar el perfil opcional:

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

Comprueba los contenedores en ejecución y los registros:

bash
sudo docker compose ps
sudo docker compose logs -f

2. Arquitectura

La pila separa cada etapa de la interacción por voz en un servicio independiente. Home Assistant se comunica con los servicios de voz a través del protocolo Wyoming y con el modelo de lenguaje local mediante una API compatible con OpenAI.

Code
Usuario
  │ entrada de voz
Home Assistant Assist
  │ audio
openWakeWord ── activado ──▶ Whisper STT
                                  │ transcripción
                         LLM local Qwen 2.5
                                  │ texto de respuesta
                              Piper TTS
                                  │ respuesta de audio
                         Home Assistant Assist
                               Usuario

Whisper STT, Qwen 2.5 y Piper TTS se ejecutan con aceleración de la NPU del RK3576.

Los servicios quedan expuestos en estos puertos:

ServicioFunciónPuerto
PiperTexto a voz10200
WhisperReconocimiento de voz10300
openWakeWordDetección de palabra de activación10400
API RKLLMAPI local de LLM compatible con OpenAI8001

El modelo de lenguaje predeterminado es Qwen2.5-1.5B-Instruct con cuantización W4A16. El servicio RKLLM lo pone a disposición de Home Assistant como agente conversacional local, de modo que las solicitudes por voz pueden procesarse sin enviar los datos de conversación a un proveedor remoto.

3. Rendimiento

La configuración probada usa:

  • Whisper para el reconocimiento de voz
  • Qwen2.5-1.5B-Instruct para la conversación
  • Piper Amy Medium para la síntesis de voz

Con los modelos acelerados por la NPU del RK3576, la latencia medida fue la siguiente:

EtapaTiempo
Transcripción con Whisper0.626 s
Respuesta del LLM2.82 s
Síntesis con Piper0.474 s

El tiempo de respuesta de extremo a extremo depende de la longitud de la solicitud hablada, la longitud de la respuesta generada y del propio procesamiento de Home Assistant. Aun así, el RK3576 ofrece una base práctica para un asistente de voz privado y ágil en el borde del sistema.

El modelo de 1,5 B consume aproximadamente 1,5 GB de RAM. Un modelo probado de 3 B en W4A16 utiliza alrededor de 2,5 GB de RAM, por lo que la capacidad de memoria es un factor importante a la hora de elegir un modelo más grande.

4. Guía de configuración

Añadir los servicios Wyoming

En Home Assistant, abre Ajustes → Dispositivos y servicios, selecciona Añadir integración y busca Wyoming Protocol.

Añade los servicios siguientes usando la dirección IP de la placa RK3576 como host:

ServicioPuerto
Whisper STT10300
Piper TTS10200
openWakeWord10400

Crear un pipeline de Assist

Abre Ajustes → Asistentes de voz y crea o edita un pipeline de Assist. Selecciona:

  1. El servicio Wyoming Whisper para el reconocimiento de voz.
  2. El servicio Wyoming Piper para la síntesis de voz.
  3. El servicio Wyoming openWakeWord para la detección de la palabra de activación.

Configurar el agente conversacional local

Para usar Qwen como agente conversacional, instala la integración Local LLM a través de HACS. Configúrala con estos valores:

text
Backend: OpenAI Compatible Conversations API
API hostname: RK3576_BOARD_IP
API port: 8001
API path: /v1
API key: sk-local
Model name: rkllm-model

La API key solo funciona como marcador de posición para este servidor local. Después de añadir la integración, vuelve al pipeline de Assist y selecciona el nuevo agente conversacional local.

Elegir un LLM distinto

El LLM se ofrece como imagen de Docker, así que los usuarios pueden cambiar el modelo sin modificar la configuración de Home Assistant. La imagen por defecto es:

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

Para usar otro modelo, elige una imagen compatible con RK3576 del repositorio rkllm-docker y sustituye el valor de llm.image en docker-compose.yml:

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

Después reinicia la pila:

bash
sudo docker compose up -d

Los modelos disponibles pueden tener distintos requisitos de RAM, calidad de respuesta y latencia. Comprueba la documentación del modelo antes de elegir uno más grande para la placa.

Personalizar la palabra de activación

El modelo de wake word por defecto es ok_nabu. Cambia el comando openwakeword en docker-compose.yml para precargar otro modelo compatible:

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

Cambiar el idioma de Whisper

La imagen de Whisper incluye vocabularios en inglés y en chino. El inglés es el idioma por defecto; el chino puede seleccionarse añadiendo --language zh al comando del servicio de Whisper en docker-compose.yml.

5. Mejoras: añadir más modelos

La configuración actual usa modelos compactos para mantener un buen equilibrio entre calidad, uso de memoria y latencia. El siguiente paso lógico es ampliar la compatibilidad en toda la canalización de voz: modelos de lenguaje, modelos STT y voces TTS.

Añadir más modelos LLM

La imagen del LLM puede cambiarse en docker-compose.yml. Por ejemplo, sustituye la imagen por defecto:

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

por otra imagen del repositorio rkllm-docker y luego reinicia la pila:

bash
sudo docker compose up -d

Añadir más modelos STT

Whisper se usa actualmente para reconocimiento de voz. El servicio de Whisper puede ampliarse para admitir más tamaños de modelo, más idiomas y pares codificador/decodificador convertidos a RKNN. Así, los usuarios pueden elegir un modelo más pequeño para menor latencia o uno más grande para mejorar la precisión de transcripción.

La compatibilidad STT debería incluir:

  • Vocabularios en inglés, chino y otros idiomas.
  • Varios tamaños de modelo Whisper.
  • Configuración específica del modelo en docker-compose.yml.
  • Benchmarks de precisión de transcripción, uso de memoria y factor en tiempo real.

Añadir más modelos y voces TTS

Piper ofrece actualmente la voz Amy Medium. Se pueden empaquetar más voces de Piper en la imagen TTS para que los usuarios elijan distintos idiomas, acentos y estilos de voz. También pueden añadirse modelos decodificadores compatibles con RKNN para aprovechar la NPU del RK3576 en más configuraciones de voz.

La compatibilidad TTS podría incluir:

  • Varias voces e idiomas de Piper.
  • Selección de voz mediante la configuración de Compose o Home Assistant.
  • Perfiles de calidad y velocidad distintos.
  • Streaming y fragmentos de audio más cortos para una reproducción más rápida.

Otras mejoras

Las mejoras futuras también podrían incluir:

  • Una variable sencilla de selección de modelo para cada servicio.
  • Pruebas de rendimiento de toda la canalización con distintas combinaciones de modelos.
  • Respuestas LLM en streaming para reducir el tiempo de respuesta percibido.
  • Compatibilidad con modelos de wake word personalizados.
  • Documentación de combinaciones de modelos recomendadas para distintas capacidades de RAM.

Los modelos más grandes pueden mejorar la calidad de la conversación, pero también requieren más RAM y pueden aumentar la latencia. El mejor modelo es, por tanto, un equilibrio entre las capacidades de la placa y la experiencia que se desea en el hogar.

Conclusión

Este proyecto demuestra que un asistente de voz moderno de Home Assistant no necesita depender de la nube. Al combinar modelos de voz de código abierto, Docker, el protocolo Wyoming y la aceleración por NPU del RK3576, toda la interacción puede ejecutarse de forma local en un dispositivo compacto de borde.

El resultado es una interfaz de voz privada, personalizable e íntimamente integrada con Home Assistant, al tiempo que deja espacio para experimentar con modelos más rápidos, más grandes y más capaces en el futuro.