Blog Houssan Ali Hijazi
IA · Python · Android
← Voltar ao blog
Inteligência Artificial, Python, Open WebUi

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 semanal
  • buscar-produto / detalhe-produto: preço, lojas que vendem e detalhes do produto
  • lojas: informações das lojas cadastradas

Fluxo é function calling clássico:

  1. Modelo decide qual tool chamar, a partir da pergunta do usuário
  2. Backend executa a chamada na API interna do catálogo
  3. API devolve o resultado
  4. 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.