RAG Implementation Guide - Technical Specifications
Quick Reference Architecture Patterns
Pattern 1: Basic RAG (추천 시작점)
# 간단한 RAG 구현 예시
def basic_rag_pipeline(query: str) -> str:
# 1. 쿼리를 벡터로 변환
query_embedding = embedding_model.encode(query)
# 2. 유사한 문서 검색
similar_docs = vector_db.search(query_embedding, top_k=5)
# 3. 컨텍스트 구성
context = "\n".join([doc.content for doc in similar_docs])
# 4. 프롬프트 생성 및 답변 생성
prompt = f"Context: {context}\nQuestion: {query}\nAnswer:"
response = llm.generate(prompt)
return response
Pattern 2: Advanced RAG with Reranking
def advanced_rag_pipeline(query: str) -> str:
# 1. 쿼리 최적화
optimized_query = query_optimizer.rewrite(query)
# 2. 1차 검색 (더 많은 후보)
candidates = vector_db.search(optimized_query, top_k=20)
# 3. 재순위화 (정확도 개선)
reranked = reranking_model.rank(query, candidates)
top_docs = reranked[:5]
# 4. 컨텍스트 압축
compressed_context = context_compressor.compress(top_docs)
# 5. 답변 생성
response = llm.generate_with_context(query, compressed_context)
return response
Technology Stack Recommendations
Embedding Models (성능 vs 비용 고려사항)
Production-Ready Options
-
OpenAI text-embedding-3-large
- 차원: 3072, 성능: 최고급
- 비용: $0.13/1M tokens
- 용도: 높은 정확도가 중요한 상용 서비스
-
Cohere embed-v3
- 차원: 1024, 성능: 우수
- 비용: $0.10/1M tokens
- 용도: 다국어 지원이 필요한 경우
-
sentence-transformers/all-MiniLM-L6-v2
- 차원: 384, 성능: 양호
- 비용: 무료 (self-hosted)
- 용도: 예산 제약이 있는 프로젝트
도메인별 특화 모델
- 법률: legal-bert-base-uncased
- 의료: BioBERT, ClinicalBERT
- 금융: FinBERT
- 과학: SciBERT
Vector Database 선택 가이드
스타트업/소규모 프로젝트
# Chroma (로컬 개발 최적)
import chromadb
client = chromadb.Client()
collection = client.create_collection("documents")
# 장점: 설치 간단, 무료, 빠른 프로토타이핑
# 단점: 확장성 제한, 프로덕션 기능 부족