RAG
Naive RAG
indexing
- 다양한 문서 포맷을 모델이 학습 가능한 텍스트 청크로 나눔
- 임베딩(벡터화) 하여 벡터 데이터베이스에 저장
retrieval
- 유저로부터 쿼리를 받으면 해당 쿼리를 임베딩한 후 indexing 에서 저장된 벡터들과 비교하여 유사도가 높은 Top K chunk 를 골라냄
generation
- 임베딩된 쿼리와 chunk는 자연어 상태의 프롬프트로 합성되어 모델로 입력되고 결과가 생성됨
Naive RAG 의 단점
- 검색 단계에서 적절한 chunk 가 검색되지 않을 수 있음
- chunk 단위로 나뉜 정보는 중요한 정보와 중요하지 않은 정보가 섞여있을 수 있고 이로 인해 중요한 정보가 포함된 chunk 가 누락될 수 있음
- 생성 단계에서 모델이 검색된 chunk를 기반으로 하지 않는 텍스트를 생성할 수 있음
- 다른 소스로 부터 얻어진 중복된 정보는 중복된 정보의 텍스트를 생성하고 문맥이 매끄럽지 못하거나 일관성 없는 문장을 생성할 수 있음
- 복잡한 쿼리에서는 한번의 검색이 문맥 정보를 충분히 가져오는데 충분하지 않을 수 있음
- 생성 모델은 증강된 정보에 의존하여 자체적으로 통찰력있거나 정보들을 조합한 새로운 정보를 추론하지 못하고 검색된 정보를 계속 되풀이하는 결과를 내놓을 수 있음
Advencsed RAG
pre-retrieval
- 인덱싱된 데이터를 정제하거나 인덱싱 구조를 최적화하거나 정보들을 뒤섞거나 메타데이터를 추가하는 등의 최적화 과정을 거침
- 유저의 쿼리를 좀더 명확하고 검색단계에 사용하기 좋게 최적화함
post-retrieval
- 모든 관련있는 chunk 를 생성 모델에 다 넣는 것은 정보의 희석화를 발생시키기 때문에 중요한 정보만을 추리거나 압축함
Modular RAG
- 앞선 패러다임들과는 다르게 정해진 순서 없이 여러가지 모듈들을 거치면서 결과를 최적화
- Search: LLM이 코드를 생성하여 검색 엔진, 데이터베이스(SQL 등), 지식 그래프를 직접 넘나들며 검색
- RAG-Fusion: 유저의 질문을 여러 개의 다른 관점(Multi-query)으로 확장하여 병렬 검색하고 리랭킹
- Routing: 질문의 성격에 따라 '요약이 필요한지', '특정 DB를 설계해야 하는지' 판단하여 가장 알맞은 이동 경로를 정함
- Predict: 필요한 문맥(Context)을 데이터베이스에서 찾는 대신, LLM이 직접 먼저 예측·생성하여 노이즈를 줄임
- Task Adapter: RAG 시스템을 특정 하위 작업에 맞춰 자동 최적화

RAG 성능평가
Quality Scores
- 문맥 관련성 (Context Relevance) : 검색된 문맥이 얼마나 정확하고 구체적인지, 질문에 대한 연관성이 얼마나 있는지
- 답변 충실성 (Answer Faithfulness) : 생성된 답변이 검색된 문맥에 얼마나 부합하는지, 얼마나 일관성있고 모순된 답변이 없는지
- 답변 관련성 (Answer Relevance) : 생성된 답변이 제기된 질문과 얼마나 연관이 있는지
Required Abilities
- 노이즈 강인성 (Noise Robustness) : 질문과 연관은 있지만 실속없는 무의미한 정보(노이즈)를 걸러내는 능력을 평가
- 거부 능력 (Negative Rejection) : 검색된 문서에 질문에 답할 핵심 정보가 없을 때 답변을 억지로 생성하지 않고 보류하는 능력을 평가
- 정보 통합력 (Information Integration) : 여러 문서에 흩어진 정보를 종합하는 능력을 평가
- 반사실적 강인성 (Counterfactual Robustness): 검색된 문서 내에 있는 명백한 오류나 왜곡된 정보, 모순되는 정보를 스스로 식별하고 무시할 수 있는 능력을 평가
평가 방식
- 독립 평가: 위에서 언급된 평가 항목들을 RAG 시스템의 검색 부분과 답변 생성 부분을 따로 평가하는 방법
- 종단 평가: 최종 생성된 답변만 평가하는 방법
평가에 사용되는 지표

평가에 사용되는 프레임워크 및 툴

RAGAS
RAG 평가 분야에서 가장 인기 있는 라이브러리. RAG 전용 핵심 지표를 쉽게 평가 가능
TruLens
RAG 의 핵심 지표를 시각화 대시보드와 함께 제공하여 디버깅하기 좋으나 RAGAS 에 비해 초기 설정 코드가 조금 더 무거운 편
ARES
논문 중심의 학술적 프레임워크. 정확도는 높지만 설정이 매우 복잡하여 간단하게 사용하기에는 부적합
DeepEval
최근 RAGAS 의 강력한 대안이자 pytest 기반으로 동작하여 개발자 친화적. 코드 작성이 직관적이어서 빠르게 테스트하기 적합함
RGB / RECALL / CRUD
RAG 평가용 벤치마크 데이터셋이나 학술 논문에서 제안된 평가 방법론
LangChain
RAG 모듈들과 LLM 모델을 결합하여 쉽게 RAG 시스템을 사용하는 LLM 서비스 (Agent)를 구축하기 위한 프레임워크
Agent
ReAct(Reasoning + Acting) 패턴을 사용
- 사용자의 질문을 분석하고 어떤 도구를 사용할지 스스로 결정
- 도구 실행 결과를 바탕으로 추가 작업 수행 여부 판단
- 최종 답변을 생성할 때까지 반복적으로 추론과 행동을 수행
구성 요소
| 구성 요소 | 역할 |
|---|
| Model | 추론을 위한 LLM 모델 |
| Tools | 명확한 정답을 반환할 수 있는 함수 |
| System Prompt | 동작 지침 |
| Context Schema | 런타임 컨텍스트 타입 |
| Memory | 프롬프트 히스토리 관리 |
| Middleware | 커스텀 로직 삽입 |
| Structured Output | 출력 형식 지정 |
Document Loader (문서 로더)
- WebBaseLoader
- TextLoader
- DirectoryLoader
- CSVLoader
- PDF 로더
Text Splitter
Embedding
- 유저의 쿼리 및 청크단위로 분리된 텍스트를 벡터화하는 모듈
Vector Store
- 벡터화한 정보들을 저장하고 검색하는 데이터베이스
Retriever
- Vector Store 에서 문서를 검색하는 도구
Reference
- Y. Gao et al., "Retrieval-Augmented Generation for Large Language Models: A Survey," arXiv:2312.10997v5, 27 Mar 2024.
- 위키독스 - 랭체인(LangChain) 입문부터 응용까지