주제: 6-1 RAG 파이프라인 (Retrieval → Rerank → Generation)

분류: rag_agent

타입: concept

난이도: 중급

선수지식: 있음 — Embedding, Transformer, Similarity Search

문제 설정

LLM은 학습 데이터 이후의 정보를 알 수 없습니다. 또한 내부 파라미터만으로는 최신 정보나 기업 내부 데이터를 활용하기 어렵습니다.

이를 해결하기 위해 사용하는 구조가 RAG (Retrieval-Augmented Generation)입니다.

핵심 아이디어:

RAG는 "LLM이 혼자 기억해서 답하는 구조"가 아니라, "필요한 문서를 먼저 찾고 그 문서를 바탕으로 답하게 하는 구조"다.

그래서 RAG를 이해할 때는 생성 모델보다 먼저 검색 시스템 관점이 필요하다. 질문과 관련 없는 문서를 가져오면 generation 단계가 아무리 좋아도 환각이 생기기 쉽다. 반대로 좋은 문서를 찾으면 답변 품질은 크게 좋아진다.

retrieval, rerank, generation을 구분하는 이유도 각 단계의 실패 원인이 다르기 때문이다. retrieval이 틀리면 근거 자체가 없고, rerank가 약하면 중요한 문서가 뒤로 밀리며, generation이 약하면 근거를 갖고도 설명을 못 만든다.

RAG 시스템은 보통 다음 3단계로 구성됩니다.

Query
 ↓
Retrieval
 ↓
Rerank
 ↓
Generation

시각 자료로 먼저 보기

RAG 전체 흐름도
질문과 외부 문서를 함께 프롬프트로 조합해 LLM이 답하도록 만드는 RAG의 전체 데이터 흐름이다.
원본 / 라이선스 · Turtlecrown · CC BY-SA 4.0
간단한 RAG 플로우차트
retrieval, augmentation, generation 단계가 어떻게 나뉘는지 간단한 플로우차트로 압축한 그림이다.
원본 / 라이선스 · Numiri · CC BY 4.0

1. Retrieval 단계

사용자 질문과 가장 관련 있는 문서를 검색합니다.

문서와 질문을 embedding 공간으로 변환합니다.

이 단계의 핵심은 질문과 문서를 같은 벡터 공간 위에 올려놓는 것이다. 그래야 의미가 비슷한 것들이 공간상에서도 가까워지고, nearest neighbor search로 빠르게 찾을 수 있다. 즉 retrieval은 단순 키워드 검색이 아니라 의미 기반 검색이다.

수식:

q=f(query)
di=f(documenti)

기호 의미

유사도 계산

보통 cosine similarity를 사용합니다.

sim(q,di)=(q·di)/(||q||||di||)

왜 필요한가

수많은 문서 중 관련 문서 후보를 찾기 위함입니다.

주의점

retrieval은 정확도가 완벽하지 않습니다.

2. Rerank 단계

retrieval 결과 중 더 정확한 문서를 선택합니다.

일반적으로 cross-encoder 모델을 사용합니다.

score 계산:

si=CrossEncoder(query,doci)

기호 의미

왜 필요한가

embedding retrieval은 approximate search이기 때문에 noise가 존재합니다.

주의점

rerank는 계산 비용이 높습니다.

3. Generation 단계

최종 문서를 LLM에 입력하여 답을 생성합니다.

Prompt = Query + Retrieved Context

LLM 목표:

P(answer|query,context)

기호 의미

왜 필요한가

외부 지식을 기반으로 답을 생성합니다.

4. 전체 파이프라인

User Query
   ↓
Embedding
   ↓
Vector DB Search
   ↓
Top-k Documents
   ↓
Reranker
   ↓
Top-n Documents
   ↓
LLM Generation

5. Vector Search

retrieval 단계는 보통 vector database를 사용합니다.

대표 알고리즘:

목표:

argmaxisim(q,di)

왜 중요한가

대규모 문서 검색을 빠르게 수행합니다.

6. Retrieval vs Rerank

단계 목표 모델
Retrieval 빠른 후보 검색 embedding
Rerank 정확한 정렬 cross encoder

7. RAG의 장점

8. RAG의 한계

코드-수식 연결

개념 코드 설명
embedding model.encode(query) query vector 생성
vector search faiss.search() 유사 문서 검색
rerank cross_encoder.predict() 문서 재정렬
generation llm.generate() 답 생성

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)