- Um relato organizado passo a passo de como se construiu um assistente de voz totalmente local baseado em Home Assistant, abandonando o Google Home
- Uso de llama.cpp e de uma arquitetura local-first para alcançar respostas rápidas e privacidade, sem dependência da nuvem
- Testes com várias combinações de GPU, modelos, STT e TTS, comparando desempenho e qualidade para chegar à configuração ideal
- Implementação de funções do dia a dia, como clima, busca e reprodução de música, por meio de design de prompts e scripts de automação
- Como resultado, foi concluído um ambiente de assistente de voz local confiável, com privacidade garantida
Configuração de hardware
- O Home Assistant roda em um UnRaid NAS, e o servidor de voz usa um Beelink MiniPC com suporte a USB4 e um gabinete eGPU
- Foram testados vários modelos de GPU, como RTX 3050~3090 e RX 7900XTX
- A RTX 3090 e a RX 7900XTX entregaram respostas em 1~2 segundos, enquanto a RTX 3050 ficou em cerca de 3 segundos
- O hardware de voz é composto por HA Voice Preview Satellite, 2 unidades do Satellite1 Small Squircle Enclosure e Pixel 7a
Modelos e desempenho
- Foram testados vários modelos, como GGML GPT-OSS:20B, Unsloth Qwen3 series e GLM 4.7 Flash (30B)
- Todos os modelos oferecem suporte básico a tool calling
- Os critérios de avaliação incluíram controle de vários dispositivos, compreensão de contexto, tratamento de comandos mal reconhecidos e capacidade de ignorar entradas incorretas
Software do servidor de voz
- llama.cpp é recomendado como executor de modelos
- Entrada de voz (STT)
- Wyoming ONNX ASR (Nvidia Parakeet V2, branch OpenVINO): tempo de inferência na CPU de cerca de 0,3 segundo
- Rhasspy Faster Whisper: relativamente mais lento com base em ONNX na CPU
- Saída de voz (TTS)
- Kokoro TTS: permite várias combinações de vozes e lida bem com texto
- Piper (CPU): oferece suporte a várias vozes, mas tem pontos fracos com números e endereços
- Integração de LLM no Home Assistant
- LLM Conversation: melhora a qualidade básica da conversa
- LLM Intents: fornece ferramentas como busca na web, busca de locais e previsão do tempo
Transição do Google Assistant para um assistente local
- Como o Google Assistant foi gradualmente perdendo precisão de resposta e funcionalidades, surgiu a necessidade de substituí-lo
- Questões de privacidade e a impossibilidade de controle em caso de falhas na nuvem também foram fatores centrais da migração
Tentativas iniciais e melhorias nos modelos
- No início, foi usado o modelo padrão do Ollama, mas as falhas em tool calling eram frequentes
- O desempenho melhorou significativamente com o uso de modelos GGUF de alta precisão do HuggingFace
- Para evitar cortes na saída de voz causados por instabilidade no Wi‑Fi, foram configurados streaming e uma rede IoT dedicada
Expansão de recursos e design de prompts para LLM
- O assistente de voz foi configurado para executar clima, horário de funcionamento, conhecimento geral e reprodução de música
- A integração com llm-intents ampliou os recursos, mas os resultados iniciais foram limitados
- O design de prompts teve papel central
- A adição de seções
# por serviço e listas de instruções detalhadas aumentou a precisão do tool calling do LLM
- A remoção de exclamações e emojis desnecessários garantiu um formato de resposta amigável para TTS
- O ChatGPT foi usado para aprimorar os prompts de forma iterativa
Resolução de problemas com automação
- Como o recurso de reprodução de música não podia ser executado diretamente pelo LLM, ele foi complementado com scripts de automação do Home Assistant
- O comando “Play {music}” serve como gatilho para reproduzir música no media_player correspondente ao dispositivo satellite solicitado
- O comando “Stop playing” permite interromper a reprodução
- Em atualizações posteriores, o LLM passou a realizar busca e reprodução de música de forma natural, mas a automação continua sendo uma abordagem útil
Treinamento de wake word personalizada
- Em vez da wake word padrão, foi usado “Hey Robot”
- O treinamento foi feito por cerca de 30 minutos com microWakeWord-Trainer-Nvidia-Docker
- A taxa de falsos positivos ficou no nível do Google Home, com possibilidade de melhoria por meio de função de mudo automático
Resultado final
- Embora seja um pouco complexo para o usuário médio, foi concluído um ambiente de assistente de voz local com ajustes finos
- Ele oferece proteção de privacidade, controle estável e ajuste de desempenho personalizado
- Como assistente de voz totalmente independente da nuvem, conseguiu reunir confiabilidade e diversão
Ainda não há comentários.