11 pontos por GN⁺ 2024-01-14 | 2 comentários | Compartilhar no WhatsApp
  • 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

 
xguru 2024-01-15

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.

 
GN⁺ 2024-01-14
Opiniões no Hacker News
  • Opinião do fundador do Home Assistant:

    • O Home Assistant pretende integrar funcionalidades semelhantes nativamente ainda este ano.
    • Enfatiza a necessidade de uma API padronizada para LLM local e quer a capacidade de consultar o que o modelo consegue fazer.
    • Gostaria de ver um LLM local que ofereça suporte a recursos semelhantes aos da OpenAI para que ele funcione de forma útil.
    • Quer resultados diretamente executáveis, sem erros, ao gerar JSON.
  • Experiência de outro usuário:

    • Aponta que falta uma explicação clara dos resultados após a instalação.
    • Menciona que, em comparação com o GPT-4, modelos pequenos têm limitações para realizar tarefas complexas.
    • Gostaria de ver exemplos de saída reais.
  • Usuário que testou LLMs locais:

    • Afirma que o modelo llava-v1.5-7b-q4 é eficaz para tarefas de automação residencial.
    • Diz ter obtido resultados em nível semelhante ao GPT-4.
  • Feedback de usuário do Home Assistant:

    • Reconhece que entende pouco de IA e agradece pelo template para começar.
    • Menciona que usa o Home Assistant de forma útil em vários locais.
  • Pergunta sobre array de microfones:

    • Tem curiosidade sobre o estado de avanço dos arrays de microfones usados como hobby.
    • Levanta dúvidas sobre o desempenho do microfone em comparação com dispositivos Echo.
  • Perguntas sobre hardware e configuração:

    • Pergunta qual modelo de GPU foi usado e como ele se compara em preço.
    • Solicita informações específicas sobre a escolha da quantização.
    • Espera que, devido às restrições de VRAM, a precisão seja mantida mesmo em níveis mais baixos de quantização.
  • Pedido de mais informações sobre escolha de microfone e implementação de reconhecimento de voz:

    • Espera mais detalhes no futuro sobre a escolha do microfone e a implementação do reconhecimento de voz.
  • Experiência de um usuário com a API da OpenAI:

    • Escreveu um wrapper simples em Python usando a API da OpenAI.
    • Usou o ESP32-Box e o projeto Willow para reconhecimento e geração de voz locais.
  • Pergunta sobre configuração de rede:

    • Quer saber por que não foi usado o tailscale em vez de uma configuração de rede complexa.
    • Pede uma explicação sobre a flexibilidade oferecida por essa infraestrutura.