RAG (Retrieval‑Augmented Generation, 검색 증강 생성)

빈앤아웃·2025년 8월 26일
0

PM 사전

목록 보기
50/51

정의

RAG는 대형언어모델(LLM)이 답을 생성하기 전에 외부 지식(문서, FAQ, 위키, 정책 등)을 먼저 검색하여, 그 근거를 컨텍스트로 넣고 답변을 생성하는 방식이다. 쉽게 말해 “모르면 찾아보고, 근거를 들며 대답한다”라고 이해하면 된다.


왜 중요한가?

  • 🕒 최신성: 모델 학습 이후 추가된 내용도 문서만 업데이트하면 즉시 반영된다.
  • 사실성/근거: 검색한 스니펫을 근거로 답하므로 환각(헛답)을 줄일 수 있다.
  • 💸 비용 효율: 자주 바뀌는 지식을 파인튜닝하지 않아도 된다.
  • 🔍 투명성: 출처(문서 링크, 제목, 섹션)를 함께 제시할 수 있다.
  • 🔒 보안/규정: 내부 레포지토리(사내 위키/정책 문서)만 연결하여 폐쇄형으로 운영 가능하다.

어떻게 동작하나 (핵심 흐름)

  1. 질문 입력
  2. 쿼리 확장/정규화: 질문을 검색 친화적으로 리라이팅한다.
  3. 검색: 벡터 검색(임베딩) 또는 키워드 검색(BM25), 혹은 하이브리드로 관련 문서 Top‑K를 찾는다.
  4. 컨텍스트 조립: 찾은 스니펫을 길이 제한(컨텍스트 윈도우) 안에서 합치고, 메타데이터/출처를 붙인다.
  5. 생성: LLM이 컨텍스트를 근거로 답을 작성한다(“근거 안에서만 답하라, 모르면 모른다고 하라” 지시 포함).
  6. 출처 표기: 답변 하단에 인용과 링크를 제시한다.

흐름도: 질문 → (쿼리 리라이팅) → 검색(벡터/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이 답하도록 하는’ 방식이며, 최신성·사실성·출처투명성을 동시에 잡는 접근이다.

profile
Input과 Output의 황금비율을 찾아서...

0개의 댓글