- Tiene experiencia usando Siri y Google Assistant. Pueden controlar dispositivos, pero no permiten personalización y dependen de servicios en la nube.
- Quiere aprender algo nuevo y tener algo genial que pueda usar en su vida diaria. Quiere que el nuevo asistente tenga una personalidad sarcástica y mordaz.
- Quiere que todo se ejecute localmente. Sin excepciones. No hay razón para que una cafetera esté hablando con un servidor al otro lado del país.
- Quiere algo más que la función básica de "encender la luz". Espera poder agregar nuevas capacidades en el futuro.
Arquitectura
- Usa un Protectli Vault VP2420 para firewall, NIPS y enrutamiento VLAN.
- Expone HomeAssistant a internet para poder usarlo de forma remota sin VPN. Para ello toma medidas de seguridad extremas.
- Eligió un switch administrable TRENDnet TEG-3102WS para obtener 2.5 gigas a bajo costo.
- Usa dos RTX 4060Ti en una computadora armada lo más barata posible, comprando la mayoría de las piezas en eBay. La VRAM es importante para suministrarle grandes cantidades de contexto al LLM.
- Usa un Minisforum UM690 para ejecutar HomeAssistant (y WAF). También podría servir una Raspberry Pi 4, pero ejecuta muchos servicios y Whisper exige bastante al CPU.
- Un caos gigantesco de cables Ethernet.
Motor de inferencia
- Eligió vLLM porque quiere un LLM de propósito general que también pueda usarse fuera de HomeAssistant. Es muy rápido y es el único motor capaz de atender a varios clientes al mismo tiempo.
- Soporta un servidor API compatible con OpenAI, lo que facilita mucho las cosas.
- Eligió el modelo Mixtral de Mistral AI, cuyo equilibrio entre VRAM y rendimiento le queda perfecto.
Cuantización del modelo
- Como no puede ejecutar el modelo completo en fp32, eligió una versión cuantizada.
- La cuantización, como un MP3, reduce un poco la calidad y mejora enormemente los requisitos de recursos.
- Tuvo que elegir entre GPTQ y AWQ, y como necesitaba pasarle al modelo todo el estado del hogar inteligente, eligió GPTQ.
Integración con HomeAssistant
- Usó los addons predeterminados de Whisper y Piper de HomeAssistant OS, pero descargó un modelo de voz GlaDOS personalizado desde HuggingFace.
- HomeAssistant ya tiene una integración con OpenAI, pero no puede controlar dispositivos y no tiene una configuración
base_url para obligarlo a hablar con un servidor OpenAI falso en lugar de los servidores de OpenAI, así que no usó toda la funcionalidad extendida.
- Encontró una integración personalizada, pero ya sabe que el software no funciona así. Después de instalarla, aparecieron dos problemas más.
Resolución de problemas
- Mixtral usa una plantilla de chat peculiar. No permite prompts de sistema y lanza una excepción si detecta uno.
- vLLM no soporta la API de function calling de OpenAI. Incluso si la soportara, tendría que ejecutar un modelo especializado en function calling.
- Para modificar Mixtral, cambió la plantilla de chat para que aceptara un "prompt de sistema". Usó Librechat como UI para lograr que el prompt de sistema funcionara correctamente.
Salida JSON
- Aunque el modelo no pueda llamar funciones, se le puede pedir que produzca JSON y luego ejecutarlo.
- Hizo un fork de la integración personalizada y agregó la capacidad de ejecutar servicios de HomeAssistant mediante JSON.
Prompt de GlaDOS
- Modificó el prompt de GlaDOS para usarlo en su propio asistente.
- Surgió un problema: al modelo le encanta producir JSON. Incluso ante preguntas simples, devuelve JSON intentando llamar servicios.
Solución
- Pidió que se insertara un texto conocido cuando el usuario solicitara una tarea. Eligió "$ActionRequired".
- Filtró eso en su fork y resolvió el problema.
Prompt final
- Actualizó el prompt inicial con más dispositivos y menos entidades innecesarias.
- Lo incentiva a no realizar acciones si no se le pidió hacerlo.
- Después de varios intentos, consiguió algo que funciona casi perfectamente (aunque es un poco lento por la limitación del bus de memoria de la 4060Ti).
Opinión de GN⁺
- Este proyecto puede ser muy interesante para quienes valoran la privacidad y una experiencia personalizada.
- Usar un LLM que corre localmente para controlar un hogar inteligente ofrece grandes ventajas en seguridad de datos y velocidad de respuesta.
- El proceso de construir y personalizar el sistema por cuenta propia es un gran ejemplo de educación técnica y cultura DIY.
2 comentarios
Está bien resumido, así que fue divertido leerlo.
Como Home Assistant planea añadir funciones de LLM, parece que en el futuro será posible usarlo de forma más sencilla.
Incluso en un canal de YouTube de programas de interiorismo que veo dijeron que están creando productos IoT, así que sería aún más interesante si desde el principio pensaran en hacer posible usar este tipo de cosas también en lugares así.
Opinión de Hacker News
Opinión del fundador de Home Assistant:
Experiencia de otro usuario:
Usuario que probó un LLM local:
Comentarios de un usuario de Home Assistant:
Pregunta sobre el arreglo de micrófonos:
Preguntas sobre hardware y configuración:
Solicitud de más información sobre la elección del micrófono y la implementación del reconocimiento de voz:
Experiencia de un usuario con la API de OpenAI:
Pregunta sobre la configuración de red: