dspy.Evaluate

dspy.Evaluate

dspy.Evaluate(*, devset: list[dspy.Example], metric: Callable | None = None, num_threads: int | None = None, display_progress: bool = False, display_table: bool | int = False, max_errors: int | None = None, provide_traceback: bool | None = None, failure_score: float = 0.0, save_as_csv: str | None = None, save_as_json: str | None = None, **kwargs)

DSPy의 평가 클래스예요.

이 클래스는 DSPy 프로그램의 성능을 평가하는 데 써요. 사용하려면 평가 데이터셋메트릭 함수를 제공해야 해요. 주어진 데이터셋에서 병렬 평가를 지원해요.

이름 타입 설명 기본값
devset list[Example] 평가 데이터셋 필수
metric Callable 평가에 쓸 메트릭 함수 None
num_threads Optional[int] 병렬 평가에 쓸 스레드 수 None
display_progress bool 평가 중 진행 상황을 표시할지 False
display_table Union[bool, int] 평가 결과를 표로 표시할지. 숫자를 넘기면 그 수로 잘라서 표시 False
max_errors Optional[int] 평가를 멈추기 전 허용할 최대 오류 수. None이면 dspy.settings.max_errors 상속 None
provide_traceback Optional[bool] 평가 중 traceback 정보 제공 여부 None
failure_score float 예외로 평가가 실패할 때 쓸 기본 점수 0.0
save_as_csv Optional[str] csv 저장 파일명 None
save_as_json Optional[str] json 저장 파일명 None

소스: dspy/evaluate/evaluate.py

설계 포인트 두 개를 짚을게요. 첫째, return_outputs kwarg는 더 이상 지원되지 않아요. 넘기면 ValueError가 나고, 결과는 항상 EvaluationResult 객체의 results 필드에 담겨요. 둘째, dspy.context(lm=...) 블록으로 Evaluate를 감싸면 그 설정이 평가 워커에도 존중돼요.

메서드:

__call__(program: dspy.Module, metric: Callable | None = None, devset: list[dspy.Example] | None = None, num_threads: int | None = None, display_progress: bool | None = None, display_table: bool | int | None = None, callback_metadata: dict[str, Any] | None = None, save_as_csv: str | None = None, save_as_json: str | None = None) -> EvaluationResult

이름 타입 설명 기본값
program Module 평가할 DSPy 프로그램 필수
metric Callable 평가 메트릭 함수. 안 넘기면 self.metric 사용 None
devset list[Example] 평가 데이터셋. 안 넘기면 self.devset 사용 None
num_threads Optional[int] 병렬 평가 스레드 수. 안 넘기면 self.num_threads 사용 None
display_progress bool 진행 표시 여부. 안 넘기면 self.display_progress 사용 None
display_table Union[bool, int] 결과 표시 여부. 숫자면 그 수로 잘라 표시 None
callback_metadata dict 평가 콜백 핸들러에 쓸 메타데이터 None

반환:

타입 설명
EvaluationResult 결과는 dspy.EvaluationResult 객체로 돌아오며 다음 속성을 담음
EvaluationResult score: 전체 성능을 나타내는 float 백분율 점수(예: 67.30)
EvaluationResult results: devset의 각 예시에 대한 (example, prediction, score) 튜플 목록

Evaluated의 내부 동작을 간단히 보면 — (program, example) 쌍을 ParallelExecutor에 제출하고, 각 워커가 program(**example.inputs())를 실행한 뒤 metric(example, prediction)을 호출해요. 집계는 score가 돼요: boolean 반환은 True의 비율, float 반환은 평균, Prediction 반환은 score의 평균. 예시별 결과는 .results(example, prediction, score) 트리플로 담겨요. devset이 비어 있으면 ValueError가 나요.

메트릭이 예외를 던지면 그 예시는 failure_score(기본 0.0)로 대체되고 평가는 계속돼요. max_errors는 하네스가 멈추기 전 견딜 실패 수를 제한해요.

출처: 공식문서

더 알아보기 (Learn more)