콘텐츠로 이동

BestRAG - 하이브리드 RAG 저장소 및 검색 치트시트

BestRAG - 하이브리드 RAG 저장소 및 검색 치트시트

BestRAG (Best Retrieval Augmented Generation)는 하이브리드 RAG 파이프라인을 구축하기 위한 Python 라이브러리입니다. 밀집, 희소, 늦은 상호작용 임베딩을 결합하여 Qdrant를 벡터 저장소로, FastEmbed를 임베딩으로 사용하여 문서를 효율적으로 저장하고 검색합니다. 핵심: 각 청크를 여러 표현으로 한 번 저장한 후 퓨즈된 관련성으로 검색하여 밀집 벡터의 의미론적 리콜과 희소 (BM25 스타일) 검색의 정확한 항 정밀도를 모두 얻습니다.

설치

방법명령어
pippip 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 시작사용자 정의 파이프라인

FastEmbedQdrant를 기반으로 합니다. 전체 파이프라인 제어가 필요한 경우 LangChain 또는 LlamaIndex를 사용하세요.

자료