Quando pensamos em um chat com Inteligência Artificial para um sistema, normalmente imaginamos um modelo gigantesco respondendo qualquer pergunta. Na prática, o objetivo costuma ser muito mais específico.
Quando pensamos em um chat com Inteligência Artificial para um sistema, normalmente imaginamos um modelo gigantesco respondendo qualquer pergunta. Na prática, o objetivo costuma ser muito mais específico.
Neste projeto, o desejo do cliente era simples:
Em vez de utilizar um modelo extremamente grande hospedado em um serviço externo, a solução foi construída utilizando gpt-oss executando localmente através do Ollama.
O resultado foi bastante satisfatório.
Isso demonstra que, quando o contexto é bem organizado, nem sempre é necessário utilizar o maior modelo disponível para oferecer uma excelente experiência ao usuário.
Acesse: https://github.com/marcelo3macedo/simple-chatbot-with-ollama-and-apis
Esse é um dos conceitos mais importantes ao desenvolver aplicações com IA.
Um modelo de linguagem não conhece:
Sem essas informações, a IA responderá utilizando apenas o conhecimento adquirido durante o treinamento, produzindo respostas genéricas ou simplesmente incorretas.
A solução consiste em enriquecer cada solicitação enviada ao modelo com as informações necessárias para responder aquela pergunta.
Enviar todos os dados do sistema em toda requisição não é uma boa estratégia. Além de desperdiçar processamento, existe um fator importante:
modelos de IA possuem limites de contexto (tokens).
Quanto maior o prompt, maior o custo computacional e menor a quantidade de histórico disponível para a conversa.
Por isso, neste projeto foi adotada uma estratégia baseada em detecção de intenção. A cada mensagem recebida, o sistema primeiro identifica o que o usuário realmente deseja.
Exemplos:
Depois dessa classificação, apenas os módulos realmente necessários são carregados.
O fluxo funciona da seguinte forma:
Usuário
│
▼
Detecção de intenção
│
▼
Seleciona os módulos necessários
│
▼
Consulta APIs / banco de dados
│
▼
Monta o contexto
│
▼
Envia para o modelo
│
▼
Resposta ao usuário
Essa abordagem mantém o contexto pequeno, objetivo e altamente relevante.
Cada módulo pode representar uma fonte diferente de informação.
Por exemplo:
No projeto de demonstração esses módulos foram simulados através de arquivos locais, mas em produção eles podem consultar:
O modelo recebe apenas o resultado dessas consultas, produzindo uma resposta contextualizada.
Outro ponto importante foi o desempenho. Para evitar chamadas repetidas às mesmas fontes de dados, foi implementado cache para os módulos carregados.
Isso reduz o tempo de resposta e diminui a quantidade de consultas realizadas ao backend. Além disso, as respostas são enviadas utilizando streaming.
Em vez de esperar o texto inteiro ser gerado, o usuário já começa a visualizar a resposta imediatamente, proporcionando uma experiência muito mais natural.
Mesmo utilizando um modelo relativamente pequeno executando localmente com Ollama, os resultados foram consistentes.
O sistema conseguiu:
Tudo isso sem depender de um grande modelo hospedado na nuvem.
Usuário
Como estou indo esse mês?
Assistente
Você acumulou 142,8 km em 18 atividades, com ritmo médio de 5:21 min/km. Atualmente está em 18º lugar entre 326 participantes.
Usuário
Quanto falta para completar o Circuit Inverno 100K?
Assistente
Faltam 31,6 km para atingir sua meta. O desafio termina em 31/07 e você está atualmente na 12ª posição.
Usuário
Tem algum desafio novo chegando?
Assistente
Sim. Ainda em julho há os desafios Sprint 5K e Ultra Weekend. Em agosto começa o Agosto 150K, com medalha, camiseta e cupom como premiação.
Usuário
Como funciona a sincronização com o Strava?
Assistente
Após conectar sua conta, as atividades são sincronizadas automaticamente e contabilizadas nos desafios compatíveis da plataforma.
Uma das principais lições deste projeto é que a qualidade das respostas não depende exclusivamente do tamanho do modelo.
Quando a aplicação entrega ao modelo um contexto claro, organizado e altamente relevante, modelos menores podem produzir resultados surpreendentemente bons.
Mais importante do que utilizar o maior LLM disponível é construir uma arquitetura capaz de fornecer exatamente as informações que o modelo precisa em cada interação.
Nesse cenário, técnicas como detecção de intenção, carregamento dinâmico de contexto, chamadas de APIs, cache e streaming tornam-se tão importantes quanto o próprio modelo de IA.
Esse projeto demonstra justamente essa ideia: um modelo simples, alimentado com informações corretas no momento certo, pode oferecer uma experiência de conversa extremamente eficiente e natural.