home projetos posts
disponível

Chatbot com RAG para Acessibilidade em Jogos Digitais

Projeto de desenvolvimento de um chatbot com RAG para o auxilio da implementação da Acessibilidade em Jogos Digitais.

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:

  1. Processo dedicado à extração e armazenamento de links no MongoDB
  2. 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

  1. Segmentação em chunks
  2. Geração de embeddings com Sentence Transformers
  3. 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.


Limitações 

  • 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.txt nas 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)