Com este artigo, inicia-se uma nova série de conteúdos dedicados a estudar e divulgar casos reais de sucesso com IA local.
Há cerca de 2 anos desenvolvi um pequeno bot "familiar". Tem como principais funções facilitar a coordenação de alguns aspectos da nossa vida familar, entre eles:
- começar o dia com um resumo do está na agenda
- gerir uma lista de compras colectiva e mantê-la organizada
- gerir lembretes rápidos e fáceis
- dar previsões meteorológicas, incluíndo previsões de radiação solar adaptadas ao nosso sistema solar
Este assistente funciona como um bot no telegram, para ser de fácil acesso em qualquer lado e sem necessitar de interfaces ou apps próprias.
A inteligência artificial do assistente
Ao longo destes dois anos, fui experimentando diferentes modelos de IA na Cloud (chatgpt, claude, gemini). Os resultados foram satisfatórios com qualquer um, também porque o nível de exigência deste trabalho é baixa. A prompt e a definição de tools ronda os 2300 tokens. A minha troca entre modelos deve-se por isso à procura de melhores preços. Quanto mais útil é o assistente, mais o usamos. E, como é óbvio, quanto mais se usa, mais se paga. Em alguns meses o custo mensal chegou a ultrapassar os 12€ em custos de API.
Isto deve-se também ao facto deste bot ter autonomia, não ficando a aguardar por mensagens dos utilizadores para fazer algo. Esta era uma funcionalidade crucial para que fosse proactivo, mas que se traduz em muito mais uso.
Não vou dizer que ~12€ seja caro, mas especialmente quando já se pagam subscrições mensais para se ter acesso a IA aqui e ali, era um custo que não gostava de ter. Especialmente porque sabia que gostava de lhe dar mais uso mas não o fazia ao pensar nos custos acrescidos.
Nos últimos tempos temos visto surgir modelos capazes e mais baratos (deepseek, qwen, glm), e temos ainda a possibilidade de melhores preços com modelos fechados através do OpenRouter.
No entanto, sendo que é um assistante pessoal e familiar, preferia não enviar os dados para locais desconhecidos e mantive sempre a ideia de, um dia, poder ter uma IA local como cérebro do assistente.
O dia da IA local chegou
O código deste assistente corre numa VPS pessoal na Hetzner, onde também mantenho outros projectos. É uma VPS típica, com 4 vCPUs e 8 Gb de RAM.
Realizei vários testes com diferentes modelos abertos e pequenos, para encontrar o sweet-spot que me garantisse a qualidade das respostas e velocidade suficiente para manter as coisas fluídas.
Decidi fazer um upscale por mais uns euros, passando a 8 vCPUs e 16 Gb de RAM, o que me permitiria usar modelos maiores. Pode parecer um contra-senso querer modelos maiores. Afinal de contas, sem GPU disponível, a velocidade já será bastante lenta.
Mas aqui entra a magia dos modelos MoE (mixture of experts) - com necessidades maiores de memória mas velocidades igualmente mais elevadas.
O modelo GPT-OSS-20B acabou por ser a solução perfeita. Com a quantização Q4, cabe em cerca de 12Gb de RAM, deixando ainda 4Gb livres para o sistema operativo e outras aplicações, que é mais do que suficiente.
Optimizações para inferência mais rápida
Quando corremos os nossos próprios modelos, especialmente em hardware tão limitado quanto este, é crucial fazer todas as optimizações possíveis de forma a espremer a performance ao máximo.
Rapidamente se tornou óbvio que a forma como o código do assistente construía os prompts dinâmicos e o historial de mensagens, não estava optimizado para usar a cache que os LLMs devem usar. Este é o tipo de coisa que ao usar modelos super-rápidos na cloud não se percebe pois tudo fica invisível.
Após várias optimizações e iterações de mudanças, cheguei finalmente ao que considerei uma solução "boa o suficiente". A prompt e as tools continuam nos ~2300tok, mas agora com um processamento mais eficaz.
No geral, a velocidade média de geração de novos tokens situa-se nos 22 tok/seg, o que é muito aceitável dado o hardware e as necessidades deste projecto.
Por um lado, perdi as respostas quase instantâneas. Por outro, ganhei privacidade, autonomia e tokens grátis ilimitados. Agora sim, posso pensar em expandir e dar mais e mais uso ao assistente, sem preocupações de aumentar a conta mensal.
