RAG — 검색 증강 생성
LLM의 한계(환각, 지식 컷오프)를 외부 데이터 검색으로 보완하는 아키텍처
1. RAG란
1.1 왜 RAG인가
| LLM 한계 | RAG의 해결 |
|---|---|
| 환각 (Hallucination) | 실제 문서에서 검색한 정보를 근거로 답변 |
| 지식 컷오프 | 최신 문서를 실시간 검색 |
| 도메인 지식 부족 | 사내 문서/매뉴얼을 검색 |
| 출처 불명 | 답변의 출처(문서 위치)를 함께 제공 |
1.2 기본 아키텍처
2. 청킹 전략
문서를 적절한 크기로 분할하는 것이 RAG 성능의 핵심.
| 전략 | 방법 | 장단점 |
|---|---|---|
| 고정 크기 | 500토큰씩 자르기 (오버랩 포함) | 간단하지만 문맥 단절 가능 |
| 문단 기반 | 문단/섹션 단위로 분할 | 의미 단위 유지, 크기 불균일 |
| 재귀적 | 큰 단위(섹션)에서 작은 단위(문장)로 점진 분할 | ✅ LangChain 기본. 균형적 |
| 시맨틱 | 임베딩 유사도 기반으로 의미가 바뀌는 지점에서 분할 | 가장 정교, 비용 높음 |
청킹 팁:
- 청크 크기: 보통 500~1,000 토큰
- 오버랩: 50~200 토큰 (문맥 유지)
- 메타데이터: 출처(파일명, 페이지, URL)를 청크에 포함
3. 검색 품질 향상
3.1 Hybrid Search
벡터 검색(의미) + 키워드 검색(BM25)을 결합.
| 벡터 검색 | 키워드 검색 | Hybrid | |
|---|---|---|---|
| "인프라 아키텍처" | 의미적 유사 문서 | 정확한 키워드 매칭 | ✅ 둘 다 |
| 동의어 처리 | ✅ (의미 유사) | ❌ (다른 단어) | ✅ |
| 고유명사 | ⚠️ 약함 | ✅ 정확 | ✅ |
3.2 Re-ranking
1차 검색(Vector + BM25)으로 후보를 뽑고, Cross-Encoder로 정밀 재정렬.
3.3 Query Expansion
사용자 질문이 모호할 때 질문을 확장/변환하여 검색 품질 개선.
| 기법 | 설명 |
|---|---|
| Multi-Query | LLM이 원래 질문에서 여러 변형 질문 생성 |
| HyDE | LLM이 가상의 답변을 생성 → 그 답변으로 검색 |
| Step-back | 더 일반적인 질문으로 변환 후 검색 |
4. Advanced RAG
| 기법 | 설명 |
|---|---|
| 부모-자식 청킹 | 작은 청크로 검색, 큰 청크(부모)를 LLM에 전달 |
| 문서 요약 인덱스 | 각 문서의 요약을 임베딩. 요약으로 검색 → 원문 전달 |
| Multi-hop RAG | 여러 번 검색하여 복합 질문 처리 |
| Graph RAG | 문서에서 엔티티/관계 그래프를 추출하여 그래프 기반 검색 |
| Agentic RAG | Agent가 검색 전략을 동적으로 결정 |
5. 평가
RAGAS 프레임워크
| 메트릭 | 측정 대상 | 설명 |
|---|---|---|
| Faithfulness | 답변의 충실도 | 답변이 검색된 문서에 근거하는가 |
| Answer Relevancy | 답변 관련성 | 답변이 질문에 적절한가 |
| Context Precision | 검색 정밀도 | 검색된 문서가 관련 있는가 |
| Context Recall | 검색 재현율 | 필요한 정보가 검색되었는가 |
6. RAG vs Fine-tuning
| 상황 | 추천 | 이유 |
|---|---|---|
| 최신 정보/자주 변하는 데이터 | RAG | DB만 업데이트하면 됨 |
| 모델의 행동/스타일 변경 | Fine-tuning | 모델 자체를 수정해야 함 |
| 소규모/빠른 시작 | RAG | 인프라 비용 낮음 |
| 둘 다 필요 | RAG + Fine-tuning | 파인튜닝된 모델로 RAG |
다음 글
→ AI Agent