evals/regression/README.mdXem bản gốc 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 |
|---|---|
id | Phí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ộ. |
prompt | Những gì agent được hỏi. |
fixture | Callable[[Path], None] — tạo không gian làm việc tạm thời mới (tệp, AGENTS.md, .decode/settings.json). |
metrics | Cá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_mode | PermissionMode — mặc định là BYPASS. |
permission_rules | Tùy chọn RuleSet luồn vào cổng. |
resolve_permission | Trì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_question | Khô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_history | Tù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). |
context | Tù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_requests | Giớ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. |
tags | Nhã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.mdbố cục.serve_page(body)— trình quản lý bối cảnh đang chạy stdlibhttp.servertrê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ủamessage_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 regression | Bề mặt (b) - python -m evals suite | |
|---|---|---|
| Học sinh lớp | xác định BaseMetric mã (evals/harness/metrics.py) + Giám khảo G-Eval | Thẩ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 Opik | evaluate() → điểm theo số liệu → cổng ngưỡng pytest | get_or_create_test_suite(global_assertions=...) → run_tests() → result.pass_rate cổng |
| Phạm vi | Tấ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ổng | Ngưỡ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.8bởi vì Kéo Opik 2.xlitellm 1.92, cầu Rust của ai cầnrustc >= 1.86và 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 suitethoá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 khiopik/litellmghim trongpyproject.tomlđược dỡ bỏ (nhiệm vụ 116).