1
resposta

[Projeto] Faça como eu fiz: avaliação RAG

Boa tarde galera! 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, avancei na construção de uma pipeline RAG com foco em avaliação automatizada de respostas, utilizando a ideia proposta pelo curso com QA-Eval e geração de pares de perguntas e respostas. O objetivo principal foi comparar respostas geradas pelo modelo com respostas esperadas, permitindo avaliar de forma mais estruturada a qualidade do pipeline.

A proposta da atividade era trabalhar com um dataset no formato query e answer, gerar respostas com e sem RAG, comparar essas respostas com os gabaritos e analisar o desempenho obtido. Também foi abordada a geração automática de perguntas e respostas a partir dos chunks dos documentos, utilizando uma abordagem baseada em QAGenerationChain / QAGenerateChain.

Como nas atividades anteriores, mantive a adaptação local por conta da limitação de uso da OpenAI. Durante os testes anteriores, a API da OpenAI retornou erro 429 - insufficient_quota, indicando ausência de crédito/quota disponível. Por esse motivo, continuei utilizando uma abordagem local-first, com Ollama e modelos locais, preservando a proposta técnica da atividade sem gerar custo de API.

O fluxo trabalhado nesta entrega foi:

documentos → chunks → vector store → perguntas de avaliação → resposta sem RAG → resposta com RAG → comparação com gabarito → análise de desempenho

O que foi implementado

Nesta atividade, implementei um script de avaliação automatizada para o pipeline RAG, contemplando os seguintes pontos:

  • preparação de um dataset manual de avaliação com os atributos query e answer;
  • configuração de um modelo local via ChatOllama;
  • configuração de embeddings locais;
  • carregamento de documentos a partir das pastas já utilizadas no projeto;
  • divisão dos documentos em chunks;
  • criação ou carregamento de um índice FAISS;
  • configuração de um retriever para recuperação de contexto;
  • criação de uma chain sem RAG, onde o modelo responde sem acesso aos documentos;
  • criação de uma chain com RAG, onde o modelo responde usando contexto recuperado do vector store;
  • implementação de uma função que percorre o dataset, gera respostas e acumula os resultados;
  • integração com QAEvalChain para comparar respostas geradas com os gabaritos;
  • cálculo de acurácia estimada;
  • tentativa de geração automática de pares pergunta/resposta com QAGenerateChain;
  • análise final comparando o desempenho com RAG e sem RAG.

Adaptações realizadas

A atividade original considera o uso de OpenAI como modelo principal para geração, embeddings e avaliação. Como optei por manter o projeto sem custo de API, fiz a adaptação para modelos locais:

ChatOpenAI → ChatOllama
OpenAIEmbeddings → embeddings locais via Ollama / BGE
LangSmith → desabilitado
OpenAI quota → contornado com execução local

Também deixei comentários no código explicando onde estaria o caminho original com OpenAI e onde foi aplicada a alternativa local. A ideia foi manter o aprendizado do curso, mas adaptando a implementação para um ambiente viável, gratuito e executável localmente.

Um ponto importante é que a avaliação com LLM local pode não ter a mesma estabilidade ou precisão de um modelo maior, como os modelos da OpenAI. Mesmo assim, a estrutura da avaliação foi implementada corretamente, permitindo entender o processo completo:

dataset → geração de resposta → comparação com gabarito → métrica → análise

Sobre a geração automática de perguntas e respostas

Além do dataset manual, também foi incluída a etapa de geração automática de perguntas e respostas a partir dos chunks dos documentos, usando a classe QAGenerateChain.

Essa parte foi tratada com cuidado porque as APIs do LangChain mudaram bastante entre versões. Por isso, o código foi preparado com fallback de importação entre langchain_classic e langchain.evaluation, evitando que a atividade quebrasse por diferença de versão da biblioteca.

Mesmo que a qualidade dos pares gerados dependa bastante do modelo local utilizado, a etapa foi implementada para demonstrar o fluxo técnico proposto pelo curso.

Comparação com e sem RAG

A atividade também permitiu visualizar uma diferença importante: quando o modelo responde sem RAG, ele depende apenas do conhecimento interno e pode dar respostas genéricas. Quando responde com RAG, ele passa a receber trechos recuperados dos documentos, o que tende a aumentar a aderência ao conteúdo real da base.

sem RAG → pergunta direta ao modelo
com RAG → pergunta + contexto recuperado do FAISS

Arquivos principais para validação:
Para facilitar a análise, os principais arquivos relacionados a esta atividade são:

  1. avaliacao_rag_qa_eval.py
  2. Console da atividade avaliacao_rag_qa_eval -> console do resultado da execução
1 resposta

Oi, Leandro. Como vai?

Agradeço por compartilhar.

Gostei da forma como você estruturou a avaliação RAG, comparando respostas com e sem RAG, usando dataset com query e answer, FAISS, retriever e QAEvalChain. A adaptação para execução local com Ollama também foi uma boa escolha para manter o projeto viável diante da limitação de quota da OpenAI, sem deixar de praticar o fluxo proposto na atividade.

Seu projeto mostra um bom entendimento da etapa de validação, já que a avaliação automatizada ajuda a medir se o pipeline está recuperando contexto útil e gerando respostas mais alinhadas ao gabarito.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!