DuckDB 또는 PostgreSQL에 문서를 저장하고 검색하는 Retrieval-Augmented Generation용 Python 툴킷입니다.
Raudaschl/rag-fusion
LLM 쿼리 재작성, BM25 및 벡터 검색, Reciprocal Rank Fusion을 결합해 검색 성능을 높이는 RAG-Fusion의 Python 레퍼런스 구현으로, NFCorpus 평가 하네스를 제공합니다.
- 스타
- 960
- 포크
- 113
- 열린 이슈
- 0
- 마지막 커밋
- 27일 전
어떤 프로젝트인가요?
RAG-Fusion은 검색 증강 생성에 사용하는 검색 방식입니다. LLM이 사용자의 쿼리를 여러 관점의 표현으로 다시 작성하고, 각 표현을 BM25 키워드 검색과 벡터 검색으로 각각 검색한 뒤, Reciprocal Rank Fusion으로 순위 목록을 병합합니다. 여러 목록에 반복해서 등장하는 문서일수록 상위에 오릅니다. 단일 쿼리 표현으로는 관련 자료를 찾지 못할 수 있는 경우, 예를 들어 사용자의 어휘와 코퍼스의 색인 용어가 다른 상황을 겨냥합니다.
저장소에는 ChromaDB와 OpenAI를 사용하는 벡터 검색 기본 파이프라인인 main.py와, BEIR의 NFCorpus 데이터셋에서 baseline, hybrid, RAG-Fusion, hybrid-diverse 변형을 비교하는 eval/ 평가 하네스가 포함되어 있습니다. 또한 cross-encoder 재순위화 단계와 함께, 구성별 비용 및 지연 시간 측정과 NDCG, precision, recall, MRR을 비교한 실험 결과도 제공합니다.
저장소의 측정 결과에 따르면 hybrid fusion 뒤에 재순위기를 추가하면 작지만 통계적으로 유의미한 성능 향상을 얻을 수 있습니다. 반면 강력한 재순위기가 이미 있는 경우 벡터 검색만 사용하는 fusion의 이점은 크지 않습니다.
핵심 기능
- 01서로 다른 표현을 반영하도록 사용자 쿼리를 LLM으로 여러 번 재작성합니다.
- 02각 쿼리 변형에 BM25 키워드 검색과 벡터 검색을 함께 적용합니다.
- 03Reciprocal Rank Fusion으로 순위가 매겨진 검색 결과를 병합합니다.
- 04병합된 후보 풀에 cross-encoder 및 다른 재순위화 단계를 적용할 수 있습니다.
- 05IR 지표와 부트스트랩 신뢰 구간을 사용해 NFCorpus 데이터셋에서 검색 방식별 성능을 평가합니다.
- 06LLM 쿼리 재작성 결과를 디스크에 캐시하고 ChromaDB 임베딩을 로컬에 저장합니다.
활용 사례
- 용어가 다양한 의료·과학 논문 등 전문 문헌을 검색할 때.
- 관련 문서를 놓치는 비용이 큰 검색 파이프라인에서 재현율을 높일 때.
- RAG 시스템에 도입하기 전에 쿼리 재작성과 순위 융합을 실험할 때.
빠른 시작
- 1
핵심 종속 항목을 설치하세요
pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 - 2
템플릿에서 .env 파일을 만드세요
cp .env.example .env - 3
OpenAI API 키를 .env에 추가한 다음 데모를 실행하세요
python main.py
사용 전 알아둘 점
- 데모를 실행하고 리라이트하려면 유료 OpenAI API 키가 필요합니다.
- main.py의 데모는 벡터 검색만 사용합니다. 성능이 가장 뛰어난 hybrid-plus-rerank 구성은 eval/에 있으며 추가 패키지가 필요합니다.
- 실험은 특정 LLM과 결정 모델에 의존하며, 그중 일부는 서비스가 종료되었거나 사용할 수 없을 수 있습니다.
토픽
자주 묻는 질문
- rag-fusion은(는) 무엇인가요?
- LLM 쿼리 재작성, BM25 및 벡터 검색, Reciprocal Rank Fusion을 결합해 검색 성능을 높이는 RAG-Fusion의 Python 레퍼런스 구현으로, NFCorpus 평가 하네스를 제공합니다. RAG-Fusion은 검색 증강 생성에 사용하는 검색 방식입니다. LLM이 사용자의 쿼리를 여러 관점의 표현으로 다시 작성하고, 각 표현을 BM25 키워드 검색과 벡터 검색으로 각각 검색한 뒤, Reciprocal Rank Fusion으로 순위 목록을 병합합니다. 여러 목록에 반복해서 등장하는 문서일수록 상위에 오릅니다. 단일 쿼리 표현으로는 관련 자료를 찾지 못할 수 있는 경우, 예를 들어 사용자의 어휘와 코퍼스의 색인 용어가 다른 상황을 겨냥합니다.
- rag-fusion은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
- rag-fusion은(는) MIT 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
- rag-fusion은(는) 아직 유지보수되고 있나요?
- 활발히 유지보수 중. rag-fusion의 마지막 커밋은 2026년 10월 10일입니다.
- rag-fusion은(는) 어디에 사용할 수 있나요?
- 용어가 다양한 의료·과학 논문 등 전문 문헌을 검색할 때. 관련 문서를 놓치는 비용이 큰 검색 파이프라인에서 재현율을 높일 때. RAG 시스템에 도입하기 전에 쿼리 재작성과 순위 융합을 실험할 때.
- rag-fusion는 어떻게 설치하나요?
- 핵심 종속 항목을 설치하세요: pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 템플릿에서 .env 파일을 만드세요: cp .env.example .env OpenAI API 키를 .env에 추가한 다음 데모를 실행하세요: python main.py
- rag-fusion은(는) 어디서 받을 수 있나요?
- 소스 코드와 설치 방법은 GitHub에 있습니다: https://github.com/Raudaschl/rag-fusion
요약은 프로젝트 README를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.
관련 프로젝트
Chroma와 유사한 인터페이스를 제공하며 서드파티 의존성 없이 임베드할 수 있고, 디스크 저장을 선택적으로 지원하는 Go용 벡터 데이터베이스입니다.
자체 문서를 바탕으로 답변하고 출처를 인라인 인용으로 표시하는 Azure 호스팅 RAG 가속기입니다.
pgvector 검색과 OpenAI 모델을 사용해 PostgreSQL 테이블의 행에 관한 자연어 질문에 답하고 Azure에 배포할 수 있는 RAG 채팅 앱입니다.
대화 기록을 원문 그대로 저장하고 의미 검색으로 찾아주는 로컬 우선 AI 메모리 시스템으로, MCP 서버와 CLI를 제공합니다.
긴 문서의 계층형 트리 인덱스를 구축하고, LLM이 트리를 탐색해 답을 찾는 벡터리스 RAG 엔진입니다.