Hybrid RAG
Vector + BM25 Search Engine
웹에이전시 거인소프트가 제작한 한화로보틱스 홈페이지 프로젝트입니다.
"한화로보틱스"의 기업 브랜드 아이덴티티를 반영한 반응형 웹사이트로 제작되었으며
제품 정보 전달과 글로벌 기업 이미지를 강화하는 UI 구조로 설계되었습니다.
Hybrid RAG System
Vector + BM25 기반 하이브리드 검색 엔진
- PostgreSQL 17
- VectorChord
- BM25
- FastAPI
- LangGraph
- FlashRank
-
ProjectHybrid RAG System
-
Period2026.04 (6주)
-
TypeSearch Engine / RAG Backend
-
Role아키텍처 설계 및 백엔드 개발
- 프로젝트 유형
- RAG Backend / Hybrid Search Engine
- 기술 스택
- PostgreSQL 17, VectorChord, BM25, FastAPI, LangGraph, FlashRank
- 검색 방식
- Vector (Cosine) + BM25 (Keyword) Hybrid Search
- 랭킹 알고리즘
- RRF (k=60) Fusion + FlashRank Reranking
- 특수 기술
- VectorChord RaBitQ 인덱스, Bert 토크나이저
- LLM 의존성
- 검색/랭킹에 LLM 불필요 (Embedding만 외부 처리)
Architecture
Overview
LLM Query Analysis 없이 PostgreSQL + RRF + Rerank만으로 구성된 간소화된 RAG 시스템입니다.
외부 Agent에서 Query Analysis와 Embedding을 처리하고, 이 시스템은 검색 + 랭킹만 담당합니다. Vector Search와 BM25 모두 LLM 없이 동작합니다.
Search
Pipeline
검색 파이프라인 흐름:
• Hybrid Search: Vector + BM25 병렬 검색
• RRF Fusion: 순위 기반 점수 결합 (k=60)
• FlashRank: Cross-Encoder로 재정렬
LangGraph 워크플로우로 각 단계를 연결합니다.
Troubleshooting 1 | BM25 동시 INSERT 데드락
문제: VectorChord-BM25에서 동시 INSERT 시 데드락이 발생하여 100개 제한인데 105개가 통과되는 현상이 있었습니다.
해결: Semaphore로 동시성을 제한(MAX_CONCURRENT=1)하고, 지수 백오프 재시도 로직을 적용하여 안정적인 인덱싱을 구현했습니다.
Troubleshooting 2 | VectorChord 특수 문법
문제: VectorChord는 표준 PostgreSQL/pgvector와 다른 특수 연산자(<=>)와 타입(bm25vector)을 사용하여 기존 코드 호환이 어려웠습니다.
해결: search_path에 bm25_catalog, tokenizer_catalog를 포함하고, 전용 SQL 패턴을 문서화하여 일관된 쿼리 작성 방식을 확립했습니다.
Key Algorithms | 핵심 알고리즘
• Vector Search: Cosine Distance (1 - distance = similarity)
• BM25 Search: Bert 토크나이저 기반 키워드 검색
• RRF Fusion: Score = Σ(1 / (k + rank)), k=60
• FlashRank: ms-marco-MiniLM-L-12-v2 Cross-Encoder
What I Learned | 배운 점
• Hybrid Search: Vector와 Keyword 검색을 결합하면 단일 방식보다 정확도 향상
• RRF 알고리즘: 순위 기반 결합이 점수 정규화 없이도 효과적
• PostgreSQL 확장: VectorChord, BM25 등 특수 Extension 활용법











