RAG (Retrieval-Augmented Generation) 구축 가이드
Source: raw/articles/2026-04-26-rag-langchain-implementation-datacamp.md Type: article By: DataCamp Valid as of: 2026-04-26
핵심 Takeaway
- RAG란: LLM + 벡터 데이터베이스 + 검색 엔진으로 정확하고 최신의 답변 생성 (Hallucination 해결, 최신 정보 반영)
- 3단계 아키텍처:
- Indexing (문서 로드 → 청크 분할 → 임베딩 → 벡터 DB 저장)
- Retrieval (쿼리 임베딩 → 유사도 검색 → 상위 K개 문서 추출)
- Generation (검색 결과 + 쿼리 → LLM에 전달 → 최종 답변)
- 청크 분할: 1000-2000자 권장 (문맥 보존 + 검색 정확도)
- 벡터 DB 선택: Chroma (로컬), Pinecone (클라우드), FAISS (오프라인), Weaviate (엔터프라이즈)
- 고급 검색: MMR (다양성 고려), 메타데이터 필터 적용 가능
학습 목표 연계
Lecture Plan 2026 — Gen-3: RAG 아키텍처 구축 (Bloom L6-Create)
| 학습목표 | 증거 | 상태 |
|---|---|---|
| Behavior: RAG 아키텍처 구축 | Indexing → Retrieval → Generation 3단계 상세 설명 | ✅ |
| Condition: 자신의 도메인 데이터 (PDF/CSV) | PyPDFLoader, pandas 활용한 문서 로드 예시 | ✅ |
| Degree: LLM이 기존 지식 + 검색 결과 합성 | 검색 결과를 프롬프트에 포함하여 답변 생성 | ✅ |
내용 구성
1. RAG가 필요한 이유
- 문제 1: LLM의 Hallucination (환각) — 잘못된 정보 제시
- 문제 2: 최신 정보 반영 불가 — 훈련 데이터 이후 정보 없음
- 해결책: RAG로 실시간 데이터 통합
2. RAG의 3단계 아키텍처
2-1. Indexing (색인화)
- Step 1: 문서 로드 (PyPDFLoader, CSV, 웹)
- Step 2: 문서 분할 (CharacterTextSplitter, 청크 크기: 1000자)
- Step 3: 임베딩 생성 (OpenAIEmbeddings, HuggingFaceEmbeddings)
- Step 4: 벡터 DB 저장 (Chroma, Pinecone, FAISS)
2-2. Retrieval (검색)
- 기본 검색: similarity_search() — 유사도 기반
- 고급 검색: MMR (다양성), 메타데이터 필터
2-3. Generation (생성)
- RetrievalQA: 검색 결과 + 쿼리 → LLM → 답변
- 프롬프트 구조: Context + Question → Response
3. 문서 분할 (Chunking)
- 왜 필요한가 (토큰 제한)
- 청크 크기 선택 (500자 너무 작음, 1000-2000자 적절, 5000자 낭비)
- 청크 중복 (200자) — 맥락 보존
4. 임베딩 (Embedding)
- 의미론적 벡터화
- 유사한 텍스트 → 유사한 벡터
- 모델 선택: OpenAI, HuggingFace, Cohere
5. 벡터 데이터베이스
- Chroma: 로컬, 경량
- Pinecone: 클라우드, 관리형
- FAISS: 로컬, 고속
- Weaviate: 분산, 엔터프라이즈
6. 검색 기법
- Similarity Search: 코사인 유사도
- MMR: 관련성 + 다양성 (fetch_k=10 후 선택)
- 메타데이터 필터: 날짜, 출처별 필터링
7. 생성 단계
- RetrievalQA.from_chain_type()
- chain_type: “stuff” (직접 포함), “refine” (반복 정제), “map_reduce” (병렬)
8. 실전 사례
- PDF 기반 고객 서비스 챗봇
- 기업 내부 문서 검색 시스템
- 뉴스 데이터 기반 분석
관련 개념
- rag — RAG 아키텍처
- vector-embeddings — 벡터 임베딩
- semantic-search — 의미론적 검색
- langchain — LangChain 프레임워크
- vector-databases — 벡터 DB 도구
다른 Gen 모듈과의 연계
- Gen-1 transformer-architecture — 임베딩 생성에 사용되는 Transformer
- Gen-2 prompt-engineering-techniques — RAG에서 검색 결과를 프롬프트에 포함
- Gen-4 genai-design-patterns — RAG + Agent (Tool Use 패턴)
실전 구현 체크리스트
- 문서 로드 (PyPDFLoader / CSV)
- 텍스트 분할 (CharacterTextSplitter, chunk_size=1000)
- 임베딩 모델 선택 (OpenAI / HuggingFace)
- 벡터 DB 초기화 (Chroma / Pinecone)
- 검색 테스트 (유사도 확인)
- LLM 연결 (ChatOpenAI / Claude)
- RetrievalQA 체인 구성
- 프롬프트 최적화 (CoT + Few-shot 추가)
- 성능 평가 (정확도, 응답 시간)
- FastAPI로 API 배포
성능 최적화 팁
- 청크 크기: 도메인별로 최적화 필요 (법률: 1500자, 뉴스: 800자)
- 임베딩 모델: 비용 vs 성능 (text-embedding-3-small vs large)
- 벡터 DB 선택: 규모에 따라 결정 (소규모: Chroma, 대규모: Pinecone)
- 검색 개수: k=3-5 (정확도 vs 토큰 비용)
- Reranking: BM25 + 의미론적 검색 조합 (성능 +20%)