본문바로가기
Hybrid RAG
Vector + BM25 Search Engine
Hybrid RAG
Vector + BM25 Search Engine
Hybrid RAG
Hybrid RAG System
Vector + BM25 기반 하이브리드 검색 엔진
  • PostgreSQL 17
  • VectorChord
  • BM25
  • FastAPI
  • LangGraph
  • FlashRank
  • Project
    Hybrid RAG System
  • Period
    2026.04 (6주)
  • Type
    Search 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만 외부 처리)
Hybrid RAG - 아키텍처 개요
Architecture
Overview

LLM Query Analysis 없이 PostgreSQL + RRF + Rerank만으로 구성된 간소화된 RAG 시스템입니다.

외부 Agent에서 Query Analysis와 Embedding을 처리하고, 이 시스템은 검색 + 랭킹만 담당합니다. Vector Search와 BM25 모두 LLM 없이 동작합니다.

Hybrid RAG - 검색 파이프라인
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 활용법