Título do artigoConstruindo um Chatbot Inteligente para um Portal de Serviços Públicos com Rasa
Introdução
Durante meu período de estágio, tive a oportunidade de trabalhar em um projeto desafiador e muito enriquecedor: desenvolver um chatbot inteligente usando Rasa para um portal de serviços públicos. A ideia era clara: criar uma solução capaz de agilizar o atendimento ao cidadão, oferecendo informações sobre dezenas de serviços presentes na Carta de Serviços de forma rápida, clara e disponível 24 horas por dia. Neste artigo, compartilho minha experiência prática, os desafios técnicos que enfrentei e as estratégias que funcionaram para superar cada obstáculo. Se você está começando no mundo dos chatbots, especialmente no contexto de portais de serviços, minhas dicas podem ser muito úteis.
Entendendo o contexto
O portal onde trabalhei oferece uma carta de serviços extensa, com informações organizadas em categorias como saúde, fiscalização, manutenção urbana, cultura e meio ambiente. Antes do chatbot, essas informações estavam acessíveis apenas por meio de menus pouco intuitivos, o que dificultava a navegação dos cidadãos. A proposta do chatbot era simples: conversar em linguagem natural com o usuário, entender a dúvida e devolver a informação correta de forma objetiva. Como os dados estavam concentrados em um único campo no banco de dados, em um texto corrido e sem estrutura, percebi que o chatbot tinha dificuldade para localizar e apresentar as informações corretamente. Para resolver esse problema, criei uma função que transformava esse arquivo em um JSON organizado, com dados estruturados em tópicos e títulos, o que facilitou muito a busca e a apresentação das informações.
Primeiros passos com Rasa
Meu primeiro contato com o Rasa foi desafiador, principalmente porque eu estava usando Python 3.12, que ainda não era totalmente compatível com algumas bibliotecas na época. Para contornar isso, configurei ambientes virtuais dedicados para isolar as dependências e manter tudo estável. Com o ambiente configurado, iniciei um projeto básico com os principais arquivos: nlu.yml, onde coloquei os exemplos de intenções (intents) e entidades; domain.yml, responsável por mapear intents, entidades, respostas e ações; stories.yml, onde adicionei exemplos de conversas para treinar o fluxo; e actions.py, onde implementei as ações personalizadas. Para melhorar a detecção de termos, usei lookup tables no nlu.yml, especialmente para categorias de serviços, o que ajudou bastante na precisão das respostas.
Implementando funcionalidades-chave
Uma das primeiras funcionalidades que implementei foi a listagem de serviços. Assim, quando o usuário digitava, por exemplo, “Quais serviços estão disponíveis na área de saúde?”, o chatbot consultava o JSON e retornava uma lista clara, organizada por título. Com o tempo, adicionei a busca personalizada. Inicialmente, utilizei fuzzy matching para encontrar o serviço mais próximo da pergunta do usuário. Depois, evoluí para uma busca semântica com SentenceTransformers e embeddings, o que aumentou significativamente a precisão das respostas.
Desafios encontrados
A compatibilidade com Python 3.12 foi um dos primeiros obstáculos. Muitas bibliotecas não estavam adaptadas, e precisei ajustar versões manualmente até alcançar a estabilidade. Outro desafio foi entender como o Rasa treinava os fluxos de conversa nas stories. No começo, foi confuso, mas percebi que, quanto mais exemplos reais de diálogos eu incluía, melhor o modelo compreendia as intenções dos usuários. Também aprendi que manter o JSON padronizado era essencial: qualquer inconsistência nos campos poderia comprometer as ações personalizadas. Além disso, adotei um processo de treinamento contínuo. Cada vez que um usuário fazia uma pergunta inesperada, eu registrava essa interação e a incluía na base de treinamento para a próxima versão do bot. Esse ciclo de feedback foi essencial para evoluir o chatbot.
Dicas técnicas
Se você está pensando em desenvolver um chatbot parecido, aqui vão algumas dicas que fizeram toda a diferença para mim: use ambientes virtuais para evitar conflitos de bibliotecas; documente intents, entidades e ações desde o início para facilitar a manutenção; utilize o comando rasa shell nlu para analisar como o modelo interpreta cada mensagem; comece com uma base de conhecimento simples e expanda gradualmente; e, por fim, faça testes em ambiente de homologação antes de levar o projeto ao ar.
Conclusão
Esse projeto foi uma experiência transformadora, que uniu teoria e prática no desenvolvimento de chatbots inteligentes. Além de aprender muito sobre processamento de linguagem natural (NLP), desenvolvi habilidades em organização de dados, integração de APIs e boas práticas de versionamento. Ver o chatbot funcionando foi extremamente gratificante. Se eu pudesse deixar uma dica final, seria: comece simples, aprenda com cada interação e evolua o seu bot gradualmente.