BestRAG - 하이브리드 RAG 저장소 및 검색 치트시트
BestRAG (Best Retrieval Augmented Generation)는 하이브리드 RAG 파이프라인을 구축하기 위한 Python 라이브러리입니다. 밀집, 희소, 늦은 상호작용 임베딩을 결합하여 Qdrant를 벡터 저장소로, FastEmbed를 임베딩으로 사용하여 문서를 효율적으로 저장하고 검색합니다. 핵심: 각 청크를 여러 표현으로 한 번 저장한 후 퓨즈된 관련성으로 검색하여 밀집 벡터의 의미론적 리콜과 희소 (BM25 스타일) 검색의 정확한 항 정밀도를 모두 얻습니다.
설치
| 방법 | 명령어 |
|---|
| pip | pip install bestrag |
| 요구사항 | Qdrant 인스턴스 (로컬 Docker 또는 Qdrant Cloud) |
| 임베딩 | 내부적으로 FastEmbed 사용 |
| 확인 | python -c "import bestrag; print('ok')" |
하이브리드가 있는 이유
| 검색 타입 | 우수 | 약점 |
|---|
| 밀집 (벡터) | 의미, 의역 | 정확한 ID, 숫자, 드문 항 |
| 희소 (BM25) | 정확한 항, 식별자 | 동의어, 의역 |
| 늦은 상호작용 | 미세한 토큰 매칭 | 비용 |
| 퓨즈 (하이브리드) | 밀집 + 희소의 최고 | — |
BestRAG는 모든 표현을 저장하므로 단일 쿼리가 모두로부터 이득을 봅니다.
기본 사용
from bestrag import BestRAG
rag = BestRAG(
url="http://localhost:6333", # Qdrant
api_key="...", # Qdrant Cloud를 사용하는 경우
collection_name="docs",
)
# 문서 수집 (밀집 + 희소 + 늦은 상호작용 임베드, Qdrant에 업셀트)
rag.store_pdf("handbook.pdf")
rag.store_text("Nick prefers concise answers.", metadata={"source": "prefs"})
# 퓨즈된 하이브리드 관련성으로 검색
results = rag.search("what does the refund policy say?", limit=5)
for r in results:
print(r.score, r.text)
| 메서드 | 설명 |
|---|
BestRAG(url, collection_name, ...) | Qdrant에 연결, 컬렉션 선택 |
store_pdf(path) | PDF 파싱 + 청킹 + 임베드 + 업셀트 |
store_text(text, metadata=...) | 원본 텍스트 수집 |
search(query, limit=k) | 하이브리드 (퓨즈) 검색 |
delete(...) | 문서 제거 |
수집 시 일어나는 것
| 단계 | 세부사항 |
|---|
| 파싱 | 텍스트 추출 (예: PDF에서) |
| 청킹 | 패시지로 분할 |
| 임베드 | 청크당 밀집 + 희소 + 늦은 상호작용 벡터 |
| 업셀트 | Qdrant의 모든 벡터 + 페이로드 저장 |
검색 시 일어나는 것
| 단계 | 세부사항 |
|---|
| 쿼리 임베드 | 밀집 + 희소 (+ 늦은 상호작용) |
| Qdrant 쿼리 | 표현당 후보 검색 |
| 퓨즈 | 순위를 한 목록으로 결합 (RRF 스타일) |
| 반환 | 상위 k 패시지, 점수 + 메타데이터 |
LLM에 결과 공급
# 검색한 후 근거한 프롬프트 구축
hits = rag.search(user_question, limit=5)
context = "\n\n".join(h.text for h in hits)
prompt = f"Answer using only this context:\n{context}\n\nQ: {user_question}"
# → LLM에 프롬프트 전송
조정
| 레버 | 효과 |
|---|
| 청크 크기/오버래프 | 검색 세분성 |
| 밀집 모델 | 의미론적 품질 (FastEmbed를 통해) |
| 희소 모델 | 정확한 항 매칭 (BM25) |
limit (k) | 리콜 vs 프롬프트 크기 |
| 메타데이터 필터 | 검색 범위 제한 / 접근 제어 |
BestRAG vs 자체 구현
| 측면 | BestRAG | 수동 (LangChain/LlamaIndex) |
|---|
| 하이브리드 설정 | 빌트인 (밀집+희소+LI) | 수동 배선 |
| 저장 | Qdrant, 의견 | 모든, 유연한 |
| 제어 | 더 단순, 더 적은 노브 | 전체 제어 |
| 최적 용도 | 빠른 하이브리드 RAG 시작 | 사용자 정의 파이프라인 |
FastEmbed 및 Qdrant를 기반으로 합니다. 전체 파이프라인 제어가 필요한 경우 LangChain 또는 LlamaIndex를 사용하세요.
자료