- Un caso que organiza paso a paso el proceso de construir un asistente de voz completamente local basado en Home Assistant, dejando atrás Google Home
- Uso de llama.cpp y una configuración local-first para lograr respuestas rápidas y privacidad sin depender de la nube
- Se probaron varias combinaciones de GPU, modelos, STT y TTS, comparando rendimiento y calidad para llegar a la configuración óptima
- Mediante diseño de prompts y scripts de automatización, se implementaron funciones reales de uso diario como clima, búsquedas y reproducción de música
- Como resultado, se completó un entorno de asistente de voz local altamente confiable que además garantiza la privacidad
Configuración de hardware
- Home Assistant se ejecuta en un UnRaid NAS, y el servidor de voz usa una Beelink MiniPC con soporte USB4 y un gabinete eGPU
- Se probaron varios modelos de GPU, incluidos RTX 3050~3090 y RX 7900XTX
- La RTX 3090 y la RX 7900XTX ofrecen respuestas en 1~2 segundos, mientras que la RTX 3050 responde en alrededor de 3 segundos
- El hardware de voz está compuesto por HA Voice Preview Satellite, 2 unidades de Satellite1 Small Squircle Enclosure y un Pixel 7a
Modelos y rendimiento
- Se probaron varios modelos, incluidos GGML GPT-OSS:20B, Unsloth Qwen3 series y GLM 4.7 Flash (30B)
- Todos los modelos admiten la función básica de tool calling
- Los criterios de evaluación incluyen control de múltiples dispositivos, comprensión de contexto, manejo de comandos mal reconocidos y capacidad para ignorar entradas incorrectas
Software del servidor de voz
- Se recomienda llama.cpp como ejecutor de modelos
- Entrada de voz (STT)
- Wyoming ONNX ASR (Nvidia Parakeet V2, rama OpenVINO): tiempo de inferencia en CPU de alrededor de 0.3 segundos
- Rhasspy Faster Whisper: relativamente más lento, basado en ONNX sobre CPU
- Salida de voz (TTS)
- Kokoro TTS: permite varias combinaciones de voz y procesa muy bien el texto
- Piper (CPU): admite muchas voces, pero tiene debilidades con números y direcciones
- Integración de LLM en Home Assistant
- LLM Conversation: mejora la calidad base de la conversación
- LLM Intents: proporciona herramientas como búsqueda web, búsqueda de lugares y pronóstico del tiempo
Transición de Google Assistant a un asistente local
- Se reconoció la necesidad de reemplazar Google Assistant porque su precisión de respuesta y funcionalidad fueron deteriorándose
- Los problemas de privacidad y la imposibilidad de controlar cosas cuando falla la nube también fueron factores clave para el cambio
Intentos iniciales y mejora de modelos
- Al principio se usaron los modelos predeterminados de Ollama, pero fallaban con frecuencia en el tool calling
- El rendimiento mejoró mucho al usar modelos GGUF de alta precisión de HuggingFace
- Debido a la inestabilidad del Wi‑Fi, se configuraron ajustes de streaming y una red IoT dedicada para manejar la salida de voz sin cortes
Expansión de funciones y diseño de prompts para LLM
- El asistente de voz se configuró para realizar pronóstico del tiempo, horarios comerciales, conocimiento general y reproducción de música
- La integración llm-intents amplió las funciones, pero los resultados iniciales fueron limitados
- El diseño de prompts funcionó como un elemento clave
- Se mejoró la precisión del tool calling del LLM al agregar secciones
# por servicio y listas de instrucciones concretas
- Al eliminar exclamaciones y emojis innecesarios, se logró un formato de respuesta amigable para TTS
- Se usó ChatGPT para mejorar iterativamente los prompts
Resolución de problemas con automatización
- Como el LLM no podía realizar directamente la reproducción de música, se complementó con scripts de automatización de Home Assistant
- La orden “Play {music}” se usa como disparador para reproducir música en el media_player correspondiente al dispositivo satélite que hizo la solicitud
- La orden “Stop playing” permite detenerla
- Más adelante, una actualización permitió que el LLM hiciera de forma natural la búsqueda y reproducción de música, pero la automatización sigue siendo un enfoque útil
Entrenamiento de una wake word personalizada
- En lugar de la wake word predeterminada, se usó “Hey Robot”
- Se entrenó durante unos 30 minutos con microWakeWord-Trainer-Nvidia-Docker
- La tasa de falsos positivos está al nivel de Google Home, y puede mejorarse con una función de auto mute
Resultado final
- Aunque puede ser algo complejo para el usuario promedio, se completó un entorno de asistente de voz local con capacidad de ajuste fino
- Ofrece protección de la privacidad, control estable y ajuste de rendimiento personalizado
- Como asistente de voz completamente independiente de la nube, logra tanto confiabilidad como disfrute
Aún no hay comentarios.