I Ditched Cloud Vector Databases for SQLite FTS5 — and My RAG Pipeline Got 10x Better
개요
SQLite FTS5와 밀집 임베딩, Reciprocal Rank Fusion(RRF)을 결합한 하이브리드 검색 아키텍처는 기존 클라우드 벡터 데이터베이스를 사용한 RAG 파이프라인보다 10배 더 나은 성능을 제공하며, 특히 정확한 키워드, 오류 코드, 파일 경로 검색에서 뛰어난 정확도를 보인다.
주요 내용
* 기존 RAG 파이프라인의 한계: 관리형 벡터 데이터베이스와 코사인 임베딩을 사용한 RAG 파이프라인은 정확한 키워드나 변수 이름과 같은 구체적인 정보 검색에 취약하며, 높은 인프라 비용과 운영 복잡성을 초래한다.
* 하이브리드 검색 아키텍처의 필요성: 순수 의미론적 검색은 의도를 이해하는 데 뛰어나지만, 오류 코드, 모델 번호, 파일 경로 등 정확한 토큰 매칭에는 약점을 보인다. 따라서 BM25 기반의 렉시컬 검색과 밀집 임베딩 기반의 벡터 검색을 결합하는 것이 효과적이다.
* SQLite FTS5의 이점: SQLite FTS5는 표준 라이브러리에 포함된 빠르고 효율적인 전문 검색 엔진으로, 인프로세스 실행, 네트워크 지연 없음, 외부 클라우드 자격 증명 불필요, Git 커밋 가능 등 여러 장점을 제공한다. BM25 점수와 함께 사용자 정의 토크나이저를 지원한다.
* Reciprocal Rank Fusion(RRF)의 역할: BM25와 코사인 유사도 점수의 스케일 차이를 극복하기 위해 RRF는 각 엔진의 결과 순위를 활용하여 최종 순위를 결정한다. 이를 통해 두 엔진 모두에서 높은 순위를 차지하는 문서에 높은 가중치를 부여하고, 단일 엔진에서만 발견되는 문서의 점수는 부드럽게 감소시킨다.
* 간결한 Python 구현: SQLite FTS5, 로컬 임베딩 모델, RRF를 결합한 하이브리드 검색 엔진은 약 50줄의 Python 코드로 구현될 수 있으며, sqlite3, math 모듈을 사용한다.
* 실제 적용 사례 (Hybrid RAG GitHub Action): 이 하이브리드 아키텍처는 GitHub Actions로 패키징되어 코드베이스 인덱싱, FTS5 BM25 및 밀집 임베딩 검색, RRF 융합, 자동 트리야지 응답 생성에 활용된다. 외부 데이터베이스 의존성 없이 GitHub Actions 러너에서 3초 이내에 실행된다.
* 대규모 벡터 데이터베이스의 필요성: 1억 개 이상의 벡터 인덱싱, 분산 샤딩, 대규모 멀티 테넌트 보안 격리가 필요한 경우에만 Milvus, Qdrant, Pinecone과 같은 전용 벡터 데이터베이스가 필요하며, 100만 개 미만의 청크를 처리하는 대부분의 내부 지식 기반 및 코드베이스에는 과도한 솔루션이다.
시사점
SQLite FTS5와 RRF를 활용한 하이브리드 검색 아키텍처는 기존 클라우드 벡터 데이터베이스의 운영 복잡성과 비용 부담 없이 정확한 정보 검색 능력을 크게 향상시킬 수 있으며, 많은 RAG 프로젝트에서 실질적인 대안이 될 수 있다.
댓글
GitHub Discussions