Skip to content

Bắt đầu

API Python

Phiên bản tiếng Anh của trang này đã thay đổi kể từ khi được dịch. Trang tiếng Anh là bản hiện hành. Đọc bằng tiếng Anh

Mọi việc CLI làm được, thư viện cũng làm được. Hãy dùng nó khi việc đánh giá thuộc về bên trong một script, một notebook hoặc một bộ kiểm thử phần mềm thay vì nằm cạnh một tệp cấu hình.

from oloproof import evaluate, system, current_case
from oloproof.evaluators import ExactMatch, Contains, JsonSchema, Regex, RubricJudge, evaluator

Mọi thứ nằm dưới oloproof_core đều là phần nội bộ của engine và không thuộc bề mặt này.

Một hệ thống nhận đầu vào của trường hợp, không phải bản thân trường hợp

Đây là điều duy nhất đáng làm đúng ngay từ đầu, vì làm sai nó sẽ thất bại một cách âm thầm.

@system(name="support-bot", version="1")
def answer(case):
    return {"label": "refund" if "refund" in case["question"].lower() else "other"}

Một hàng trong tập dữ liệu trông như sau:

{"id":"refund_00","input":{"question":"Can I get a refund? #0"},"expected":{"label":"refund"}}

Hàm nhận đối tượng input, nên case["question"] là câu hỏi và không có case["expected"]. Những gì hàm trả về là đầu ra mà một bộ đánh giá đọc, nên ExactMatch(field="label") so sánh label được trả về với label mong đợi của trường hợp.

Chạy một lần

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

Ba mươi trường hợp, tất cả đều đúng, và khoảng vẫn kéo xuống tới 88,4%. Ba mươi trường hợp không thể chứng minh nhiều hơn thế, bất kể ước lượng nói gì.

Đọc một trường hợp đã thất bại

Nếu hệ thống ném ra ngoại lệ, trường hợp đó bị thiếu chứ không phải sai, và chỉ số báo cáo điều đó:

exact_label None lower=0.0 upper=1.0 0 30

Một ước lượng None với khoảng bao trùm toàn bộ miền giá trị có nghĩa là không có gì được quan sát. Hãy kiểm tra n_missing trước khi tin vào một ước lượng: một hệ thống mà mọi trường hợp đều ném ngoại lệ vẫn tạo ra một đối tượng kết quả hoàn toàn hợp lệ về cấu trúc, và chính số đếm mới cho bạn biết nó trống rỗng.

Đó là hợp đồng mẫu số đang làm đúng việc của nó chứ không phải một sự thất bại của nó — một trường hợp gặp lỗi được tính vào giới hạn của khoảng, không bị loại bỏ — nhưng không có gì ném ngoại lệ thay cho bạn, nên việc kiểm tra là của bạn.

Viết bộ đánh giá của riêng bạn

@evaluator biến một hàm thành một bộ đánh giá. Hàm nhận một đối số, là trường hợp, và đọc những gì nó cần từ đó: case.output là những gì hệ thống đã trả về và case.expected là đối tượng expected của hàng.

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 0

reads khai báo những phần nào của trường hợp mà nó đọc, phục vụ việc truy xuất nguồn gốc; mặc định là ("output", "expected"). Nó trả về True hoặc False, hoặc một điểm số nếu nó khai báo value_type="score" và score_range mà các điểm số của nó nằm trong đó. Phiên bản của nó bao gồm một digest của tệp định nghĩa nó, nên chỉnh sửa nó sẽ làm mất hiệu lực các phán quyết đã lưu trong bộ nhớ đệm của nó.

Một hàm được viết dưới dạng def f(output, expected) sẽ bị từ chối ngay khi được khai báo, kèm theo dạng viết đúng, thay vì thất bại ở mọi trường hợp.

Áp dụng một chính sách

evaluate nhận một chính sách và quyết định lần chạy, theo đúng các quy tắc mà CLI đọc từ release.yaml:

result = evaluate(
    system=answer,
    dataset="data/example.jsonl",
    evaluators=[ExactMatch(criterion="exact_label", field="label")],
    policy="release.yaml",
)
print(result.gate)

Không có chính sách, result.gate là None: không có quy tắc nào để không đạt, nên không có gì để quyết định.

Tiếp theo

artifact trong một bộ đánh giá.

để phục vụ.