custom metric에 대해 기재해본다.
예를 들어, 어떠한 물건을 구매할 때, 환불 안내에 대해서 평가를 해야한다고 해본다. 환불 안내 완전성 을 판단해야할 때, 평가 기준은
이 충분히 안내되어야한다고 가정한다.
# 평가 파라미터.
# 평가 시에는 실제 결과와 기대 결과를 비교하여 환불 안내 완전성을 판단해야하므로
# 파라미터를 정의한다.
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()])