시작하기
Python API
이 페이지의 영어판이 번역 이후 변경되었습니다. 최신 페이지는 영어판입니다. 영어로 읽기
CLI가 하는 모든 일은 라이브러리도 합니다. 평가가 설정 파일 옆이 아니라 스크립트, 노트북, 테스트 스위트 안에 있어야 할 때 사용하십시오.
from oloproof import evaluate, system, current_case
from oloproof.evaluators import ExactMatch, Contains, JsonSchema, Regex, RubricJudge, evaluatoroloproof_core 아래의 모든 것은 엔진 내부 구현이며 이 인터페이스에 속하지 않습니다.
시스템은 케이스가 아니라 케이스의 입력을 받습니다
이것이 가장 먼저 제대로 알아 둘 가치가 있는 한 가지입니다. 잘못 알면 조용히 실패하기 때문입니다.
@system(name="support-bot", version="1")
def answer(case):
return {"label": "refund" if "refund" in case["question"].lower() else "other"}데이터셋 행은 다음과 같습니다.
{"id":"refund_00","input":{"question":"Can I get a refund? #0"},"expected":{"label":"refund"}}함수는 input 객체를 받으므로 case["question"]이 질문이며, case["expected"]는 없습니다. 함수가 반환하는 것은 평가기가 읽는 출력이므로, ExactMatch(field="label")은 반환된 label을 케이스의 기대 label과 비교합니다.
실행하기
result = evaluate(
system=answer,
dataset="data/example.jsonl",
evaluators=[ExactMatch(criterion="exact_label", field="label")],
)
for metric in result.metrics:
print(metric.metric, metric.estimate, metric.interval, metric.n_observed, metric.n_missing)exact_label 1.0 lower=0.8842966917779722 upper=1.0 30 0케이스 30개가 모두 정답인데도 구간은 여전히 88.4%까지 내려갑니다. 추정치가 무엇이라고 하든, 케이스 30개로는 그 이상을 입증할 수 없습니다.
실패한 케이스 읽기
시스템이 예외를 발생시키면 그 케이스는 틀린 것이 아니라 누락된 것이며, 지표는 이를 보고합니다.
exact_label None lower=0.0 upper=1.0 0 30추정치가 None이고 구간이 전체 범위라면 아무것도 관측되지 않았다는 뜻입니다. 추정치를 신뢰하기 전에 n_missing을 확인하십시오. 모든 케이스에서 예외를 발생시킨 시스템도 구조적으로는 문제없는 결과 객체를 만들어 내며, 그것이 비어 있다는 사실을 알려 주는 것은 집계입니다.
이것은 분모 계약이 실패한 것이 아니라 제 역할을 하고 있는 것입니다. 오류가 난 케이스는 버려지지 않고 범위로 반영됩니다. 하지만 여러분 대신 예외를 발생시켜 주는 것은 없으므로, 확인은 여러분의 몫입니다.
직접 평가기 작성하기
@evaluator는 함수를 평가기로 바꿉니다. 함수는 케이스라는 인수 하나를 받고, 거기서 필요한 것을 읽습니다. case.output은 시스템이 반환한 것이고 case.expected는 행의 expected 객체입니다.
from oloproof.evaluators import evaluator
@evaluator(criterion="known_label", reads=("output",))
def known_label(case):
return case.output["label"] in {"refund", "other"}
result = evaluate(system=answer, dataset="data/example.jsonl", evaluators=[known_label])known_label 1.0 lower=0.8842966917779722 upper=1.0 30 0reads는 출처 기록을 위해 케이스의 어느 부분을 읽는지 선언하며, 기본값은 ("output", "expected")입니다. 평가기는 True 또는 False를 반환하거나, value_type="score"와 점수가 속하는 score_range를 선언한 경우 점수를 반환합니다. 평가기의 버전에는 그것을 정의한 파일의 다이제스트가 포함되므로, 파일을 편집하면 캐시된 판정이 무효화됩니다.
def f(output, expected)로 작성한 함수는 모든 케이스에서 실패하는 대신, 선언 시점에 동작하는 형식을 안내하며 거부됩니다.
정책 적용하기
evaluate는 정책을 받아 실행을 결정하며, CLI가 release.yaml에서 읽는 것과 같은 규칙을 사용합니다.
result = evaluate(
system=answer,
dataset="data/example.jsonl",
evaluators=[ExactMatch(criterion="exact_label", field="label")],
policy="release.yaml",
)
print(result.gate)정책이 없으면 result.gate는 None입니다. 미달할 규칙이 없으므로 결정할 것도 없습니다.
다음 단계
- 스위트 작성하기는 같은 평가기를 설정으로 다룹니다.
- 시스템이 한 일 기록하기는 current_case()와 평가기에서 아티팩트를 읽는 방법을 다룹니다.
- 후보를 기준선과 비교하기는 구간이 존재하는 이유인 워크플로를 다룹니다.