چیتشیت
توسعهی ایجنت مبتنی بر ارزیابی (Eval-Driven)
Eval-Driven Agent Development
اجرای موردهای ارزیابی، گیتگذاری mergeها، بازبینی با شیوهنامهی نمرهدهی، و گیتگذاری تغییرات پرامپت و گزارش. با کتابخانهی استاندارد Python.
فهرست مطالب
از سازنده تا تأیید نهایی
معماریسه لایهی ارزیابی
مقایسه| عامل | بنچمارکهای ایستا | آفلاین سفارشی | آنلاین |
|---|---|---|---|
| نمونهها | SWE-bench Verified، GAIA، BFCL V4 | مدل زبانی در نقش داور، اجرا، مسیر کامل اجرا | بازپخشهای نشست، هشدارهای گاردریل |
| کاربرد | مقایسهی میانمدلی | ساختار محصول شما | رفتار در محیط عملیاتی |
| معیارها | توانمندی عمومی | پچهای مناسب محصول شما | هزینه و تاخیر به ازای هر گام |
| مواردی که باید مراقب بود | نرخ آلودگی، 32.67٪ نشت داده | داورها هم توهم میزنند | اتصال هر شکست به یک مورد جدید |
حلقهی ارزیاب-بهینهساز
گامبهگام- پیشنهاددهنده
case.proposer(feedback)یک کاندید ارائه میدهد. - داور
case.judge(candidate)وضعیت ok و دلیل را برمیگرداند. - اصلاحدلیل به بازخورد بعدی تبدیل میشود.
- توقفپس از
max_roundsمورد شکست میخورد. - گیت CIبخش
ci_gateپسرفت فراتر از آستانه را مسدود میکند.
اجرای درسها و پروژهها
دستورها| دستور | کارکرد |
|---|---|
python3 code/main.py | اجرای دمو درس. درسهای 38 و 39 گزارشهای JSON مینویسند |
VERIFY_DEMO_MODE=1 python3 code/main.py --strict | دموی گیت با سکرت دمو. هر warn تبدیل به block میشود |
python3 code/main.py --floor <value> | دموی گیت با حداقل پوشش متغیر |
python3 scripts/project_test.py <project> --init learning-artifacts/<project> | ساخت میز کار یادگیرنده |
python3 scripts/project_test.py <project> --stage <n> --path learning-artifacts/<project> | تست یک مرحله از میز کار شما |
python3 scripts/project_test.py <project> --all --solution --strict | بررسی راهحل مرجع |
python3 <dir>/cli.py <cases> <baseline> <candidate> --out <json> --markdown <md> | بررسی diff پرامپت. افزودن --allow-configuration-change برای تغییر مدل |
python3 <dir>/cli.py <claims> --out <json> --html <html> | ممیزی گزارش. افزودن --research-payload برای بار داده گزارش |
گیتگذاری یک وظیفه
کدpython
art = Artifacts(task_id="T-001",
acceptance_commands=accept, # خروجی صفر یعنی اتمام کار
feedback=[{"command": accept[0], "exit_code": 0}],
scope_report={"forbidden_writes": [], "off_scope_writes": []},
rule_report=[{"slug": "done/tests-pass", "passed": True}],
coverage_report={"current": 0.84, "previous": 0.85},
head_commit="a1b2c3d")
report = verify(art, strict=False, coverage_floor=0.80)
report.passed # مقدار False به ازای هر یافتهی مسدودکننده (block)
record_override(task_id, finding_code, reason, user_id, head_commit)
verify_signature(entry) # بررسی HMAC برای override
شیوهنامهی نمرهدهی بازبین
مفهومها- تناسب با مسئله
- آیا وظیفه همانطور که بیان شده حل شده؟
- انضباط دامنه
- ویرایشها در چارچوب قرارداد هستند؟
- فرضیات
- مکتوب شدهاند؟
- کیفیت اعتبارسنجی
- پذیرش، دستیابی به هدف را اثبات میکند؟
- آمادگی تحویل وظیفه
- نشست بعدی میتواند کار را ادامه دهد؟
- امتیازها
- هر کدام 0 تا 2، مجموع از 10.
- حکم ارزیابی
- 7 یا بالاتر
pass، در غیر این صورتsoft_fail. hard_fail- مجموع کمتر از 5 یا وجود هر امتیاز 0.
مقادیر پیشفرض و اعداد
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
max_rounds | 3 | دورهای ارزیاب-بهینهساز به ازای هر مورد |
regression_threshold | 0.05 | ci_gate بالاتر از این مقدار را مسدود میکند |
COVERAGE_FLOOR_DEFAULT | 0.80 | کمتر از این مقدار مسدودکننده (block) است |
COVERAGE_REGRESSION_DELTA | 0.01 | افت بیشتر نسبت به آخرین merge مسدود میشود |
`release_gate` `min_pass` | 1.0 | نسبت قبولی در [0,1] |
`release_gate` `max_regressions` | 0 | بودجهی مجاز پسرفت به صورت عدد صحیح |
`judge_claim` `threshold` | 0.8 | امتیاز همپوشانی برای در نظر گرفتن به عنوان پشتیبانیشده |
`compare` `samples` | 2000 | نمونهبرداری مجدد بوتاسترپ، seed=7 |
تستر پسرفت پرامپت (Prompt Regression Tester)
کار و کد| وظیفه | کد |
|---|---|
| شناسههای یکتا، انواع بررسی شناختهشده | validate_cases(cases) |
| انواع بررسی | `contains`, `excludes`, `json` |
| نمرهدهی به یک پاسخ ضبطشده | score_response(response, checks) |
| جفت کردن نسخهها بر اساس شناسهی مورد | compare(cases, baseline, candidate) |
| وضعیتهای جفتها | `stable_pass`, `regressed`, `improved` |
| انتشار یا مسدودسازی | release_gate(report) |
| اتصال ضبط به موردها | case_sha256 == case_digest(cases) |
| بارگذاری یک اجرای متصل به منشأ و سندیت | load_run(raw, cases) |
داور گزارش (Report Judge)
کار و کد| وظیفه | کد |
|---|---|
| یک ادعا در هر جمله | parse_claims(text) |
| پشتیبانی واژگانی از یک ادعا | support(claim, source) |
| ارجاعات داور در برابر شواهد | judge_claim(claim, evidence) |
| دلایل امتیاز صفر | `negation`, `number`, `uncited` |
| دقت، بازخوانی، پوشش | score_report(text, evidence) |
| وزنهای امتیاز | `precision` 0.5, `recall` 0.25 |
| وضعیتها | `no_evidence`, `needs_review` |
| بوتاسترپ جفتشده | compare(baseline, candidate) |
عیبیابی
عیبیابیامتیازهای ارزیابی خوانا نیستند
- علت
- نبود خط مبنا
- راهحل
- ذخیرهی آخرین خط مبنای معتبر
داور خروجی اشتباه را تایید میکند
- علت
- داور مبتنی بر LLM بدون ارجاعدهی مکانی
- راهحل
- ارجاعدهی مکانی داور به ابزارهای خارجی
ارزیابیها قبول میشوند، محیط عملیاتی شکست میخورد
- علت
- بیشبرازش روی ارزیابیها
- راهحل
- چرخش دورهای موردها
هشدارهای نادرست در CI
- علت
- موردهای ناپایدار و غیرقطعی
- راهحل
- تثبیت seedها، گرفتن اسنپشات از وضعیت
refused to start: VERIFY_OVERRIDE_SECRET is unset- علت
- سکرت override تنظیم نشده است
- راهحل
- متغیر محیطی را تنظیم کنید، یا برای دمو
VERIFY_DEMO_MODE=1را قرار دهید
recording does not match cases- علت
- فهرست موردها پس از ضبط تغییر کرده است
- راهحل
- ضبطهای جدید ایجاد کنید
model/settings changed; explicitly allow this experiment- علت
- پیکربندی خط مبنا و کاندید متفاوت است
- راهحل
- فلگ
--allow-configuration-changeرا ارسال کنید
order_requires_reviewبرای یک ادعای درست- علت
- قاعدهی واژگانی بازنویسی را رد میکند
- راهحل
- یک انسان ادعا را بازبینی کند
پرسشها
پرسش و پاسخ- چرا هیچ LLMای در گیت نیست؟
- گیت برای دستسازههای یکسان، هر بار همان حکم ارزیابی را میدهد.
- چه کسی یک مسدودی (block) را override میکند؟
- فقط انسان، همراه با
override_reasonوoverridden_by. - چرا بازبین جداگانه؟
- تفکیک نقشها: پرامپت متفاوت، ورودیهای متفاوت، بدون دسترسی نوشتن.
- چرا جفت کردن موردها با شناسه؟
- میانگین میتواند یک پسرفت جدی را پنهان کند.
- چرا بازخوانی null است؟
- بازخوانی و پوشش نیاز به برچسب دارند؛ بدون برچسب در دسترس نیستند.
نکات
نکتهها- ارزیابیها را کنار کد نگه دارید. در هر PR آنها را در CI اجرا کنید.
- هر گاردریل و هر قاعدهی آموختهشده را به یک مورد ارزیابی نگاشت کنید.
- به ازای هر وظیفه یک گزارش در
outputs/verification/<task_id>.jsonبنویسید. - فلگ
--strictرا فقط روی branchهای انتشار به کار ببرید؛ پیشفرض سراسری نیست. - پس از هر تغییر پرامپت، بازبین را روی یک مجموعهی کالیبراسیون 10 تا 20 وظیفهای اجرا کنید.
- اگر توافق زیر 80٪ بود، پیش از انتشار بازبین، شیوهنامهی نمرهدهی را بازنگری کنید.
کدهای یافتههای گیت
مفهومهاacceptance.missing- مسدودکننده (block). فرمانی هرگز اجرا نشد.
acceptance.failed- مسدودکننده (block). کد خروجی غیرصفر.
feedback.null_exit- مسدودکننده (block). بدون کد خروجی.
scope.forbidden- مسدودکننده (block). **
scope.off_scope**: هشدار (warn). coverage.below_floor- مسدودکننده (block). **
coverage.missing**: هشدار (warn).