Como construí o MitAI: um chatbot que responde preço, cotação e dúvidas sobre lojas sem inventar dados
Como construí o MitAI: um chatbot que responde preço, cotação e dúvidas sobre lojas sem inventar dados
Open WebUI + function calling + RAG na frente da API do Lojas Paraguai, pra fechar a porta que mais mata projeto de chatbot em e-commerce: o modelo alucinar preço.
🧢 Por que "MitAI"
O nome é um trocadilho: "mitã'i" (ou mitaí) significa "criança" no guarani paraguaio, forma carinhosa e cotidiana de chamar os pequenos no Paraguai. Aqui vira "mit-AI", a IA do Lojas Paraguai.
🎯 O problema
No Lojas Paraguai o usuário quer três coisas: "quanto custa esse produto?", "a quanto tá o dólar hoje?" e "essa loja é confiável?". Parece trabalho perfeito pra um chatbot. Mas num site de comparação de preços existe uma falha que mata o projeto inteiro: o modelo inventar o preço.
LLM sozinho, sem ferramentas, alucina com confiança. Testei a mesma pergunta, "iphone 17 pro max 256gb", três vezes seguidas, e recebi três preços diferentes. Num site onde preço correto é o produto, isso é inaceitável. O modelo precisa buscar o dado real e atualizado, não recitar de memória.
🛠️ A solução: Open WebUI + tools na própria API
Em vez de deixar o modelo responder de cabeça, ele chama ferramentas que batem no backend do Lojas Paraguai:
dolar: cotação real do dia e gráfico semanalbuscar-produto/detalhe-produto: preço, lojas que vendem e detalhes do produtolojas: informações das lojas cadastradas
Fluxo é function calling clássico:
- Modelo decide qual tool chamar, a partir da pergunta do usuário
- Backend executa a chamada na API interna do catálogo
- API devolve o resultado
- Modelo formata a resposta em linguagem natural, sem alterar o dado
O resultado: aquele mesmo "iphone 17 pro max 256gb" que antes dava três preços diferentes agora retorna sempre o valor do banco, igual em toda tentativa. Preço não vem mais da imaginação do modelo, vem do banco.
🧩 Por que Open WebUI
Open WebUI é uma plataforma open source que roda em Docker e serve como camada de orquestração na frente do modelo. Criei um modelo próprio com base no gpt-4.1-mini da OpenAI, adicionei minha FAQ na base de conhecimento (RAG) e criei as tools de acesso à minha API.
Ele expõe uma API compatível com OpenAI (/api/chat/completions), então o backend do Lojas Paraguai conversa com o Open WebUI exatamente como conversaria direto com a OpenAI, troca de provider é transparente. E já traz pronto: gestão de tools, workspaces, RAG, chaves de API e base de conhecimento. Isso poupou de construir do zero todo o encanamento de function calling e recuperação de contexto.
⚙️ A camada que fecha a porta pra alucinação
Passar o JSON cru da API pro modelo não resolve. Testei assim primeiro, e sem enriquecer a resposta o modelo simplesmente inventa em cima do que falta:
- Cotação do dólar sem o cálculo pronto → modelo chuta uma cotação errada pra converter preço
- Slug de produto sem URL montada → modelo adivinha um caminho, que dá 404
A correção foi uma camada de enrich() na API, que já entrega o dado mastigado, exatamente o que a tool deveria trazer:
cotação × dólar = valor em BRL já calculado
slug → URL completa e válida do produto
Com isso o modelo não tem mais espaço pra "completar" nada: o dado que falta pra montar a resposta já vem pronto na tool.
Fechei ainda mais a porta com temperature = 0.2. Chatbot não é lugar pra criatividade, quero a resposta mais determinística possível em cima do dado que a tool entregou, não variação estilística. Temperatura baixa reduz a margem do modelo pra "florear" e inventar em cima do fato.
🎓 Principais lições
- Dados crus não bastam. Se falta um cálculo ou uma montagem de URL pro modelo terminar a resposta, ele preenche o vazio inventando. Enriquecer na API, não confiar que o modelo "resolve" em cima do JSON cru.
- Num domínio específico, LLM é orquestrador, não fonte da verdade. Ele decide o que buscar (qual tool, com quais parâmetros); o dado sempre vem da API.
- Alucinação é o comportamento padrão quando a tool falha ou o dado chega incompleto. Não é uma falha rara do modelo, é o que ele faz por padrão quando falta contexto.
- Temperatura baixa em chatbot factual não é sobre estilo, é sobre correção. Menos variação = menos chance do modelo se afastar do dado real que a tool trouxe.
🔗 Onde testar
Chat disponível em www.lojasparaguai.com.br/mitai. Além do site, o MitAI também está no app mobile do Lojas Paraguai.