정의
RAG는 대형언어모델(LLM)이 답을 생성하기 전에 외부 지식(문서, FAQ, 위키, 정책 등)을 먼저 검색하여, 그 근거를 컨텍스트로 넣고 답변을 생성하는 방식이다. 쉽게 말해 “모르면 찾아보고, 근거를 들며 대답한다”라고 이해하면 된다.
왜 중요한가?
- 🕒 최신성: 모델 학습 이후 추가된 내용도 문서만 업데이트하면 즉시 반영된다.
- ✅ 사실성/근거: 검색한 스니펫을 근거로 답하므로 환각(헛답)을 줄일 수 있다.
- 💸 비용 효율: 자주 바뀌는 지식을 파인튜닝하지 않아도 된다.
- 🔍 투명성: 출처(문서 링크, 제목, 섹션)를 함께 제시할 수 있다.
- 🔒 보안/규정: 내부 레포지토리(사내 위키/정책 문서)만 연결하여 폐쇄형으로 운영 가능하다.
어떻게 동작하나 (핵심 흐름)
- 질문 입력
- 쿼리 확장/정규화: 질문을 검색 친화적으로 리라이팅한다.
- 검색: 벡터 검색(임베딩) 또는 키워드 검색(BM25), 혹은 하이브리드로 관련 문서 Top‑K를 찾는다.
- 컨텍스트 조립: 찾은 스니펫을 길이 제한(컨텍스트 윈도우) 안에서 합치고, 메타데이터/출처를 붙인다.
- 생성: LLM이 컨텍스트를 근거로 답을 작성한다(“근거 안에서만 답하라, 모르면 모른다고 하라” 지시 포함).
- 출처 표기: 답변 하단에 인용과 링크를 제시한다.
흐름도: 질문 → (쿼리 리라이팅) → 검색(벡터/BM25) → 스니펫 Top‑K → 컨텍스트 조립 → LLM 생성 → 출처
비유로 이해하기
- 📖 오픈북 시험: 답을 만들기 전에 책을 펼쳐 필요한 부분을 찾아보고, 그 내용을 근거로 답한다.
- 🧱 레고 조립: 질문에 맞는 조각(문서 스니펫)을 골라 설명(답변)을 만든다.
구성 요소
- 🧩 임베딩 모델: 문서를 수치 벡터로 바꾸는 모델(다국어 지원이면 한글 성능 유리함).
- 🗂 인덱싱/청킹: 문서를 200~400토큰(또는 500~1000자) 단위로 잘라 인덱스한다(중첩 10~20%).
- 🔎 검색기: 벡터 검색(의미 기반), BM25(키워드), 하이브리드(+ 재랭커 Cross‑Encoder).
- 🧠 LLM: 컨텍스트를 근거로 생성하는 엔진.
- 🛡 가드레일: 근거 밖 추론 금지, 모르면 거절, PII/보안 필터.
- ⚡ 캐시/관측: 자주 묻는 질문 캐싱, 로그/트레이싱으로 품질·지연 관리.
언제 RAG를 쓰나 (프롬프트/파인튜닝과 비교)
- RAG: 문서가 많고 자주 바뀌며, 근거/출처가 필요한 경우에 적합하다.
- 파인튜닝: 고정된 스타일/양식/작업 패턴을 모델 행동 자체에 스며들게 하고 싶을 때 좋다.
- 프롬프트 엔지니어링: 빠르게 방향만 잡고 싶거나, 데이터가 거의 없을 때 가볍게 시도한다.
구분 | 가장 잘 맞는 상황 | 장점 | 주의점 |
---|
RAG | 대량 문서 Q&A, 정책/매뉴얼, 최신 지식 | 최신성·근거 제시 | 검색 품질이 곧 답변 품질이다 |
파인튜닝 | 톤/포맷 일관, 반복 태스크 | 일관성·전문화 | 지식 업데이트가 느리다 |
프롬프트 | 초기 실험, 간단 지시 | 빠르고 저렴 | 일관성 한계 |
미니 예시 (이커머스 고객센터)
질문: “교환/반품 기한이 몇 일이냐?”
검색 결과 스니펫:
반품·교환은 수령 후 7일 이내 신청, 상품 훼손 시 제외 (정책 v3, 2025‑08‑01)
답변(LLM): “정책상 수령 후 7일 이내 신청 가능하다. 단, 상품 훼손 등 예외가 있다. (근거: 정책 v3 2025‑08‑01)”
한계/리스크
- 🔍 검색 의존성: 검색 품질이 낮으면 답도 나빠진다.
- 💬 긴 컨텍스트 부담: 너무 많은 스니펫은 비용과 혼선을 늘린다.
- 🔐 보안/권한: 민감한 내부 문서 접근 제어를 철저히 해야 한다.
- ♻️ 문서 갱신: 레퍼런스가 오래되면 오답이 나온다.
한 줄 요약
RAG는 ‘검색으로 근거를 모아 LLM이 답하도록 하는’ 방식이며, 최신성·사실성·출처투명성을 동시에 잡는 접근이다.