chanhi.dev

RAG 평가 - RAGAS로 검색과 생성 나눠 보기, DeepEval로 테스트하기

2026.08.314분 읽기
📚 LLM 평가 (2/4)
  1. LLM 평가지표와 벤치마크 정리
  2. RAG 평가 - RAGAS로 검색과 생성 나눠 보기, DeepEval로 테스트하기
  3. LLM 모델 교체 평가 - 검색을 고정하고 모델만 비교하기
  4. LLM-as-a-Judge 실전 - judge 고르기, 채점기 검증, 과적합 없는 힐클라이밍

RAG는 왜 따로 평가해야 하나

llm-evaluation-metrics-and-benchmarks에서 본 일반적인 LLM 평가는 "답이 좋은가"만 봅니다. RAG(Retrieval-Augmented Generation) 파이프라인에서는 질문이 더 늘어납니다.

  • 검색된 문서가 질문과 관련이 있는가?
  • 모델이 검색된 문서에 충실하게 답했는가?
  • 답에 필요한 정보가 검색 결과에 빠짐없이 들어 있는가?

답이 틀렸을 때 검색이 문제인지 생성이 문제인지 모르면 고칠 방향도 정할 수 없습니다. 그래서 단계를 나눠서 평가합니다.

flowchart LR
    Q[질문] --> R[검색]
    R --> C[컨텍스트]
    C --> G[생성]
    G --> A[답변]
    R -.->|"Context Precision / Recall"| E1((검색 평가))
    G -.->|"Faithfulness / Answer Relevance"| E2((생성 평가))

RAGAS: 검색과 생성을 분리해서 본다

RAGAS(RAG Assessment)는 질문, 검색된 컨텍스트, 생성된 답변, 사람이 작성한 정답을 입력으로 받아 네 가지 핵심 지표를 계산합니다.

지표단계계산 방식점수가 낮으면
충실도(Faithfulness)생성답변을 개별 주장으로 분해하고, 각 주장이 컨텍스트로 뒷받침되는지 판정근거 없는 내용(환각)을 생성 중
답변 관련성(Answer Relevance)생성답변으로부터 역질문을 여러 개 만들고, 원래 질문과의 임베딩 코사인 유사도 계산의도를 못 잡았거나 불필요한 내용이 많음
컨텍스트 정밀도(Context Precision)검색유용한 문서가 검색 결과 상위에 있는지. 정답(golden set)이 필요랭킹 품질 문제
컨텍스트 재현율(Context Recall)검색정답 문장 중 컨텍스트로 뒷받침되는 비율필요한 문서를 놓치는 중

점수가 낮을 때 손볼 곳도 지표마다 다릅니다.

  • 답변 관련성이 낮으면: 프롬프트에서 질문의 초점을 명확히 지시하거나 답변 길이를 제한합니다.
  • 컨텍스트 정밀도가 낮으면: 관련 문서를 상위로 올리는 랭킹, 예를 들어 리랭커 도입을 검토합니다.
  • 컨텍스트 재현율이 낮으면: 청크 크기 조정, 검색 쿼리 확장, 색인 대상 문서 보강을 시도합니다.
운영할 때 기억할 것

지표 계산에 LLM 호출이 들어가기 때문에 API 비용이 발생하고, 평가 데이터셋도 충분히 커야 의미가 있습니다. 충실도와 답변 관련성은 결국 LLM이나 임베딩 모델이 판정하는 값이라, 판정 자체가 일관적인지도 확인해야 합니다(llm-as-a-judge-in-practice).

DeepEval: LLM 평가를 테스트 코드처럼

LLM 애플리케이션이 모두 RAG는 아닙니다. 챗봇, 요약, 분류, 코드 생성 같은 작업에도 환각·유해성·관련성은 측정해야 합니다. DeepEval은 이런 범용 평가를 위한 오픈소스 Python 프레임워크입니다.

  • pytest와 통합되도록 설계되어 있어, 기존 테스트 흐름에 그대로 얹을 수 있습니다.
  • 자연어 출력은 기대값과 단순 비교가 안 되기 때문에, 품질 속성을 0~1 점수로 바꾸는 메트릭 단위로 접근합니다.
  • 메트릭을 고르고 통과 기준(threshold) 을 정한 뒤 테스트를 실행합니다.

대표 내장 메트릭은 이렇습니다.

메트릭보는 것
GEval평가 기준을 자연어로 쓰면 평가용 LLM이 그 기준으로 채점 (LLM-as-a-Judge 기반)
Hallucination주어진 컨텍스트에 없는 내용을 만들었는지
Toxicity욕설·혐오·차별·폭력적 표현이 있는지
그 밖에답변 관련성, 충실도, 컨텍스트 정밀도·재현율, 편향, 요약 품질 등

어떻게 나눠 쓸까

두 도구를 정리하면서 든 생각입니다.

  • RAGAS는 검색·생성을 나눠 보는 진단 도구에 가깝습니다. "어디가 문제인가"를 찾을 때 씁니다.
  • DeepEval은 테스트 프레임워크에 가깝습니다. 메트릭과 threshold를 정해 두면 프롬프트나 모델을 바꿀 때마다 같은 기준으로 회귀 여부를 확인할 수 있습니다.
  • 둘 다 RAGAS의 Faithfulness와 DeepEval의 Hallucination처럼 비슷한 개념을 다루므로, 한 시스템에서 중복으로 돌리기보다 역할을 나눠 쓰는 편이 비용 면에서도 낫다고 생각합니다.

처음부터 모든 지표를 다 붙이기보다 검색과 생성을 분리해서 보는 것부터 시작하는 것을 추천합니다. 답이 틀린 이유가 검색인지 생성인지만 알아도 고칠 곳이 절반으로 줄어듭니다.

다음 글 llm-model-change-evaluation에서는 반대로 검색을 고정하고 LLM만 바꿨을 때의 차이를 재는 방법을 다룹니다.

참조