콘텐츠로 이동

RAG (검색 증강 생성)

LLM만으로는 회사 문서의 내용을 정확히 답할 수 없어요. 모델은 지식이 멈춘 시점까지 배운 내용으로만 말하고, 학습에 안 들어간 사내 정책이나 노션 문서는 모르니까요. 그래서 우리는 질문할 때마다 먼저 문서에서 찾아낸 조각을 함께 넣고 그 바탕 위에서 답하게 만듭니다. 이 구조가 바로 RAG(Retrieval-Augmented Generation, 검색 증강 생성) 입니다.

RAG의 핵심은 "모델이 기억에서 지어내는 대신, 검색된 근거를 읽고 답하게 한다"는 데 있어요. 그래서 답의 정확도가 검색 품질에 크게 좌우됩니다. 이 페이지는 그 파이프라인 전체 흐름과, 우리 제품에서 실제로 어떻게 쓰는지를 설명합니다.


상황부터 — 모델이 모르는 문서까지 답하게 하려면

모델에 넣을 지식에는 한계가 있어요. 그 대신 문서 전체를 통째로 프롬프트에 넣으면 토큰이 터무니없이 커지고, 필요한 문장만 꺼내 쓰는 게 더 정확합니다. 그래서 첫 단계가 "문서를 작은 조각으로 잘라 벡터로 바꿔 저장"하고, 질문이 오면 "가장 가까운 조각 몇 개를 찾아" 그 조각만 LLM에 넘기는 겁니다.


핵심 개념

파이프라인 흐름

RAG는 보통 인제스트(문서 → 저장)와 쿼리(질문 → 검색 → 생성) 두 단계로 갈립니다.

  1. 청킹(Chunking) — 긴 문서를 검색 단위인 조각(chunk)으로 자릅니다. 자르는 기준과 크기에 따라 검색 품질이 갈려요. (청킹 챕터)
  2. 임베딩(Embedding) — 각 조각을 숫자 배열(벡터)로 변환합니다. 우리는 OpenAI text-embedding-3-small 을 기본으로 써요.
  3. 벡터 저장 — 변환한 벡터를 벡터 DB(Qdrant)에 저장합니다.
  4. 검색(Retrieval) — 질문을 같은 임베딩으로 바꿔 가장 가까운 조각 상위 K개를 찾습니다. 의미/키워드/하이브리드 검색이 여기 속해요. (검색 챕터)
  5. 재순위화(Reranking) — 1차로 뽑힌 후보를 다시 정렬해 상위 몇 개만 생성에 넘깁니다. (재순위화 챕터)
  6. 생성(Generation) — 검색된 조각만 근거로 LLM이 답을 만듭니다.

단계별 하위 챕터


사용 사례 / 실제 적용

  • 멀티테넌트 RAG — 회사(테넌트)마다 컬렉션을 따로 두고, 검색 전에 해당 컬렉션으로만 묶어 다른 회사 문서가 섞이지 않게 합니다.
  • Notion RAG — 노션 페이지를 주기적으로 읽어 벡터로 변환하고, 페이지가 수정되면 그 섹션만 다시 임베딩해 갱신합니다.
  • 정책문서 RAG — 인사·복지 정책을 검색 대상으로 삼아, 사용자 질문에 정책 조항을 근거로 붙여 답합니다.
  • 근거 카드 (Citation) — 검색으로 찾은 문장이 어느 문서의 어디에 있는지 표시해 답과 함께 보여줍니다.
  • 문장-근거 연결 — 생성된 문장 하나하나를 검색에서 뽑힌 문장에 연결해, "어느 문장이 무슨 근거에서 나왔는지" 추적할 수 있게 합니다.
  • 환각 방지 — 모델이 기억에서 지어내는 대신 검색된 근거만 바탕으로 답하게 해, 없는 사실을 만들어내는(환각) 일을 줄입니다.

더 알아보기