[RAG] RAG 평가 지표와 도구 — Faithfulness, Answer Relevancy / RAGAS, LangSmith
by 우와한개발자
1. RAG 평가가 왜 중요한가
1) 일반 소프트웨어와의 차이
- 일반적인 소프트웨어는 입력과 출력이 명확하다
- LLM 기반 시스템은 같은 질문에도 매번 다른 답변이 나올 수 있다
- "틀렸다"는 것을 사람이 직접 읽어보기 전까지 알기 어렵다
2) RAG의 두 가지 실패 지점
- 검색 실패 : 질문과 관련된 청크를 제대로 가져오지 못하는 경우
- 생성 실패 : 청크는 잘 가져왔지만 LLM이 엉뚱한 답변을 만들어내는 경우
3) 평가의 목적
- 이 둘을 구분하지 않으면 어디서 문제가 생기는지 알 수 없다
- 평가는 단순히 "잘 되나 안 되나"를 확인하는 게 아니라, 어느 단계에서 무엇이 문제인지 파악하기 위한 과정이다
2. 주요 평가 지표
1) Faithfulness (충실도)
- 답변이 검색된 문서 내용에 근거하고 있는지를 측정한다
- LLM이 문서에 없는 내용을 지어냈는지(hallucination)를 잡아내는 지표다
(1) 측정 방법
- 답변에 포함된 각 주장이 검색된 청크에서 뒷받침되는지 확인
(2) 점수 해석
- 점수 범위 : 0 ~ 1 (1에 가까울수록 문서에 충실)
- 낮을 때 : LLM이 학습 데이터에서 끌어온 내용으로 답변을 채우고 있을 가능성이 높음
2) Answer Relevancy (답변 관련성)
- 답변이 질문에 얼마나 직접적으로 대답하고 있는지를 측정한다
- 문서에는 충실하지만 질문의 핵심을 비껴가는 답변을 잡아낸다
(1) 측정 방법
- 답변으로부터 역으로 질문을 생성해서 원래 질문과 유사도를 비교
(2) 점수 해석
- 점수 범위 : 0 ~ 1
- 낮을 때 : 답변이 장황하거나 질문과 관계없는 내용을 포함하고 있음
3) Context Precision (컨텍스트 정밀도)
- 검색된 청크 중에서 실제로 답변에 필요한 청크가 얼마나 되는지를 측정한다
- 검색의 정확도를 나타낸다
(1) 측정 방법
- 검색된 k개의 청크 중 관련 있는 청크의 비율
(2) 점수 해석
- 낮을 때 : 불필요한 청크가 많이 섞여 들어와 LLM의 답변 품질을 떨어뜨림
4) Context Recall (컨텍스트 재현율)
- 정답을 도출하는 데 필요한 정보가 검색된 청크 안에 얼마나 포함되어 있는지를 측정한다
- 검색의 완전성을 나타낸다
(1) 측정 방법
- 정답(ground truth)의 각 문장이 검색된 청크에서 뒷받침되는지 확인
(2) 점수 해석
- 낮을 때 : 필요한 정보가 검색 단계에서 누락되고 있음. 청크 크기나 검색 방식을 재검토해야 함
5) 지표 요약
| 지표 | 평가 대상 | 무엇을 잡아내는가 |
| Faithfulness | 생성 | 문서에 없는 내용을 지어내는지 (hallucination) |
| Answer Relevancy | 생성 | 질문의 핵심을 비껴가는 답변인지 |
| Context Precision | 검색 | 불필요한 청크가 섞여있는지 |
| Context Recall | 검색 | 필요한 정보가 누락됐는지 |
3. 평가 도구
1) RAGAS
- RAG 평가를 위해 만들어진 전용 프레임워크
- 정답 여부를 사람이 직접 하나씩 판단하지 않고, LLM을 평가자로 활용해 답변 품질을 자동으로 측정한다.
- Answer Relevancy, Faithfulness, Context Precision, Context Recall 외에도 다양한 지표를 통해 질문, 검색된 문서, 생성된 답변이 얼마나 잘 연결되어 있는지 평가할 수 있다.
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision, context_recall
from datasets import Dataset
data = {
"question": ["Streamlit이란?"],
"answer": ["파이썬으로 웹 앱을 만드는 프레임워크입니다."],
"contexts": [["Streamlit은 파이썬 기반 오픈소스 웹 프레임워크입니다."]],
"ground_truth": ["Streamlit은 파이썬 코드만으로 웹 UI를 만들 수 있는 오픈소스 프레임워크입니다."]
}
dataset = Dataset.from_dict(data)
result = evaluate(
dataset,
metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)
print(result)
https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/
List of available metrics - Ragas
Evaluation framework for your AI Application
docs.ragas.io
2) LangSmith
- LangChain에서 만든 LLM 애플리케이션 모니터링/평가 도구
- LangChain 파이프라인의 각 단계(청킹, 검색, 생성)를 추적(trace)할 수 있다
- 실제 운영 중인 요청들을 모아 데이터셋으로 만들고 반복 평가 가능하다.
- LangChain을 쓰고 있다면 추가 설정 없이 바로 연동된다.
3) TruLens
- RAG 파이프라인 평가 및 추적 도구
- RAG Triad(Context Relevance, Groundedness, Answer Relevance) 개념으로 평가
- 평가 결과를 대시보드로 시각화해서 어느 단계가 약한지 한눈에 확인 가능하다.
4) DeepEval
- LLM 애플리케이션 테스트 프레임워크. pytest처럼 사용할 수 있다
- 평가를 코드 기반 테스트 케이스로 작성 → CI/CD에 통합 가능
- Faithfulness, Relevancy 등 RAGAS와 유사한 지표 제공
5) 도구 비교
| 도구 | 특징 | 적합한 경우 |
| RAGAS | RAG 전용, 자동 평가 | 빠르게 핵심 지표 측정 |
| LangSmith | 파이프라인 추적/모니터링 | LangChain 기반 운영 환경 |
| TruLens | 대시보드 시각화 | 어느 단계가 약한지 분석 |
| DeepEval | pytest 스타일 테스트 | CI/CD 통합, 회귀 테스트 |
4. 검색 품질 개선 전략
1) Chunk Size 튜닝
- 청크가 너무 크면 → 관련 없는 내용이 섞여 노이즈가 늘어남 (Context Precision 하락)
- 청크가 너무 작으면 → 문맥이 잘려서 의미 파악이 어려움 (Context Recall 하락)
- chunk_overlap을 적절히 설정해서 청크 경계에서 문맥이 끊기지 않도록 한다
2) Reranking
- 1차로 벡터 검색을 통해 넉넉하게 청크를 가져온다 (예: top-20)
- Reranker 모델로 질문과의 관련도를 재계산해 상위 k개만 추려서 LLM에 전달한다
- Context Precision을 높이는 데 효과적이다
(1) 동작 방식
- 벡터 검색(Bi-Encoder)은 질문과 문서를 각각 따로 벡터로 변환해서 거리를 비교한다 → "의미가 비슷한가"를 본다
- Reranker(Cross-Encoder)는 질문과 문서를 한 쌍으로 묶어서 함께 비교한다 → "이 문서가 질문에 답이 되는가"를 본다'
- 두 기준이 다르기 때문에 같은 후보군이라도 순위가 바뀔 수 있다
(2) 대표 도구
| 도구 | 설명 |
| Cohere Rerank | API 형태로 제공되는 대표적인 Reranker |
| BGE-Reranker | 오픈소스 Cross-Encoder 기반 reranker |
| ColBERT | 효율성과 정밀도를 절충한 검색 모델 |
3) Hybrid Search
- 벡터 검색(의미 기반)와 키워드 검색(BM25, 어휘 기반)을 함께 사용한다
- 벡터 검색은 의미가 비슷한 문장을 찾지만, 고유명사나 코드명 같은 정확한 키워드 매칭에는 약하다
- 두 방식을 결합하면 Context Recall이 개선되는 경우가 많다
4) 전략 요약
| 문제 증상 | 의심되는 지표 | 개선 전략 |
| 답변에 불필요한 정보가 섞임 | Context Precision 낮음 | Chunk Size 축소, Reranking |
| 필요한 정보를 놓침 | Context Recall 낮음 | Chunk Overlap 조정, Hybrid Search |
| 문서에 없는 내용을 지어냄 | Faithfulness 낮음 | 프롬프트에 "문서 기반으로만 답변" 명시, Context Precision 개선 |
| 질문과 무관한 답변 | Answer Relevancy 낮음 | 프롬프트 개선, 답변 길이 제한 |
5. 정리
- RAG는 검색과 생성 두 단계로 나뉘며, 각 단계를 따로 평가해야 문제 지점을 찾을 수 있다
- Faithfulness, Answer Relevancy는 생성 단계, Context Precision, Context Recall은 검색 단계를 평가한다
- RAGAS로 빠르게 지표를 측정하고, 필요에 따라 LangSmith/TruLens/DeepEval로 모니터링·테스트 체계를 갖춘다
- 지표가 낮게 나오면 Chunk 튜닝, Reranking, Hybrid Search 같은 전략으로 검색 품질을 개선한다
'AI' 카테고리의 다른 글
| [Harness] Harness란 무엇인가 — AI 검증, 품질 보증, Test Harness, Vibe Coding, CI/CD (0) | 2026.06.30 |
|---|---|
| [MCP] Next.js로 MCP Server와 Client 구현하기 — Notion 검색 웹앱 (0) | 2026.06.12 |
| [RAG] RAG 기반 문서 질의응답 챗봇 구현하기 — LangChain, ChromaDB, Streamlit (0) | 2026.06.11 |
| [MCP] MCP 서버 연결하기 — Cursor · Claude Desktop · Claude Code에서 외부 MCP 서버 연결하기 (1) | 2026.06.07 |
| [AI 기초] AI가 학습(Learning)한다는 의미는 무엇일까? (0) | 2026.03.07 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자