Ficha técnica de proyecto
Hogar conectado · Asistente de voz con IA
Jarvis, asistente de voz para el hogar
Asistente de voz para una casa con Home Assistant: palabra de activación propia, órdenes resueltas en código y cuatro proveedores de LLM con respaldo.
- Tipo
- Producto propio
- Periodo
- Desde julio de 2026
- Estado
- En producción · En uso diario en una vivienda
- Áreas
- Inteligencia artificial, Desarrollo de software, Infraestructura e IoT, Datos y analítica
- Categorías
- Inteligencia artificial, IoT y domótica, Software y plataformas, Automatización
Alcance
Jarvis escucha en el salón con un micrófono de conferencia y en otras estancias a través de satélites de voz de Home Assistant. Detecta su palabra de activación con un modelo propio de openWakeWord, transcribe con Deepgram y con Whisper local de reserva y resuelve en código las órdenes habituales: luces por habitación, clima, sensores, temporizadores, recordatorios o la lista de la compra. Lo demás pasa a una cadena de cuatro proveedores de LLM con respaldo automático. Guarda conversaciones y hechos en PostgreSQL y Qdrant, habla con ElevenLabs y voces locales de reserva y se usa también desde una PWA y un panel web.
Funciones principales
- Palabra de activación entrenada en casa. Un modelo propio de openWakeWord, evaluado sobre un examen congelado de grabaciones reales, con una compuerta de energía que descarta el silencio digital del micrófono. Un agente reentrena el modelo con los aciertos y fallos que deja el uso.
- Órdenes resueltas en código. Luces por habitación con excepciones («todas salvo la del sofá»), clima, sensores, temporizadores, recordatorios, tele, volumen y lista de la compra se resuelven sin modelo de lenguaje. Las frases con varias órdenes se separan y un contador mide qué parte acaba en el LLM.
- Interpretación flexible con lista blanca. Las órdenes ambiguas, como «una luz tranquila para cenar», las traduce un modelo pequeño a acciones con salida estructurada. Cada acción se valida contra las entidades reales, con un máximo de cuatro por frase. Accesos y cerraduras quedan fuera de este camino.
- Cadena de modelos con respaldo. Un proveedor titular configurable y tres suplentes automáticos entre Groq, OpenAI, Anthropic y Ollama en local, con un plazo para toda la cadena. Si un proveedor retira un modelo, el fallo se detecta y la respuesta sigue por el siguiente.
- Voz con respaldo local. ElevenLabs en streaming por oraciones, de modo que empieza a hablar con la primera frase; si falla o se agota el cupo, Kokoro y Piper en local. Tras una orden consulta Home Assistant para confirmar que el cambio ocurrió de verdad.
- Conversación voz a voz. Modo en vivo con OpenAI Realtime o Gemini Live después de la palabra de activación. La respuesta solo suena si la transcripción propia confirma que alguien hablaba, y las herramientas pasan por los mismos guardias que el resto del asistente.
- Memoria de conversaciones y documentos. Conversaciones, hechos y eventos de la casa en PostgreSQL y en Qdrant, con embeddings multilingües calculados en local. Cada hora un resumidor extrae hechos nuevos, y se pueden indexar documentos PDF, Markdown o texto para consultarlos después.
- Satélites, PWA móvil y panel web. Los satélites de voz de otras estancias llegan al mismo cerebro mediante un puente HTTP. En el móvil, una PWA abre una sesión voz a voz con una clave efímera, y un panel FastAPI con HTMX muestra conversaciones, hechos y eventos.
- Agentes en segundo plano. Diez agentes y un resumidor funcionan como servicios de systemd: avisos proactivos con silencio nocturno y tope diario, registro de eventos de la casa, monitor de recursos, lectura solar, puente de presencia y entrenador de la palabra de activación, entre otros.
Arquitectura
- Entradas y clientes
- Micrófono de conferencia USB en el salón · Satélites de voz de Home Assistant por estancia · PWA móvil con voz por WebRTC · Panel web y Alexa
- Pipeline de voz
- openWakeWord con modelo propio y compuerta de energía · Silero VAD y transcripción especulativa · Deepgram, faster-whisper local y OpenAI · Manejadores en código e intérprete con lista blanca · ElevenLabs, Kokoro y Piper
- Servicios
- Puente de satélites y servicio móvil en FastAPI · Panel FastAPI, Jinja2 y HTMX · Diez agentes y un resumidor en systemd · Contador de enrutado y medición de latencias
- Modelos de lenguaje
- Groq, OpenAI, Anthropic y Ollama local · OpenAI Realtime y Gemini Live · Búsqueda web con Tavily y DuckDuckGo
- Datos
- PostgreSQL 16 · Qdrant con embeddings de 384 dimensiones (sentence-transformers) · Mosquitto (MQTT)
- Casa
- Home Assistant en Docker · Mini PC con Debian y systemd · Copias con manifiesto y verificación
Tecnologías
- Interfaz
- HTMX, PWA
- Backend
- Python, FastAPI
- Datos
- PostgreSQL, Qdrant
- IA y voz
- sentence-transformers, openWakeWord, Whisper, Piper TTS, ElevenLabs, Ollama, OpenAI API, Groq, Claude (Anthropic), Google Gemini, Deepgram
- Infraestructura
- Docker, Linux
- IoT, domótica y 3D
- Home Assistant, MQTT (Mosquitto)
- Calidad
- pytest
Resultados medidos
- 84,6 % de activaciones detectadas a 2,4 falsos positivos por hora, frente al 50 % del modelo preentrenado. Fuente: Bitácora de entrenamiento de la palabra de activación (config/wakeword/bitacora_alexa.md), examen congelado de 26 grabaciones reales · 2026-08
- 276 ms hasta la primera palabra del LLM titular, frente a 550 ms del proveedor anterior. Fuente: Comparativa con el prompt real (scripts/comparar_llm.py), documentada en justine/llm_client.py · 2026-08
- 0,75 s de grabación mínima tras hablar, frente a 2,10 s con el corte por volumen. Fuente: Commit eafedd1 (endpointing con Silero VAD) · 2026-07
- 2.517 pruebas automatizadas aprobadas en el despliegue de las mejoras de voz. Fuente: Informe de despliegue INFORME_MEJORAS_VOZ.md (commit 70cfcd4, rama voz-integracion) · 2026-10