Repolode
Raudaschl

Raudaschl/rag-fusion

Implementação de referência em Python do RAG-Fusion, que combina reformulações de consultas por LLM, busca BM25 e vetorial e Reciprocal Rank Fusion para melhorar a recuperação, com um ambiente de avaliação usando o NFCorpus.

Estrelas
960
Forks
113
Issues abertas
0
Último commit
há 28 dias

O que é?

RAG-Fusion é um método de recuperação para geração aumentada por recuperação. Um LLM reformula a consulta do usuário em várias versões, com perspectivas diferentes. Cada versão é pesquisada tanto com busca por palavras-chave BM25 quanto com busca vetorial, e as listas ordenadas são combinadas com Reciprocal Rank Fusion, fazendo com que documentos presentes em várias listas subam para o topo. O método é voltado a casos em que uma única formulação da consulta não encontra materiais relevantes, como quando o vocabulário do usuário difere da forma como o corpus foi indexado.

O repositório contém um pipeline básico em main.py que usa busca vetorial com ChromaDB e OpenAI, além de um ambiente de avaliação em eval/ que compara as variantes baseline, hybrid, RAG-Fusion e hybrid-diverse no conjunto de dados NFCorpus do BEIR. Também inclui etapas de reordenação com cross-encoder e análises de experimentos que medem NDCG, precisão, recall e MRR, além de custo e latência para cada configuração.

As medições do repositório sugerem que adicionar um reranker após a fusão híbrida gera ganhos pequenos, mas estatisticamente significativos, enquanto a fusão apenas vetorial traz pouco benefício quando já há um reranker robusto.

Recursos principais

  • 01Gera várias reformulações da consulta do usuário com LLM para abranger diferentes formas de expressão.
  • 02Combina busca por palavras-chave BM25 e busca vetorial para cada variante da consulta.
  • 03Combina os resultados ordenados com Reciprocal Rank Fusion.
  • 04Oferece suporte a etapas de reordenação com cross-encoder e outros rerankers no conjunto de candidatos combinados.
  • 05Avalia variantes de recuperação no conjunto de dados NFCorpus usando métricas de IR e intervalos de confiança por bootstrap.
  • 06Armazena em cache no disco as reformulações de consultas feitas por LLM e persiste localmente os embeddings do ChromaDB.

Casos de uso

  • Pesquisar literatura especializada, como artigos médicos ou científicos, em que a terminologia varia.
  • Melhorar o recall em pipelines de recuperação nos quais deixar passar um documento relevante tem um custo alto.
  • Experimentar reformulação de consultas e fusão de rankings antes de adotá-las em um sistema RAG.

Início rápido

  1. 1

    Instale as dependências principais

    pip install openai chromadb python-dotenv tqdm tabulate rank_bm25
  2. 2

    Crie o arquivo .env a partir do modelo

    cp .env.example .env
  3. 3

    Adicione sua chave de API da OpenAI ao .env e execute a demonstração

    python main.py

Antes de usar

  • A execução da demonstração e das reescritas requer uma chave de API da OpenAI paga.
  • A demonstração em main.py usa apenas busca vetorial; a configuração hybrid-plus-rerank de melhor desempenho está em eval/ e requer pacotes adicionais.
  • Os experimentos dependem de modelos específicos de LLM e de decisão, alguns dos quais podem ter sido descontinuados ou estar indisponíveis.

Tópicos

#rag#information-retrieval#vector-search#reciprocal-rank-fusion#query-expansion#reranking#chromadb#openai#python#rag-fusion

Perguntas frequentes

O que é rag-fusion?
Implementação de referência em Python do RAG-Fusion, que combina reformulações de consultas por LLM, busca BM25 e vetorial e Reciprocal Rank Fusion para melhorar a recuperação, com um ambiente de avaliação usando o NFCorpus. RAG-Fusion é um método de recuperação para geração aumentada por recuperação. Um LLM reformula a consulta do usuário em várias versões, com perspectivas diferentes. Cada versão é pesquisada tanto com busca por palavras-chave BM25 quanto com busca vetorial, e as listas ordenadas são combinadas com Reciprocal Rank Fusion, fazendo com que documentos presentes em várias listas subam para o topo. O método é voltado a casos em que uma única formulação da consulta não encontra materiais relevantes, como quando o vocabulário do usuário difere da forma como o corpus foi indexado.
rag-fusion é gratuito? Qual é a licença?
rag-fusion é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
rag-fusion ainda é mantido?
Manutenção ativa. O último commit de rag-fusion foi em 10 de out. de 2026.
Para que posso usar rag-fusion?
Pesquisar literatura especializada, como artigos médicos ou científicos, em que a terminologia varia. Melhorar o recall em pipelines de recuperação nos quais deixar passar um documento relevante tem um custo alto. Experimentar reformulação de consultas e fusão de rankings antes de adotá-las em um sistema RAG.
Como instalar rag-fusion?
Instale as dependências principais: pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 Crie o arquivo .env a partir do modelo: cp .env.example .env Adicione sua chave de API da OpenAI ao .env e execute a demonstração: python main.py
Onde consigo rag-fusion?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/Raudaschl/rag-fusion

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados