← Todos os cases

Projeto pessoal · código aberto

Groundtruth — gate de avaliação para RAG

Desenvolvimento de um harness que mede mudanças em sistemas RAG antes do merge e bloqueia a PR quando o Recall@10 cai mais de 1 ponto percentual.

Papel
Desenho do experimento e desenvolvimento
Status
Concluído (V1 e multi-documento)
Stack
  • Python
  • RAGAS
  • GitHub Actions
  • Busca híbrida
  • Reranking
  • GraphRAG
mudança:chunk, busca, reranker“parece melhor”…golden set100 + 18 perguntasroda oretrievalRecall@10MRR · nDCGbaselineversionadocaiu maisde 1 pp?nãosimmergebloqueiaGitHub ActionsRAGAS: faithfulness+ relevancyretriever quebrado depropósito → gate falhareranker: nDCG@10 0,88 → 0,98, Recall dentro do gate

Problema

Mudar chunking, busca ou reranker “parece melhor” até alguém medir. Sem um baseline versionado, uma regressão de retrieval chega à produção sem aviso.

Dados disponíveis

Um golden set de 100 perguntas revisadas por humano sobre um documento técnico (V1) e 18 perguntas aprovadas num corpus de três documentos (multi-documento).

Decisões de arquitetura

Gate objetivo

Baseline versionado no repositório. A mudança falha se o Recall@10 cair mais de 1 ponto percentual, com tolerância numérica para não falhar por arredondamento.

Provar que o teste funciona

Um retriever quebrado de propósito precisa derrubar o gate. Se não derrubar, o gate não serve.

Busca e resposta medidas separadamente

Recall, MRR e nDCG medem a busca; Faithfulness e Answer Relevancy (RAGAS) medem a resposta. Um sem o outro engana.

Implementação

  • Workflow no GitHub Actions que recalcula o retrieval e aplica o gate.
  • Comparação entre busca densa, híbrida e reranker com LLM, em dois tamanhos de chunk.
  • Multi-documento: busca geral, tool com filtro de documento e expansão por grafo (GraphRAG), em condições controlada e ajustada, com custo, latência e chamadas de tool por resposta.

Resultado

  • 0,88 → 0,98nDCG@10 com reranker, Recall dentro do gate
  • −2,78 ppde Recall com GraphRAG vs. busca geral: o gate barraria

O reranker foi recomendado como opção quality-first. A expansão por grafo ficou abaixo da busca geral nesta amostra — e o próprio gate teria impedido o merge.

Limitações e aprendizados

  • O golden set multi-documento é pequeno (18 perguntas).
  • Relevância binária não distingue uma resposta direta de um trecho que só dá contexto; o próximo passo seria usar graus de 0 a 3.
  • Custo e latência do reranker não foram comparados no V1.
Próximo caseCast Code →