RAG 챗봇 만들기 1 - RAG가 뭔데? 왜 필요한 거야?
회사에서 사내 문서 검색 시스템 만들어달라고 해서 처음엔 그냥 ChatGPT API 붙이면 되겠지 싶었거든요. 근데 막상 해보니까 회사 내부 정보는 전혀 모르더라고요. “우리 회사 휴가 규정이 뭐야?” 물어보면 엉뚱한 일반론만 대답하는 거예요. 그때 RAG라는 걸 알게 됐어요.
오늘부터 RAG 챗봇 만들기 시리즈를 시작해요. 비전공자도 따라할 수 있게 최대한 쉽게 설명할게요.
RAG가 뭔가요?
RAG는 Retrieval-Augmented Generation의 약자예요. 한국어로 하면 “검색 증강 생성” 정도 되는데, 이름만 봐서는 뭔 소린지 모르겠죠?
쉽게 말하면 이래요:
RAG = 검색(Retrieval) + AI 답변 생성(Generation)
관련 문서를 먼저 찾아서, 그걸 참고해서 AI가 답변하는 방식
ChatGPT 같은 일반 LLM은 학습할 때 본 정보만 알아요. 근데 RAG를 쓰면 우리가 제공한 문서를 기반으로 답변할 수 있어요.
일반 챗봇 vs RAG 챗봇
차이점을 비교해볼게요:
일반 ChatGPT에게 질문하면
사용자: "우리 회사 연차 사용 규정이 뭐야?"
ChatGPT: "일반적으로 근로기준법에 따르면 1년 미만 근무 시
매월 1일의 유급휴가가 발생하며..."
회사 내부 규정은 모르니까 일반적인 답변만 해요.
RAG 챗봇에게 질문하면
사용자: "우리 회사 연차 사용 규정이 뭐야?"
RAG 챗봇: "회사 취업규칙 15조에 따르면, 연차는 매년 1월 1일에
15일이 일괄 부여되며, 미사용 연차는 다음 해로
이월되지 않습니다. 단, 연말 3일 이내 미사용분은..."
회사 문서를 검색해서 정확한 정보를 답변해요.
RAG 동작 원리
RAG가 어떻게 작동하는지 단계별로 볼게요:
1단계: 문서 준비
먼저 AI가 참고할 문서들을 준비해요.
- 회사 규정집
- 제품 매뉴얼
- FAQ 문서
- 기술 문서 등
2단계: 문서 쪼개기 (Chunking)
긴 문서를 적당한 크기로 잘라요. 왜냐면 LLM한테 한 번에 너무 긴 텍스트를 주면 처리가 어렵거든요.
[원본 문서 - 100페이지]
↓ 쪼개기
[청크1] [청크2] [청크3] ... [청크n]
(각 500~1000자 정도)
3단계: 임베딩 (숫자로 변환)
텍스트를 숫자 벡터로 바꿔요. 이걸 “임베딩”이라고 해요.
"연차는 15일 부여됩니다"
↓ 임베딩
[0.23, -0.15, 0.87, 0.42, ...]
왜 이렇게 하냐면, 컴퓨터는 텍스트보다 숫자를 비교하는 게 훨씬 빠르거든요.
4단계: 벡터 저장소에 저장
임베딩된 벡터들을 데이터베이스에 저장해요. 이걸 “벡터 저장소”라고 불러요.
5단계: 질문이 들어오면
사용자가 질문하면:
- 질문도 임베딩해서 벡터로 바꿔요
- 벡터 저장소에서 비슷한 벡터(=관련 문서)를 찾아요
- 찾은 문서 + 질문을 LLM에게 전달해요
- LLM이 문서를 참고해서 답변을 생성해요
질문: "연차 규정 알려줘"
↓ 임베딩
[0.25, -0.12, 0.85, ...]
↓ 유사도 검색
가장 비슷한 문서 3개 찾음
↓ LLM에게 전달
"다음 문서를 참고해서 답변해줘: [문서1, 문서2, 문서3]
질문: 연차 규정 알려줘"
↓
정확한 답변 생성
RAG가 필요한 경우
어떤 상황에서 RAG가 유용할까요?
- 최신 정보가 필요할 때: LLM 학습 데이터는 과거 것이라 최신 정보를 모름
- 내부 문서 기반 답변: 회사 규정, 제품 매뉴얼 등 비공개 정보
- 정확한 출처가 필요할 때: “어디에 그렇게 써있어?”에 답할 수 있음
- 환각(hallucination) 방지: 문서 기반이라 지어내는 걸 줄일 수 있음
이 시리즈에서 만들 것
10편에 걸쳐서 이런 걸 만들 거예요:
- RAG 개념 이해 (오늘)
- 개발 환경 설정
- 문서 로딩과 텍스트 추출
- 텍스트 청킹
- 임베딩 이해하기
- 벡터 저장소 (파일 기반)
- PostgreSQL + pgvector
- 검색과 응답 생성
- Streamlit 웹 UI
- 실전 프로젝트 완성
최종적으로는 PDF 문서를 넣으면 그 내용을 기반으로 답변하는 챗봇을 만들 거예요.
필요한 사전 지식
이 시리즈를 따라가려면 이 정도는 알면 좋아요:
- Python 기초 (변수, 함수, 클래스)
- 터미널/명령프롬프트 기본 사용
- API 개념 (대충이라도)
완전 처음이어도 괜찮아요. 최대한 쉽게 설명할게요.
운영자 실전 노트
RAG 프로젝트 진행하며 겪은 시행착오
- Pinecone, Weaviate 같은 클라우드 벡터 DB부터 시작 → 오버킬. 로컬 ChromaDB로 시작하는 게 훨씬 현실적
- 답변 품질 이상할 때 AI 모델 탓하기 전에 문서부터 점검 필요 — 스캔 PDF의 OCR 오류, 표 데이터 깨짐이 주요 원인
- chunk_size 500으로 시작했다가 문맥 잘려서 검색 품질 저하 → 1000으로 올리니 개선
이 경험을 통해 알게 된 점
- 문서 품질 = 답변 품질. 전처리 단계에서 문서 정제가 핵심
- chunk_size는 문서 특성마다 다름 — 여러 값으로 테스트 필수
- 처음부터 복잡한 인프라 구축보다 로컬에서 빠르게 프로토타입 만들고, 규모 커지면 그때 전환하는 게 효율적
마무리
솔직히 처음 RAG 개념 들었을 때 “이게 뭐야” 싶었거든요. 근데 막상 만들어보니까 생각보다 간단해요. 검색해서 찾은 문서를 AI한테 같이 주는 것뿐이에요.
다음 편에서는 개발 환경을 세팅할 거예요. Python이랑 필요한 라이브러리들 설치하는 거라 어렵지 않아요.
RAG 챗봇 만들기 시리즈:
← 블로그 목록으로