Custom Metric

Dahun Yoo·2026년 8월 1일

Deep Eval

목록 보기
6/9
post-thumbnail

custom metric에 대해 기재해본다.

GEval

평가 기준 만들어보기

예를 들어, 어떠한 물건을 구매할 때, 환불 안내에 대해서 평가를 해야한다고 해본다. 환불 안내 완전성 을 판단해야할 때, 평가 기준은

  • 환불가능기간
  • 필요한 정보
  • 요청 방법

이 충분히 안내되어야한다고 가정한다.


# 평가 파라미터.
# 평가 시에는 실제 결과와 기대 결과를 비교하여 환불 안내 완전성을 판단해야하므로
# 파라미터를 정의한다.
EVALUATION_PARAMS: list[SingleTurnParams] = [
    SingleTurnParams.ACTUAL_OUTPUT,
    SingleTurnParams.EXPECTED_OUTPUT
]

# 테스트케이스에 대한 평가 기준을 정의한다.
REFUND_COMPLETENESS_CRITERIA = """
실제 출력이 예상 출력을 기반으로 완전한 환불 가이드를 제공하는지 평가합니다.
완전한 답변에는 다음이 포함되어야 합니다:
1. 환불 가능 기간,
2. 필요한 정보인 주문 번호,
3. 고객센터를 통한 요청 방법.
하나 이상의 필수 요소가 누락된 경우 점수를 줄입니다.
어조, 문장 길이, JSON 형식 또는 검색 품질을 평가하지마세요.
"""


def make_refund_completeness_metric() -> GEval:
    """환불 안내 완전성만 평가하는 학습용 custom metric을 만든다."""
    # 반드시 사용할 설정:
    # - name="Refund Completeness"
    # - criteria=REFUND_COMPLETENESS_CRITERIA
    # - evaluation_params=EVALUATION_PARAMS
    # - threshold=PROVISIONAL_THRESHOLD # 기존에 선언해놓은 threshold
    # - async_mode=False  # 네 사례를 순서대로 읽기 쉽게 실행
    return GEval(
        name="Refund Completeness",
        criteria=REFUND_COMPLETENESS_CRITERIA,
        evaluation_params=EVALUATION_PARAMS,
        threshold=PROVISIONAL_THRESHOLD,
        async_mode=False
    )

이렇게 만든 평가지표를 테스트케이스로 사용하려면 아래와 같이 한다.


def test_refund_completness():
	LLMTestCase(
    	  name="필수 절차를 모두 포함한 답변",
          input="지난주에 산 상품을 환불하려면 어떻게 해야 하나요?",
          actual_output=(
              "지난주 구매 건은 30일 이내이므로 주문 번호를 준비해 "
              "고객센터에 전액 환불을 요청할 수 있습니다."
          ),
          expected_output=(
              "구매 후 30일 이내에 주문 번호를 준비해 고객센터로 요청하면 "
              "전액 환불을 받을 수 있습니다."
          ),
      )

	assert_test(testcase, [make_refund_completeness_metric()])
profile
QA Engineer

0개의 댓글