Projeto de conclusão de curso (TCC2) desenvolvido na UNITINS (Universidade Estadual do Tocantins) para o curso de Bacharelado em Sistemas de Informação.
O problema central: informações sobre acessibilidade em jogos digitais estão altamente fragmentadas entre documentações técnicas, diretrizes independentes e artigos dispersos.
O projeto propõe centralizar esse conteúdo em um chatbot capaz de responder perguntas sobre práticas e recomendações de acessibilidade, coletando dados automaticamente da web e recuperando contexto via busca semântica.
Arquitetura
A solução foi estruturada em microsserviços com três componentes principais:
- Backend do Chatbot: Go + Gin Framework, API REST, dados relacionais em PostgreSQL
- Serviço de Crawler e Processamento Semântico: Python, dados de documentos em MongoDB, vetores em Qdrant
- Frontend: Flutter (cliente simples, lógica permanece no backend)
A comunicação entre o backend Go e o serviço Python é feita via gRPC com Protocol Buffers, priorizando performance na troca de dados entre os serviços.
Pipeline de dados
Coleta (Crawler)
Implementado em Python com Requests, BeautifulSoup e lxml. A abordagem inicial era recursiva, Implementado em Python com Requests, BeautifulSoup e lxml. A abordagem inicial era recursiva, o que acarretou em loops infinitos e inconsistências nos dados armazenados.
A solução foi separar o crawling em etapas independentes:
- Processo dedicado à extração e armazenamento de links no MongoDB
- Processo separado para download e processamento das páginas
O que eliminou a recursividade não controlada e aumentou a previsibilidade do sistema.
Processamento semântico
- Segmentação em chunks
- Geração de embeddings com
Sentence Transformers - Armazenamento vetorial no Qdrant
A escolha do Qdrant sobre o pgvector (que também foi avaliado) foi pela especialização em buscas semânticas e otimização para similaridade vetorial.
RAG (Retrieval-Augmented Generation)
A query do usuário é enviada pelo chatbot Go ao serviço Python via gRPC. O serviço realiza busca semântica no Qdrant e retorna os chunks mais similares. Esses chunks são usados como contexto para o modelo de linguagem gerar a resposta final.
O modelo utilizado foi o llama-3.1-8b-instant via Groq (testado inicialmente com Gemma rodando localmente via Ollama, mas substituído por limitações de hardware).
Pré-processamento de queries
Identificado durante os testes que queries em português apresentavam similaridade semântica significativamente menor (31–41%) comparado ao inglês (70–74%), dado que a maior parte do conteúdo indexado está em inglês, o que muitas vezes impossibilitava a busca pela grande quantia de conectivos, pronomes e artigos da lingua portuguesa. Como mitigação, foi implementada remoção de stopwords nas queries antes da busca vetorial.
- Conteúdo indexado majoritariamente em inglês impacta consultas em português. Tradução automática das queries antes da busca vetorial seria a melhoria mais direta
- Restrições de
robots.txtnas fontes limitam o volume de dados disponíveis para indexação - Respostas tendem a ser formais e homogêneas por conta da natureza normativa dos documentos coletados (diretrizes e recomendações)