RAG (검색 증강 생성)¶
LLM만으로는 회사 문서의 내용을 정확히 답할 수 없어요. 모델은 지식이 멈춘 시점까지 배운 내용으로만 말하고, 학습에 안 들어간 사내 정책이나 노션 문서는 모르니까요. 그래서 우리는 질문할 때마다 먼저 문서에서 찾아낸 조각을 함께 넣고 그 바탕 위에서 답하게 만듭니다. 이 구조가 바로 RAG(Retrieval-Augmented Generation, 검색 증강 생성) 입니다.
RAG의 핵심은 "모델이 기억에서 지어내는 대신, 검색된 근거를 읽고 답하게 한다"는 데 있어요. 그래서 답의 정확도가 검색 품질에 크게 좌우됩니다. 이 페이지는 그 파이프라인 전체 흐름과, 우리 제품에서 실제로 어떻게 쓰는지를 설명합니다.
상황부터 — 모델이 모르는 문서까지 답하게 하려면¶
모델에 넣을 지식에는 한계가 있어요. 그 대신 문서 전체를 통째로 프롬프트에 넣으면 토큰이 터무니없이 커지고, 필요한 문장만 꺼내 쓰는 게 더 정확합니다. 그래서 첫 단계가 "문서를 작은 조각으로 잘라 벡터로 바꿔 저장"하고, 질문이 오면 "가장 가까운 조각 몇 개를 찾아" 그 조각만 LLM에 넘기는 겁니다.
핵심 개념¶
파이프라인 흐름¶
RAG는 보통 인제스트(문서 → 저장)와 쿼리(질문 → 검색 → 생성) 두 단계로 갈립니다.
- 청킹(Chunking) — 긴 문서를 검색 단위인 조각(chunk)으로 자릅니다. 자르는 기준과 크기에 따라 검색 품질이 갈려요. (청킹 챕터)
- 임베딩(Embedding) — 각 조각을 숫자 배열(벡터)로 변환합니다. 우리는 OpenAI text-embedding-3-small 을 기본으로 써요.
- 벡터 저장 — 변환한 벡터를 벡터 DB(Qdrant)에 저장합니다.
- 검색(Retrieval) — 질문을 같은 임베딩으로 바꿔 가장 가까운 조각 상위 K개를 찾습니다. 의미/키워드/하이브리드 검색이 여기 속해요. (검색 챕터)
- 재순위화(Reranking) — 1차로 뽑힌 후보를 다시 정렬해 상위 몇 개만 생성에 넘깁니다. (재순위화 챕터)
- 생성(Generation) — 검색된 조각만 근거로 LLM이 답을 만듭니다.
단계별 하위 챕터¶
- 청킹 전략 — 크기·중복·구조 기준으로 문서를 자르는 법
- 검색 (Retrieval) — 의미·키워드·하이브리드 검색과 순위 합성
- 재순위화 (Reranking) — Cohere Reranker로 후보 재정렬
- RAG 평가 — 정확도·근거 충실성으로 파이프라인 측정
사용 사례 / 실제 적용¶
- 멀티테넌트 RAG — 회사(테넌트)마다 컬렉션을 따로 두고, 검색 전에 해당 컬렉션으로만 묶어 다른 회사 문서가 섞이지 않게 합니다.
- Notion RAG — 노션 페이지를 주기적으로 읽어 벡터로 변환하고, 페이지가 수정되면 그 섹션만 다시 임베딩해 갱신합니다.
- 정책문서 RAG — 인사·복지 정책을 검색 대상으로 삼아, 사용자 질문에 정책 조항을 근거로 붙여 답합니다.
- 근거 카드 (Citation) — 검색으로 찾은 문장이 어느 문서의 어디에 있는지 표시해 답과 함께 보여줍니다.
- 문장-근거 연결 — 생성된 문장 하나하나를 검색에서 뽑힌 문장에 연결해, "어느 문장이 무슨 근거에서 나왔는지" 추적할 수 있게 합니다.
- 환각 방지 — 모델이 기억에서 지어내는 대신 검색된 근거만 바탕으로 답하게 해, 없는 사실을 만들어내는(환각) 일을 줄입니다.
더 알아보기¶
- 공식 문서 (1차): OpenAI Embeddings, Cohere Rerank, LangChain Text Splitters, Qdrant
- 큐레이션/블로그 (2차): Qdrant 블로그, Cohere 블로그