Faithfulness, Context Precision, Answer Relevancy 자동 평가
⏱ 35분66 / 189
RAGAS 프레임워크
Faithfulness, Context Precision, Answer Relevancy 자동 평가
측정하지 않으면 개선할 수 없다
검색 품질 + 생성 품질 + 전체 품질 — 체계적 RAG 평가 프레임워크
🧪
RAGAS
SingleTurnSample · 클래스 메트릭 · Bedrock 연동
PART 6 · RAGAS
RAGAS
RAGAS(Retrieval Augmented Generation Assessment) — RAG 파이프라인을 자동 평가하는 오픈소스 프레임워크
📏
RAGAS
LLM-as-Judge 패턴을 프레임워크로 포장 — 메트릭 6종을 코드 몇 줄로 실행합니다
설치: pip install "ragas>=0.4,<0.5"
단위: SingleTurnSample → EvaluationDataset
메트릭: 클래스 인스턴스 — Faithfulness()
평가자: Bedrock LLM 연동 가능
0.4.x API 필수
0.1.x 함수형 import(from ragas.metrics import faithfulness)는 0.4.x에서 아직 동작하지만 DeprecationWarning과 함께 v1.0 제거 예고 상태입니다 — 새 코드는 클래스 기반으로 쓰고, 신규 정본은 ragas.metrics.collections입니다.
PART 6 · RAGAS
RAGAS 메트릭 6종
정답(reference) 준비 여부가 결정하는 사용 가능 메트릭
takeaway
정답 준비가 어려우면 Faithfulness + Response Relevancy로 시작하고, 정답을 확보한 뒤 Context Recall까지 확장합니다.
PART 6 · RAGAS
데이터셋 구성과 평가 실행
SingleTurnSample로 케이스 구성, 클래스 메트릭으로 평가 실행
python
from ragas import evaluate, EvaluationDataset, SingleTurnSample
from ragas.metrics import Faithfulness, ResponseRelevancy, ContextPrecision
# ① 평가 케이스 — 질문·답변·검색 컨텍스트·정답 4필드를 하나로
sample = SingleTurnSample(
user_input="예약금 환불 규정이 어떻게 되나요?",
response="예약금은 이용일 3일 전까지 취소하면 전액 환불이 가능합니다.",
retrieved_contexts=["예약금은 이용일 3일 전까지 취소하면 전액 환불됩니다."],
reference="예약금은 이용일 3일 전까지 취소하시면 전액 환불이 가능합니다.",
)
# ② 샘플 모음 → 평가 데이터셋
dataset = EvaluationDataset(samples=[sample])
# ③ 평가 실행 — 메트릭은 클래스 인스턴스로 전달 (0.4.x)
results = evaluate(dataset=dataset,
metrics=[Faithfulness(), ResponseRelevancy(), ContextPrecision()])
print(results.to_pandas()) # ④ 샘플별 점수 DataFrame
SingleTurnSample — 평가 1건. user_input·response·retrieved_contexts·reference(선택)
EvaluationDataset — 샘플 모음. 카테고리별 5개씩 최소 30건 권장
Faithfulness() 등 메트릭 — 클래스 인스턴스로 전달. 0.1.x 소문자 import는 아직 동작하나 v1.0 제거 예고(경고 발생)
to_pandas() — 샘플별 점수 DataFrame. 점수 낮은 질문부터 원인 분석
PART 6 · RAGAS
RAGAS + Bedrock 연동
Bedrock의 Claude를 평가자로 — 외부 API 없이 AWS 환경에서 완결
핵심 포인트
ChatBedrockConverse
langchain-aws의 Bedrock 채팅 모델 — RAGAS 평가자로 사용
BedrockEmbeddings
Response Relevancy의 역질문 유사도 계산에 필요
llm= / embeddings=
LangChain 모델을 넘기면 RAGAS가 내부에서 자동 래핑
모델 분리
평가 모델은 생성 모델과 다르게 — 자기 평가 편향 방지
코드
python
from langchain_aws import ChatBedrockConverse, BedrockEmbeddings
from ragas import evaluate
from ragas.metrics import Faithfulness, ResponseRelevancy
# 평가자 LLM — Bedrock Claude를 채점자로 지정
evaluator_llm = ChatBedrockConverse(
model_id="us.anthropic.claude-sonnet-4-6",
region_name="us-east-1", temperature=0,
)
# 임베딩 — Response Relevancy 계산용 Titan 임베딩
evaluator_embeddings = BedrockEmbeddings(model_id="amazon.titan-embed-text-v2:0")
# evaluate에 전달 — LangChain 모델은 내부에서 자동 래핑
results = evaluate(dataset=dataset,
metrics=[Faithfulness(), ResponseRelevancy()],
llm=evaluator_llm, embeddings=evaluator_embeddings)
PART 6 · RAGAS
지표별 실행 코드
evaluate 한 벌은 그대로 — 축에 맞는 메트릭 인스턴스만 바꿔 끼운다
검색 축 — 정답 기반 3종생성 축 — Faithfulness · Noise전체 축 — Response Relevancy
takeaway
여섯 메트릭 전부 evaluate 한 벌에 인스턴스만 교체입니다 — 정답 없이 되는 Faithfulness · Response Relevancy로 시작해, 정답 확보 후 검색 축과 Noise Sensitivity로 확장합니다.