Toolkit de Python para Retrieval-Augmented Generation que almacena y busca documentos en DuckDB o PostgreSQL.
Raudaschl/rag-fusion
Implementación de referencia en Python de RAG-Fusion, que combina reformulaciones de consultas con LLM, BM25, búsqueda vectorial y fusión recíproca de rangos para mejorar la recuperación; incluye evaluación con NFCorpus.
- Estrellas
- 960
- Forks
- 113
- Issues abiertos
- 0
- Último commit
- hace 28 días
¿Qué es?
RAG-Fusion es un método de recuperación para la generación aumentada por recuperación (RAG). Un LLM reformula la consulta del usuario de varias maneras y desde distintos ángulos; después, cada variante se procesa con búsqueda por palabras clave BM25 y búsqueda vectorial, y las listas ordenadas se combinan mediante fusión recíproca de rangos para que los documentos que aparecen en varias listas suban posiciones. Está pensado para casos en los que una única formulación de la consulta no encuentra contenido relevante, por ejemplo, cuando el vocabulario del usuario difiere de cómo está indexado el corpus.
El repositorio incluye una canalización básica en main.py que usa búsqueda vectorial con ChromaDB y OpenAI, además de un entorno de evaluación en eval/ que compara las variantes baseline, híbrida, RAG-Fusion e híbrida diversa con el conjunto de datos NFCorpus de BEIR. También incluye etapas de reordenación con cross-encoder y análisis de experimentos que miden NDCG, precisión, recall y MRR, junto con mediciones de costo y latencia para cada configuración.
Las mediciones del repositorio sugieren que añadir un reranker después de la fusión híbrida aporta mejoras pequeñas pero estadísticamente significativas, mientras que la fusión basada únicamente en vectores ofrece pocos beneficios cuando ya se cuenta con un reranker sólido.
Funciones clave
- 01Genera varias reformulaciones de la consulta del usuario con un LLM para cubrir distintas expresiones.
- 02Combina la búsqueda por palabras clave BM25 y la búsqueda vectorial para cada variante de la consulta.
- 03Combina los resultados ordenados mediante fusión recíproca de rangos.
- 04Admite etapas de reordenación con cross-encoder y otros rerankers sobre el conjunto fusionado de candidatos.
- 05Evalúa variantes de recuperación con el conjunto de datos NFCorpus mediante métricas de IR e intervalos de confianza bootstrap.
- 06Almacena en caché las reformulaciones de consultas del LLM en disco y guarda localmente los embeddings de ChromaDB.
Casos de uso
- Buscar en literatura especializada, como artículos médicos o científicos, donde la terminología varía.
- Mejorar el recall en canalizaciones de recuperación donde no encontrar un documento relevante tiene un costo elevado.
- Experimentar con la reformulación de consultas y la fusión de resultados antes de incorporarlas a un sistema RAG.
Inicio rápido
- 1
Instala las dependencias principales
pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 - 2
Crea el archivo .env a partir de la plantilla
cp .env.example .env - 3
Añade tu clave de API de OpenAI a .env y luego ejecuta la demo
python main.py
Antes de usarlo
- Para ejecutar la demo y las reescrituras se necesita una clave de API de OpenAI de pago.
- La demo de main.py solo usa búsqueda vectorial; la configuración hybrid-plus-rerank de mejor rendimiento está en eval/ y requiere paquetes adicionales.
- Los experimentos dependen de modelos de LLM y de decisión específicos, algunos de los cuales podrían haberse retirado o no estar disponibles.
Temas
Preguntas frecuentes
- ¿Qué es rag-fusion?
- Implementación de referencia en Python de RAG-Fusion, que combina reformulaciones de consultas con LLM, BM25, búsqueda vectorial y fusión recíproca de rangos para mejorar la recuperación; incluye evaluación con NFCorpus. RAG-Fusion es un método de recuperación para la generación aumentada por recuperación (RAG). Un LLM reformula la consulta del usuario de varias maneras y desde distintos ángulos; después, cada variante se procesa con búsqueda por palabras clave BM25 y búsqueda vectorial, y las listas ordenadas se combinan mediante fusión recíproca de rangos para que los documentos que aparecen en varias listas suban posiciones. Está pensado para casos en los que una única formulación de la consulta no encuentra contenido relevante, por ejemplo, cuando el vocabulario del usuario difiere de cómo está indexado el corpus.
- ¿rag-fusion es gratuito? ¿Qué licencia tiene?
- rag-fusion es open source bajo la licencia MIT. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿rag-fusion sigue mantenido?
- Mantenimiento activo. El último commit de rag-fusion fue el 10 oct 2026.
- ¿Para qué puedo usar rag-fusion?
- Buscar en literatura especializada, como artículos médicos o científicos, donde la terminología varía. Mejorar el recall en canalizaciones de recuperación donde no encontrar un documento relevante tiene un costo elevado. Experimentar con la reformulación de consultas y la fusión de resultados antes de incorporarlas a un sistema RAG.
- ¿Cómo se instala rag-fusion?
- Instala las dependencias principales: pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 Crea el archivo .env a partir de la plantilla: cp .env.example .env Añade tu clave de API de OpenAI a .env y luego ejecuta la demo: python main.py
- ¿Dónde consigo rag-fusion?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/Raudaschl/rag-fusion
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Base de datos vectorial integrable en Go con una interfaz similar a Chroma, sin dependencias de terceros y con persistencia opcional en disco.
Acelerador RAG alojado en Azure que basa las respuestas de un asistente de chat en tus propios documentos e incluye citas a las fuentes.
App de chat RAG que responde preguntas en lenguaje natural sobre filas de una tabla PostgreSQL mediante búsquedas con pgvector y modelos de OpenAI, y se puede desplegar en Azure.
Sistema de memoria de IA local-first que almacena el historial de conversaciones íntegro y lo recupera mediante búsqueda semántica, disponible como servidor MCP y CLI.
Un motor RAG sin vectores que crea un índice jerárquico en forma de árbol para documentos extensos y permite que un LLM lo recorra para encontrar respuestas.