/AI & 자동화/RAG 평가 프레임워크 — RAGAS로 성능 측정하기
AI & 자동화RAGRAGAS

RAG 평가 프레임워크 — RAGAS로 성능 측정하기

RAGAS 프레임워크로 RAG 파이프라인을 자동 평가하는 방법을 설명합니다. Faithfulness, Answer Relevancy, Context Precision, Context Recall 4가지 지표의 의미와 개선 방향, CI 통합까지 다룹니다.

RAG 평가 프레임워크 — RAGAS로 성능 측정하기

RAG 평가 프레임워크 — RAGAS로 성능 측정하기

RAG 파이프라인을 구축했다면 다음 질문이 생깁니다. "얼마나 잘 동작하고 있는가?" 인간이 직접 평가하는 건 느리고 비쌉니다. **RAGAS(RAG Assessment)**는 LLM을 심판으로 활용해 RAG 파이프라인을 자동으로 평가하는 프레임워크입니다.

RAGAS의 4가지 핵심 지표

1. Faithfulness (충실성)

생성된 답변이 검색된 컨텍스트에 얼마나 충실한가를 측정합니다. 컨텍스트에 없는 내용을 지어내면 점수가 낮아집니다.

CODE
점수 = (컨텍스트로 뒷받침되는 주장 수) / (답변의 총 주장 수)

값이 낮으면 모델이 환각(Hallucination)을 일으키고 있다는 신호입니다.

2. Answer Relevancy (답변 관련성)

생성된 답변이 질문에 얼마나 적절한가를 측정합니다. 관련 없는 내용이 많으면 점수가 낮습니다.

CODE
점수 = avg(cosine_similarity(질문, 역생성된 질문들))

RAGAS는 답변에서 역으로 질문을 여러 개 생성하고, 원래 질문과의 유사도를 계산합니다.

3. Context Precision (컨텍스트 정밀도)

검색된 컨텍스트 중 실제로 유용한 청크의 비율입니다. 관련 없는 문서가 많이 검색될수록 낮아집니다.

4. Context Recall (컨텍스트 재현율)

정답을 생성하는 데 필요한 정보가 검색된 컨텍스트에 얼마나 포함되어 있는가입니다. 정답 데이터셋이 필요합니다.

실전 코드

Python
from ragas import evaluate

from ragas.metrics import (

    faithfulness,

    answer_relevancy,

    context_precision,

    context_recall,

)

from datasets import Dataset



# 평가 데이터셋 구성

eval_data = {

    "question": ["RAG와 파인튜닝의 차이는?", "벡터 DB란?"],

    "answer": ["RAG는 검색 기반...", "벡터 DB는..."],

    "contexts": [

        ["RAG는 Retrieval-Augmented...", "파인튜닝은 모델 가중치를..."],

        ["벡터 데이터베이스는 고차원 벡터를..."],

    ],

    "ground_truth": ["RAG는 지식을 외부에서 가져오고...", "벡터 DB는 임베딩을 저장하는..."],

}



dataset = Dataset.from_dict(eval_data)



result = evaluate(

    dataset=dataset,

    metrics=[faithfulness, answer_relevancy, context_precision, context_recall],

)



print(result)

# {'faithfulness': 0.89, 'answer_relevancy': 0.92, 'context_precision': 0.85, 'context_recall': 0.78}

점수 해석과 개선 방향

낮은 지표원인해결책
Faithfulness환각 발생프롬프트에 "컨텍스트만 참고" 강조, temperature 낮춤
Answer Relevancy두루뭉술한 답변프롬프트 구체화, 출력 형식 제한
Context Precision노이즈 검색top_k 줄이기, 유사도 임계값 높이기
Context Recall관련 문서 누락청킹 전략 변경, 하이브리드 검색 도입

평가 데이터셋을 자동으로 생성하기

레이블된 Q&A 데이터가 없어도 RAGAS로 합성 데이터셋을 만들 수 있습니다.

Python
from ragas.testset.generator import TestsetGenerator

from ragas.testset.evolutions import simple, reasoning, multi_context

from langchain_openai import ChatOpenAI, OpenAIEmbeddings



generator = TestsetGenerator.from_langchain(

    generator_llm=ChatOpenAI(model="gpt-4o"),

    critic_llm=ChatOpenAI(model="gpt-4o"),

    embeddings=OpenAIEmbeddings(),

)



testset = generator.generate_with_langchain_docs(

    documents=docs,

    test_size=50,

    distributions={simple: 0.5, reasoning: 0.3, multi_context: 0.2},

)

CI에 평가 통합하기

RAG 파이프라인을 변경할 때마다 자동으로 평가가 돌아가야 합니다.

YAML
# .github/workflows/rag-eval.yml

- name: RAG Evaluation

  run: python eval/run_ragas.py

- name: Check Thresholds

  run: |

    python -c "

    import json

    r = json.load(open('eval/results.json'))

    assert r['faithfulness'] > 0.85, 'Faithfulness 기준 미달'

    assert r['context_recall'] > 0.75, 'Context Recall 기준 미달'

    "

점수가 기준치 아래로 떨어지면 PR을 블로킹할 수 있습니다.


이것으로 RAG 완전 정복 시리즈를 마칩니다. 개념 이해(EP 01) → 벡터 DB 선택(EP 02) → 청킹 전략(EP 03) → 평가(EP 04) 순서로 따라왔다면, 프로덕션 수준의 RAG 파이프라인을 설계하고 측정할 준비가 된 겁니다.

✦ ✦ ✦
편집 검토 · Editorial Review

이 글은 AI 에이전트가 자료 조사와 1차 초안 작성을 담당하고, 사람 편집자가 사실관계·출처·톤과 맥락을 검토한 뒤 발행했습니다. 환경(OS·버전)에 따라 결과가 다를 수 있으니 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요 — 확인 후 신속히 정정합니다.

초안 · AI (Content Director)·검토 · Nodelog 편집자·발행 ·
관련 공식 문서pgvector 공식 저장소

댓글

첫 번째 댓글을 남겨보세요.