[YYYY.MM.DD]RAG · Retrieval
Buddybot에 BM25를 더한 이유
[도입 2–3문장 — 이 글이 다루는 문제와, 읽고 나면 얻어 갈 수 있는 것]
- Published
- [YYYY.MM.DD]
- Reading
- 2 min
- Tags
- RAGBM25EmbeddingChromaDB
01들어가며
Buddybot은 대학생이 자연어로 학사 정보를 찾을 수 있게 돕는 RAG 챗봇입니다. 전체 구조는 케이스 스터디에 정리했고, 이 글은 그중 검색 단계만 다룹니다.
To write — 계기이 주제를 글로 남기게 된 구체적인 순간 하나.
02문제 상황
To write — 문제Dense 검색만 썼을 때 결과가 어긋난 질문 유형과 실제 질의 예시 1–2개. 재현 가능한 수준으로.
03하이브리드 검색 구성
검색은 두 갈래로 나눠 수행한 뒤 결과를 합칩니다.
- Dense — SentenceTransformers 임베딩 + ChromaDB 유사도 검색
- Sparse — BM25 키워드 매칭
결과 결합
두 결과는 [결합 방식 — 예: RRF, 가중합]으로 합친 뒤 상위 [k]개를 컨텍스트로 사용합니다.
# 예시 — 실제 결합 로직으로 교체하세요
def hybrid_search(query: str, k: int = 5):
dense = vector_store.similarity_search(query, k=k)
sparse = bm25.get_top_n(query, documents, n=k)
return merge(dense, sparse)[:k]위 예시의 merge() 자리에 실제 결합 로직이 들어갑니다.
04결과와 배운 점
Results측정한 지표가 있다면 측정 방법과 함께(예: 평가 질문 n개 기준). 측정하지 않았다면 수치를 적지 않습니다.
Lessons다시 한다면 바꿀 것 1–2가지 — 구체적인 기술 판단으로.