타사 통합
타사 통합 (Third-Party Integrations)
Pydantic Evals는 특정 메트릭 프레임워크에 강한 의존성을 가지지 않아요. 팀이 이미 Ragas, DeepEval, 또는 다른 채점 라이브러리를 사용 중이라면, Evaluator 기본 클래스를 통해 그 상위 메트릭을 감싸서 어떤 Pydantic Evals 데이터셋에서든 실행하기 쉬워요. 이 페이지는 흔한 것들에 대한 실제 예시를 보여줘요.
출처: 문서
본문
가능하면 내장 평가자를 쓰는 게 좋아요
루브릭 기반 LLMJudge(바로 쓸 수 있는 루브릭은 표준 품질 메트릭 페이지 참고)나 커스텀 평가자가 여러분의 사용 사례를 커버한다면, 보통 그게 더 단순해요 -- 추가 의존성이 전혀 없고 점수가 보고서에 깔끔하게 들어가니까요. 아래 통합들은 게시된 벤치마크와의 재현성, 기존 평가 스위트와의 동등성, 또는 네이티브로 노출하지 않는 기능 등 정확한 상위 구현이 특별히 필요할 때 사용해요. 외부 평가자와 내장 평가자를 한 데이터셋에서 섞어 쓸 수 있어요.
패턴
각 프레임워크 통합은 같은 패턴을 따라요:
Evaluator를 서브클래싱해요.ctx.inputs,ctx.output,ctx.expected_output와 메타데이터를 상위 메트릭이 기대하는 형태로 변환해요.float점수,bool판정,EvaluationReason, 또는 이들의dict를 반환해요.
이 페이지의 나머지는 구체적인 어댑터를 보여줘요. 의도적으로 간결하게 만들었으니, 팀이 필요로 하는 설정(모델 선택, 임계값, 케이스별 토글)을 추가해 확장해요.
Ragas
pip install ragas로 설치해요 (pydantic-evals에 포함되지 않아요).
이 어댑터는 단일 턴 샘플을 위해 ragas.metrics.Faithfulness를 감싸요. 각 케이스는 입력이나 메타데이터의 일부로 검색된 컨텍스트를 제공할 것으로 기대돼요.
from dataclasses import dataclass
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import Faithfulness
from pydantic_evals.evaluators import EvaluationReason, Evaluator, EvaluatorContext
@dataclass
class RagasFaithfulness(Evaluator):
"""Wrap `ragas.metrics.Faithfulness` as a Pydantic Evals evaluator."""
context_field: str = 'context'
async def evaluate(self, ctx: EvaluatorContext) -> EvaluationReason:
metadata = ctx.metadata or {}
retrieved_contexts = metadata.get(self.context_field, [])
if isinstance(retrieved_contexts, str):
retrieved_contexts = [retrieved_contexts]
sample = SingleTurnSample(
user_input=str(ctx.inputs),
response=str(ctx.output),
retrieved_contexts=retrieved_contexts,
)
metric = Faithfulness()
score = await metric.single_turn_ascore(sample)
return EvaluationReason(value=float(score), reason=f'ragas.Faithfulness = {score:.3f}')
사용법은 내장 평가자와 똑같아요:
from pydantic_evals import Case, Dataset
dataset = Dataset(
name='rag_eval',
cases=[
Case(
inputs='What is the capital of France?',
metadata={'context': ['Paris is the capital of France.']},
),
],
evaluators=[RagasFaithfulness()],
)
같은 패턴이 ragas.metrics.answer_relevancy, context_precision 및 다른 채점 메트릭에도 동작해요. 메트릭 클래스와 (필요하다면) 샘플 필드를 바꾸기만 하면 돼요.
DeepEval
pip install deepeval로 설치해요 (pydantic-evals에 포함되지 않아요).
이 어댑터는 DeepEval의 GEval 메트릭을 감싸서 LLMTestCase에 대해 기준(criterion)을 채점해요. DeepEval의 measure는 동기식이라 평가자도 동기식이에요.
from dataclasses import dataclass
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCase, LLMTestCaseParams
from pydantic_evals.evaluators import EvaluationReason, Evaluator, EvaluatorContext
@dataclass
class DeepEvalGEval(Evaluator):
"""Wrap `deepeval.metrics.GEval` as a Pydantic Evals evaluator."""
metric_name: str
criteria: str
threshold: float = 0.5
def evaluate(self, ctx: EvaluatorContext) -> dict[str, float | bool | EvaluationReason]:
test_case = LLMTestCase(
input=str(ctx.inputs),
actual_output=str(ctx.output),
expected_output=None if ctx.expected_output is None else str(ctx.expected_output),
)
metric = GEval(
name=self.metric_name,
criteria=self.criteria,
evaluation_params=[LLMTestCaseParams.INPUT, LLMTestCaseParams.ACTUAL_OUTPUT],
threshold=self.threshold,
)
metric.measure(test_case)
return {
f'{self.metric_name}_score': EvaluationReason(value=float(metric.score), reason=metric.reason or ''),
f'{self.metric_name}_pass': bool(metric.success),
}
같은 래퍼가 DeepEval의 FaithfulnessMetric, AnswerRelevancyMetric, HallucinationMetric 등에서도 동작해요. 메트릭 클래스를 바꾸고 관련 LLMTestCase 필드(예: faithfulness의 retrieval_context)를 채우면 돼요.
의존성에 대한 참고
ragas와deepeval은 선택적 의존성이에요 --pydantic-evals와 함께 설치되지 않고 어떤 의존성 그룹에도 속하지 않아요. 이 통합들을 사용하는 프로젝트에서만 설치해요.- 두 라이브러리 모두 자체 LLM 호출을 하므로, 이 평가자들이 포함된 데이터셋을 실행할 때는 추가 API 사용량이 있을 수 있다는 점에 대비해요.
더 알아보기 (Learn more)
- Pydantic Evals 문서: 타사 통합