단일 턴 테스트 케이스

단일 턴 테스트 케이스

DeepEval에서 평가의 가장 기본 단위는 LLM 테스트 케이스(LLMTestCase)예요. 테스트 케이스가 어떤 LLM 상호작용을 담고, 메트릭은 그 상호작용을 기준에 맞춰 점수 내죠. 이 페이지에서는 단건(단일 턴) 상호작용을 다루는 LLMTestCase를 구성하는 각 파라미터를 하나씩 살펴볼게요.

출처: Single-Turn Test Case

LLM "상호작용"이란

LLMTestCase를 정의하고 싶은 지점이 바로 상호작용이에요. 예를 들어 RAG 전용 메트릭인 AnswerRelevancyMetric, FaithfulnessMetric, ContextualRelevancyMetric을 쓸 때는 상호작용 범위를 RAG 파이프라인 레벨로 잡는 게 가장 좋아요. 그러면 파이프라인 전체의 입출력을 하나의 테스트 케이스로 평가할 수 있죠.

LLM 테스트 케이스

메트릭마다 요구하는 LLMTestCase 파라미터 조합은 다르지만, inputactual_output은 예외 없이 필수예요. 평가에 쓰든 아니든 마찬가지고요.

한 가지 주의할 점이 있어요. 대화형 메트릭(conversational metrics)은 개별 LLM 응답이 아니라 대화 전체를 평가하는 메트릭이라서 LLMTestCase를 평가하는 데는 쓸 수 없어요. 다행히 deepeval의 대부분 메트릭은 대화형이 아니라서, 편리하게 LLMTestCase에 그대로 적용할 수 있어요.

Input

사용자가 애플리케이션에 넣는 입력값이에요. 테스트 파일의 예시를 보면 이렇게 구성해요.

import deepeval

from deepeval.metrics import AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
from deepeval import assert_test

def test_llm():
    test_case = LLMTestCase(input="...", actual_output="...")
    answer_relevancy_metric = AnswerRelevancyMetric()

Expected Output

expected_output선택 파라미터로, 이상적인 출력이 무엇일지 나타내요. 다만 이 파라미터가 필요한지 여부는 평가하려는 메트릭에 따라 달라져요. 기억할 점은, 테스트 케이스가 통과하려고 expected_outputactual_output과 정확히 일치해야 하는 건 아니라는 점이에요. deepeval은 비결정적(non-deterministic)인 LLM 출력을 평가하기 위해 다양한 방법을 쓰거든요.

Retrieval Context

retrieval_context선택 파라미터로, 런타임에 RAG 파이프라인이 검색한 결과를 담아요. 이 값을 제공하면 context를 기준 삼아 리트리버가 얼마나 잘 작동하는지 평가할 수 있어요.

Token cost

토큰 비용은 다음 두 경우에 유용해요.

  1. token_cost에 의존하는 커스텀 메트릭을 만들 때
  2. Confident AI에 token_cost를 로깅할 때
from deepeval.test_case import LLMTestCase

test_case = LLMTestCase(token_cost=1.32, ...)

Completion Time

완료 시간도 비슷하게 두 가지 상황에서 써요.

  1. completion_time에 의존하는 커스텀 메트릭을 만들 때
  2. Confident AI에 completion_time을 로깅할 때
from deepeval.test_case import LLMTestCase

test_case = LLMTestCase(completion_time=7.53, ...)

이미지 포함하기

LLMTestCase는 이미지도 담을 수 있어요. 멀티모달을 지원하는 메트릭, 이를테면 RAG 메트릭이나 멀티모달 전용 메트릭과 함께 쓰면 되죠. 케이스 안에 이미지가 있어야만 동작하는 메트릭도 따로 있어요.

테스트 케이스를 플래키로 표시하기

메트릭도 플래키로 표시할 수 있어요. 플래키 메트릭의 실패는 테스트 케이스의 통과/실패 상태를 절대 결정하지 않아요. 그래서 모든 평가에는 threshold를 가진 비플래키 메트릭이 적어도 하나 필요하죠.

테스트 케이스로 평가 실행하기

테스트 케이스를 평가에 활용하는 방식은 여러 가지예요. 그중 하나는 원샷 독립형(One-Off Standalone) 실행인데, 개별 메트릭을 단일 테스트 케이스에 실행해 디버깅하거나 커스텀 평가 파이프라인을 구성할 때 써요.

더 알아보기