Olá! Tudo bem?
Segue o link do repositório com a implementação da atividade:
Link do Git: https://github.com/Moquiuti/tecnicas_avancadas_rag
Nesta etapa final, implementei uma pipeline RAG com avaliação baseada em um arquivo JSON, seguindo a proposta da atividade de carregar um dataset de perguntas e respostas, transformar os dados para manter apenas os campos query e answer, gerar respostas sem RAG e com RAG, comparar os resultados e medir a precisão do sistema.
Como nas atividades anteriores, mantive a abordagem local-first por conta da limitação encontrada anteriormente com a OpenAI, que retornou erro 429 - insufficient_quota. Dessa forma, em vez de utilizar GPT/OpenAI diretamente, adaptei a solução para rodar localmente com ChatOllama, OllamaEmbeddings, modelo llama3.2:3b, embeddings bge-m3 e FAISS como banco vetorial local.
O fluxo implementado foi:
JSON de avaliação
→ extração dos campos query e answer
→ carregamento da base documental
→ chunking dos documentos
→ criação/carregamento do FAISS
→ geração de respostas sem RAG
→ geração de respostas com RAG
→ avaliação local das respostas
→ cálculo de precisão
→ gravação dos resultados em JSON
O que foi feito
Nesta entrega, criei um arquivo JSON de avaliação com perguntas e respostas esperadas sobre políticas corporativas. O script carrega esse JSON, ignora campos auxiliares como id e category, e transforma os dados para manter apenas os campos exigidos pela atividade:
query
answer
Depois disso, o pipeline carrega os documentos da base de conhecimento, incluindo arquivos .txt e PDFs, realiza o chunking com RecursiveCharacterTextSplitter, cria uma vector store FAISS local e configura um retriever com k=4.
Também foram implementados dois fluxos de resposta:
Pipeline sem RAG:
pergunta → modelo local → resposta
Pipeline com RAG:
pergunta → retriever → contexto recuperado → modelo local → resposta
A comparação foi feita por uma função de avaliação local, criada para evitar dependência de serviços pagos. Essa função mede a resposta usando dois critérios:
similaridade textual com o gabarito
cobertura de termos importantes da resposta esperada
Com isso, o sistema calcula um score_final, define se a resposta foi considerada correta e gera as métricas finais de precisão.
Resultado obtido
A execução foi concluída com sucesso. O pipeline carregou o dataset com 6 perguntas, configurou os modelos locais, carregou 72 documentos da base, gerou 274 chunks, criou a vector store FAISS e executou a avaliação comparativa.
O resultado final foi:
SEM RAG:
Acertos: 1/6
Precisão: 16,67%
Score médio: 0,3904
COM RAG:
Acertos: 4/6
Precisão: 66,67%
Score médio: 0,5833
Esse resultado mostrou uma melhora objetiva com o uso de RAG. O pipeline com recuperação de contexto respondeu melhor à maior parte das perguntas, especialmente nos casos em que a resposta estava claramente presente nos documentos, como regras sobre cartão corporativo, despesas sem comprovante, prazo de reembolso e aprovação de viagens.
Também foi possível observar pontos de melhoria. Em algumas perguntas, o RAG recuperou contexto insuficiente ou não localizou corretamente a informação esperada, o que reforça a importância de ajustar parâmetros como chunk_size, chunk_overlap, k do retriever, qualidade dos documentos, embeddings e estratégia de avaliação.
Ajustes e cuidados implementados
Durante a implementação, fiz alguns ajustes para tornar o pipeline mais estável e evitar erros comuns de indexação e leitura de dados:
validação da existência do arquivo JSON
extração apenas dos campos query e answer
uso de encoding utf-8-sig
validação de documentos carregados
validação de chunks gerados
persistência do FAISS em disco
configuração explícita do k do retriever
salvamento dos resultados em resultado_avaliacao_rag.json
Também deixei comentários no código explicando como seria o caminho original com OpenAI e qual foi o caminho alternativo utilizado por falta de crédito/quota.
Arquivos principais para validação
Os principais arquivos desta entrega são:
pipeline_rag_avaliacao_json.py
dataset_avaliacao.json
resultado_avaliacao_rag.json
O resultado final demonstrou melhora com RAG, saindo de 16,67% de precisão sem recuperação para 66,67% com recuperação, o que reforça o valor da arquitetura RAG quando bem estruturada e avaliada.