단계별 프로덕션 RAG 시스템 구축 방법 (Python, pgvector, 하이브리드 검색, 리랭킹)
요약
본 튜토리얼은 프로덕션 환경에 적합한 RAG 시스템의 검색 핵심(retrieval core) 구축 방법을 단계별로 안내합니다. 테넌트 격리, 구조 인식 청킹, 하이브리드 검색(Reciprocal Rank Fusion), 그리고 크로스 인코더를 이용한 리랭킹 등 실제 운영에 필요한 고급 기술들을 다룹니다.
핵심 포인트
- 테넌트 안전성을 위해 SQL 레벨에서 권한을 강제해야 합니다.
- 제목/헤딩을 접두사로 붙여 임베딩 컨텍스트를 풍부하게 만드세요.
- 하이브리드 검색은 키워드(BM25)와 벡터 검색을 결합하여 정확도를 높입니다.
- 크로스 인코더를 사용한 리랭킹은 최종 답변의 품질을 극대화합니다.
이 튜토리얼은 프로덕션 RAG 시스템의 검색 핵심(retrieval core)을 구축합니다. 단순히 노트북에서 실험하는 장난감이 아니라, 실제로 필요한 구성 요소들입니다: 테넌트 안전성(tenant-safe) 벡터 검색, 하이브리드 검색(hybrid retrieval), 리랭킹(reranking), 그리고 근거 기반 답변(grounded answers).
사용 스택 (Stack): Python, Postgres + pgvector, OpenAI 임베딩, rank_bm25, sentence-transformers.
1단계: 테넌트 격리(tenant isolation)를 갖춘 스키마 구성
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (
...
tenant_id는 처음부터 테이블에 포함되어야 합니다. 권한은 프롬프트가 아닌 SQL에서 강제됩니다.
2단계: 구조 인식 청킹(Structure-aware chunking)
import re
def chunk_by_headings(text: str, doc_title: str, max_chars: int = 1500):
...
각 청크에 제목과 헤딩을 접두사로 붙여주면, 단순히 텍스트를 잘라낸 것만으로는 얻을 수 없는 임베딩 컨텍스트가 부여됩니다.
3단계: 임베드 및 저장(Embed and store)
import numpy as np
import psycopg
from pgvector.psycopg import register_vector
...
4단계: Reciprocal Rank Fusion을 사용한 하이브리드 검색
from rank_bm25 import BM25Okapi
def vector_search(tenant_id, query, k=30):
...
프로덕션 환경에서는 키워드 측면을 위해 Postgres의 전체 텍스트 검색(full-text search)이나 전문 검색 엔진을 사용하고, 메모리에 행(rows)을 로드하는 방식은 피해야 합니다. 하지만 융합 논리(fusion logic)는 동일하게 유지됩니다.
5단계: 크로스 인코더를 이용한 리랭킹(Rerank with a cross-encoder)
from sentence_transformers import CrossEncoder
reranker = CrossEncoder(
이 전체 시스템인 RegRadar는 TechSimPlus가 Prateek Mishra에게서 가르치는 라이브 Gen-AI 개발자 코호트인 **Vector 2.0**의 Project 2입니다.
[https://vector.techsimplus.com](https://vector.techsimplus.com/?utm_source=devto&utm_medium=blog&utm_campaign=vector2_rag)
웹사이트를 방문하여 전체 커리큘럼을 확인해 보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기