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

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

This article is not yet available in English. Showing the original Korean version.

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

Nodelog는 모든 콘텐츠의 내용과 출처를 공개 전에 검토합니다. 환경(OS·버전)에 따라 결과가 달라질 수 있는 기술 정보는 공식 문서와 함께 확인하며, 검토 기준과 정정 원칙은 편집 정책에서 안내합니다. 오류를 발견하시면 이메일로 제보해 주세요 — 확인 후 신속히 정정합니다.

편집 책임 · Nodelog 기술 편집팀·발행 ·
관련 공식 문서pgvector 공식 저장소

Comments

Be the first to comment.