이 프로젝트는 RAG(Retrieval-Augmented Generation) 탭의 미리보기입니다. RAG의 핵심 개념을 체험하는 데 초점을 맞추며, 고급 검색 전략(Hybrid Search, Reranking 등)은 RAG 탭에서 심화 학습합니다.
사전 준비
실습
청크 분할 (Chunking)
긴 문서를 적절한 크기의 청크로 분할합니다. 의미 단위를 유지하면서 분할하는 것이 중요합니다.청크 파라미터 가이드:
| 파라미터 | 권장 값 | 설명 |
|---|---|---|
chunk_size | 200~500자 | 임베딩 모델의 입력 제한 고려 |
chunk_overlap | chunk_size의 10~20% | 문맥 연속성 유지 |
separators | 단락 → 문장 → 단어 | 의미 단위 분할 우선 |
임베딩 생성
각 청크를 벡터(임베딩)로 변환합니다. 이 벡터가 의미적 유사도 검색의 기반이 됩니다.임베딩 모델 비교:
| 모델 | 차원 | 가격 (1M 토큰) | 성능 | 용도 |
|---|---|---|---|---|
text-embedding-3-small | 1536 | $0.02 | 양호 | 일반적인 검색, 분류 |
text-embedding-3-large | 3072 | $0.13 | 우수 | 높은 정밀도 요구 |
벡터 저장 (ChromaDB)
생성된 임베딩을 ChromaDB에 저장하여 빠른 유사도 검색이 가능하도록 합니다.
ChromaDB는 로컬 환경에서 간편하게 사용할 수 있는 벡터 데이터베이스입니다. 프로덕션 환경에서는 Milvus, Pinecone, Weaviate 등의 관리형 벡터 DB를 고려합니다. 자세한 내용은 RAG 탭에서 다룹니다.
트러블슈팅
ChromaDB에서 'sqlite3.OperationalError' 발생
ChromaDB에서 'sqlite3.OperationalError' 발생
Python 내장 sqlite3 버전이 낮을 때 발생합니다.그리고
chromadb import 전에 다음 코드를 추가합니다:PDF에서 텍스트가 추출되지 않습니다
PDF에서 텍스트가 추출되지 않습니다
이미지 기반 PDF(스캔 문서)는 텍스트 추출이 되지 않습니다.
- OCR이 필요한 경우
pytesseract와pdf2image를 사용합니다 unstructured라이브러리가 다양한 문서 형식을 지원합니다:
검색 결과의 품질이 낮습니다
검색 결과의 품질이 낮습니다
chunk_size를 조절해 보세요 (너무 크면 노이즈, 너무 작으면 문맥 부족)chunk_overlap을 늘려 문맥 연속성을 개선합니다k값을 늘려 더 많은 문서를 검색합니다- 임베딩 모델을
text-embedding-3-large로 변경합니다 - 쿼리를 구체적으로 작성하도록 사용자에게 안내합니다
LLM이 문서에 없는 내용을 답변합니다
LLM이 문서에 없는 내용을 답변합니다
환각(Hallucination) 문제입니다.
temperature를 0.0~0.3으로 낮추세요- 시스템 프롬프트에 “문서에 없는 정보는 답하지 마세요”를 강조합니다
- 검색된 문맥이 질문과 관련 있는지 유사도 점수 임계값을 설정합니다
- 환각 검증 파이프라인을 추가합니다(안전장치 참고)
다음 단계
RAG 탭
이 프로젝트의 심화 버전입니다. Hybrid Search, Reranking, 고급 검색 전략을 학습합니다.
Agent 탭
RAG를 도구로 활용하는 에이전트 아키텍처를 학습합니다

