- Já teve experiência usando Siri e Google Assistente. Eles conseguem controlar dispositivos, mas não permitem personalização e dependem de serviços em nuvem.
- Quer aprender algo novo e também quer algo legal que possa usar no dia a dia. Quer que o novo assistente tenha uma personalidade sarcástica e irônica.
- Quer que tudo rode localmente. Sem exceções. Não há motivo para a máquina de café conversar com um servidor do outro lado do país.
- Quer ir além da função básica de "acender a luz". Espera poder adicionar novos recursos no futuro.
Arquitetura
- Usa um Protectli Vault VP2420 para firewall, NIPS e roteamento VLAN.
- Expõe o HomeAssistant à internet para poder usá-lo remotamente sem VPN. Para isso, adota medidas de segurança extremas.
- Escolheu o switch gerenciável TRENDnet TEG-3102WS para obter 2,5 gigabit por um preço baixo.
- Usa duas RTX 4060Ti em um computador montado o mais barato possível com peças compradas principalmente no eBay. A VRAM é importante para fornecer muito contexto ao LLM.
- Usa um Minisforum UM690 para rodar o HomeAssistant (e o WAF). Um Raspberry Pi 4 também seria possível, mas muitos serviços estão em execução e o Whisper exige bastante da CPU.
- Uma enorme bagunça de cabos Ethernet.
Motor de inferência
- Escolheu o vLLM porque queria um LLM de uso geral que também pudesse ser usado fora do HomeAssistant. É muito rápido e é o único motor capaz de atender vários clientes ao mesmo tempo.
- Ele oferece suporte a um servidor de API compatível com OpenAI, o que facilita muito a vida.
- Escolheu o modelo Mixtral da Mistral AI, que tem o equilíbrio perfeito entre VRAM e desempenho.
Quantização do modelo
- Como não era possível executar o modelo completo em fp32, escolheu uma versão quantizada.
- A quantização, como um MP3, reduz um pouco a qualidade, mas melhora drasticamente os requisitos de recursos.
- Precisou escolher entre GPTQ e AWQ e, como precisava passar todo o estado da casa inteligente para o modelo, escolheu GPTQ.
Integração com o HomeAssistant
- Usou os addons padrão Whisper e Piper do HomeAssistant OS, mas baixou um modelo de voz GlaDOS personalizado no HuggingFace.
- O HomeAssistant já tem uma integração com OpenAI, mas ela não consegue controlar dispositivos e não há configuração
base_url para forçá-la a conversar com um servidor OpenAI falso em vez dos servidores da OpenAI, então não usou toda a funcionalidade de extensão.
- Encontrou uma integração personalizada, mas sabe que o software não funciona desse jeito. Depois da instalação, surgiram mais dois problemas.
Resolução de problemas
- O Mixtral usa um template de chat peculiar. Ele não aceita prompts de sistema e gera uma exceção se encontrar um.
- O vLLM não oferece suporte à API de chamada de função da OpenAI. Mesmo que oferecesse, seria necessário rodar um modelo especializado em chamadas de função.
- Para corrigir o Mixtral, alterou o template de chat para aceitar o "prompt de sistema". Usou o Librechat como interface para fazer o prompt de sistema funcionar corretamente.
Saída em JSON
- Mesmo que o modelo não consiga chamar funções, ainda é possível pedir que ele produza JSON e executá-lo.
- Fez um fork da integração personalizada e adicionou a capacidade de executar serviços do HomeAssistant via JSON.
Prompt da GlaDOS
- Adaptou o prompt da GlaDOS para usar em seu próprio assistente.
- Surgiu um problema: o modelo gosta demais de gerar saída em JSON. Mesmo para perguntas simples, ele produzia JSON tentando chamar serviços.
Solução
- Pediu que, quando o usuário solicitasse uma tarefa, fosse inserido um texto conhecido. Escolheu
$ActionRequired.
- No fork, filtrou isso e resolveu o problema.
Prompt final
- Atualizou o prompt inicial com mais dispositivos e menos entidades desnecessárias.
- Incentivou o modelo a não realizar ações quando isso não fosse solicitado.
- Depois de várias tentativas, conseguiu algo que funciona quase perfeitamente (um pouco lento por causa da limitação do barramento de memória da 4060Ti).
Opinião do GN⁺
- Este projeto pode ser muito interessante para quem valoriza privacidade e uma experiência altamente personalizada.
- Controlar a casa inteligente com um LLM rodando localmente oferece grandes vantagens em segurança de dados e velocidade de resposta.
- O processo de construir e personalizar o sistema por conta própria é um ótimo exemplo de incentivo à educação técnica e à cultura DIY.
2 comentários
Está bem organizado, então foi uma leitura bem interessante.
Como o Home Assistant pretende adicionar recursos de LLM, parece que no futuro vai ser possível usar isso de forma mais simples.
Até em um canal de YouTube sobre programas de decoração de interiores que eu acompanho disseram que vão criar produtos de IoT; se lugares assim já pensarem desde o início em como usar esse tipo de coisa, acho que vai ficar ainda mais interessante.
Opiniões no Hacker News
Opinião do fundador do Home Assistant:
Experiência de outro usuário:
Usuário que testou LLMs locais:
Feedback de usuário do Home Assistant:
Pergunta sobre array de microfones:
Perguntas sobre hardware e configuração:
Pedido de mais informações sobre escolha de microfone e implementação de reconhecimento de voz:
Experiência de um usuário com a API da OpenAI:
Pergunta sobre configuração de rede: