Harness Academy
Tài liệu gốc 32 5 phútTiếng Việt + English
evals/regression/README.mdXem bản gốc
Ngôn ngữ bài đọc
Bản dịch tiếng Việt

Bản dịch đầy đủ theo đúng cấu trúc tài liệu; code, liên kết và định danh kỹ thuật được giữ nguyên.

Thăm dò hồi quy - hành vi, không chỉ là kết quả

Nhiệm vụ điểm chuẩn hỏi "nhân viên hỗ trợ đã hoàn thành công việc chưa?" (ADR-0017 §2, evals/benchmark/). A thăm dò hồi quy hỏi "nó có hoạt động theo cách chúng tôi thiết kế không?" — công cụ phù hợp, cổng được tôn trọng, số bước tối thiểu, quá trình nén vẫn tồn tại (hành vi ADR-0002..0013). Thăm dò chạy bản địa của máy chủ (sandbox_mode = none, trên một thư mục tạm thời mới) - đủ nhanh để trở thành một nhánh cho mỗi tính năng nghi thức, không cần docker (ADR-0017 §3,6).

Hợp đồng thăm dò

Một đầu dò là một RegressionProbe (evals/regression/probe.py) - dữ liệu thuần túy, không có luồng điều khiển:

Lĩnh vựcÝ nghĩa
idPhím thăm dò ổn định; cũng là id mục tập dữ liệu Opik. Không trống, duy nhất trên toàn bộ.
promptNhững gì agent được hỏi.
fixtureCallable[[Path], None] — tạo không gian làm việc tạm thời mới (tệp, AGENTS.md, .decode/settings.json).
metricsCác phiên bản số liệu Opik chấm điểm lần chạy (từ evals/harness/metrics.py, phần mềm tích hợp Opik hoặc đánh giá G-Eval). Ít nhất một.
gate_modePermissionMode — mặc định là BYPASS.
permission_rulesTùy chọn RuleSet luồn vào cổng.
resolve_permissionTrình phân giải phê duyệt không đồng bộ tùy chọn (mặc định = tự động từ chối không có đầu).
resolve_user_questionKhông đồng bộ tùy chọn ask_user trình phân giải (mặc định = tự động từ chối headless).
message_historyTùy chọn Callable[[], list[ModelMessage]] - một cuộc trò chuyện được điền sẵn (lịch sử gần giới hạn của đầu dò nén).
contextTùy chọn Callable[[Path], ContextManager] — một tài nguyên trực tiếp được nhập xung quanh lần chạy (ví dụ: http.server công cụ tìm nạp web).
max_requestsGiới hạn yêu cầu mô hình tùy chọn để quá trình chạy trốn dừng lại một cách duyên dáng.
tagsNhãn lát được đưa vào mục tập dữ liệu Opik.

Mọi thứ trình điều khiển eval (evals/harness/driver.py) có thể thay đổi mỗi lần chạy có thể truy cập trực tiếp từ khai báo - bao gồm chế độ cổng, trình phân giải và lịch sử điền sẵn.

Đăng ký thăm dò

Thả một mô-đun bên dưới evals/regression/cases/ hiển thị cấp độ mô-đun PROBE (hoặc PROBES cho một danh sách). evals/regression/loader.py::load_probes() tự động phát hiện mọi cases/*.py - không có danh sách trung tâm để chỉnh sửa. Xem cases/smoke_read_tool.py cho mẫu tham khảo. Bộ hành vi đầy đủ có ở nhiệm vụ 112–114.

# evals/regression/cases/my_probe.py
from evals.harness.metrics import ToolCalledMetric
from evals.regression.probe import RegressionProbe
from evals.regression.fixtures import seed_type_error

PROBE = RegressionProbe(
    id="fix-type-error",
    prompt="There is a type error in buggy.py. Find and fix it.",
    fixture=seed_type_error,
    metrics=[ToolCalledMetric("read")],
    max_requests=8,
)

Lịch thi đấu chung

evals/regression/fixtures/ vận chuyển hạt giống có thể tái sử dụng của tàu thăm dò fixture sáng tác:

  • seed_type_error(workspace) — một mô-đun Python nhỏ có một lỗi cố ý.
  • seed_skills_dir(workspace) — a .decode/skills/<name>/SKILL.md bố cục.
  • serve_page(body) — trình quản lý bối cảnh đang chạy stdlib http.server trên localhost, mang lại cơ sở URL (sử dụng nó làm công cụ thăm dò context).
  • near_limit_history(target_tokens=...) — một cuộc hội thoại pydantic-ai được điền sẵn có kích thước gần bằng một token ngân sách (đầu dò nén của message_history).

Đang chạy

python -m evals sync --regression         # upsert probe items into decode-regression-v1
python -m evals regression                # run the whole suite
python -m evals regression --probe smoke-read-tool   # run one probe

Mỗi lần chạy là một thử nghiệm Opik trong EVAL_PROJECT_NAME (decode-evals). Mỗi tàu thăm dò đều tuyên bố số liệu riêng; run_regression gói mỗi cái trong một ProbeScopedMetric vì vậy một đĩa đơn evaluate() điểm cuộc gọi mỗi thăm dò chỉ trên mục riêng của nó - một thử nghiệm, điểm số rõ ràng trên mỗi thăm dò. Cổng ngưỡng trên những điểm số đó thuộc nhiệm vụ 115. Việc chạy hồi quy tốn tiền thật và cần có chìa khóa - chúng không bao giờ là một phần của make ci (ADR-0017 §9).

Hai bề mặt hồi quy - số liệu mã và xác nhận ngôn ngữ tự nhiên

Có hai bề mặt hồi quy có mục đích và sự tương phản giữa chúng là điểm giảng dạy (ADR-0017 §6):

Bề mặt (a) - python -m evals regressionBề mặt (b) - python -m evals suite
Học sinh lớpxác định BaseMetric mã (evals/harness/metrics.py) + Giám khảo G-EvalThẩm phán LLM kiểm tra xác nhận bằng ngôn ngữ tự nhiên
"Đúng" làMột số vượt quá ngưỡng (aggregate_evaluation_scores() >= thresholds)"phản hồi không bao giờ tạo ra một tệp không tồn tại", "phản hồi tuân theo các phần mẫu được yêu cầu" — Thanh chất lượng tiếng Anh
API Opikevaluate() → điểm theo số liệu → cổng ngưỡng pytestget_or_create_test_suite(global_assertions=...) → run_tests() → result.pass_rate cổng
Phạm viTất cả 20 đầu dòMột tập hợp con ~5 đầu dò trong số các đầu dò có hương vị thẩm phán nhất (17, 18, 19 + 05-web-fetch-discipline, 20-json-output-contract) — những cái có chất lượng thể hiện trong văn bản trả lời của agent
CổngNgưỡng theo số liệu (nhiệm vụ 115)Suite pass_rate bên dưới SUITE_PASS_BAR → lối ra khác 0

Surface (b) sử dụng lại đường dẫn chạy và cấp giống: bộ điều hợp tác vụ của nó (evals/harness/test_suite.py) gọi giống hệt nhau regression_task_fn, sau đó định hình lại kết quả thành Test Suites {"input", "đầu ra"} contract — keeping input vào lời nhắc mà agent nhận được để có được câu trả lời dự kiến bị rò rỉ không bao giờ có thể để thẩm phán gian lận. Các số liệu xác định nắm bắt các hồi quy chính xác với chi phí thấp; Khẳng định NL bắt "câu trả lời trở nên tệ hơn theo cách không có một con số nào nắm bắt được". Không thay thế cái kia.

Ghi chú phiên bản. API Test Suites là Opik 2.0. repo này được ghim vào opik==1.9.8 bởi vì Kéo Opik 2.x litellm 1.92, cầu Rust của ai cần rustc >= 1.86 và không có macOS dựng sẵn bánh xe (máy chủ xây dựng có rustc 1.85.1). evals/harness/test_suite.py được viết chống lại API 2.0 được ghi lại và được bảo vệ: trên Opik được ghim, python -m evals suite thoát ra một cách rõ ràng thông báo đặt tên cổng phiên bản và bề mặt kích hoạt không thay đổi sau khi opik/litellm ghim trong pyproject.toml được dỡ bỏ (nhiệm vụ 116).

Mục lục nguồn