Галоўная / Артыкулы / Практычныя прытамулкі: Ацэнкае: Кароткі курс для агентаў і навыкаў

Практычныя прытамулкі: Ацэнкае: Кароткі курс для агентаў і навыкаў

Практычныя прыказкі: Ацэнка: кароткі курс для агентаў і Навыкі: контракты, перакананні та слоты для коду для команд, якія выкарыстоўваюць гэты шаблон.

2608 слоў

Наступныя прытамлівкі паказваюць практычны падход да выканання матэрыялу “Evals: A Crash Course for Agents and Skills”. Акцэнт ставіцца на контракты, перакананняя і мескі для коду, а не на мотывацыйныя аспекты. Калі працуеце над стадзіяй агледжавання, спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список дапамагае заліцваты змяны ў кодзе. Храніце настройкі парадульна ад коду прыемлівкі. Файлы сераўіса, сховішчы секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць аудыт без неабяжлівага чытання всей структуры.

Ментальная модель

Этап стварэння ментальной моделі працюе наяўней, калі яго спрыяваць як мерыемую структуру. Запісаўце адну ідеальную версію, адзін прыклад неудачы і прыметку па адкату перш чым расширваць масштабы. Дакументаваць трэба як успішны, так і варыянт вяселення працэсы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Задаце бюджет токенав на кожны рунг і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.

Шары ацэнкі

Этапы адміністрацыі шароў ацэнкі працуюць наякша, калі іх спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія, адзін прыклад неудачы і прыметку па адвярненню роботы, прычаму расшырваць масштабы.

Для навыкаў патрэбны два комплекты ацэнкі

The Skills патэнт работае наяўней, калі яго адносна да двух стадзій ацэнкі спрыяе стварэнню меркаванага аспекту. Перш чым расширваць сферу прыемлівання, неабходна зафіксаваць адны ідеальны прыклад роботы, адну ситуацыю неудачы і прыметкі па вярнэнню да пачатковага стану. Цюю стадзію трэба спрыяваць як кантракт межаў уводных дадзеных і перакананых выходных рэзультатаў. Назваць усі артыфакты, задаць критэрыя успеху і не падтрымляць тыхню частковую завершэннасць без адпаведных пазначэнняў. Стан графа трэба залічваць як плоскі і з аднаковым типам дадзеных. Вярсткаваныя блокі маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшуюць возз'еднанне пасля перарываў. The Skills патэнт работае наяўней, калі яго адносна да двух стадзій ацэнкі спрыяе стварэнню меркаванага аспекту. Перш чым расширваць сферу прыемлівання, неабходна зафіксаваць адны ідеальны прыклад роботы, адну ситуацыю неудачы і прыметкі па вярнэнню да пачатковага стану. Конфігурацыю трэба знаходзіць за межамі коду прыемлівання. Файлы сераўнавальных сэрваў, хранілішча секретных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць аудыт без неабходнасці чытання всего графа.

- prompt: "Patch the vulnerable npm dependencies"
  expected_skill: cve-remediation
- prompt: "Review authentication input validation"
  forbidden_skill: cve-remediation

Як выглядае хорашы прыклад ацэнкі

Для стадіі ацэнкі «Яка ж гарная», перш чым зменяць код, неабходна ясная ваказка пра вхідныя даны, адпаведальнага за крок і крэтарыя для завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Неабходна адночасная документацыя як успішнага, так і патовага шляха. Перапрыбуткі, людзкія перакрыцці та обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Пры кроках, якія выкалічваюць грошы чысткі зменяюць даны ў працоўнай сістэме, неабходна людзкая затверджэння. Працэс кампілявання не є гарантыяй полнай адпаведнасці продукту бізнес-трэбованням.

{
  "id": "fix-null-condition",
  "prompt": "Fix saving rules with a null condition",
  "fixture": "repos/null-condition",
  "setup": ["npm install"],
  "checks": [
    "npm test -- null-condition.test.js",
    "git diff --check"
  ],
  "rubric": [
    "Fixes the root cause",
    "Preserves existing behavior",
    "Adds a regression test",
    "Avoids unrelated changes"
  ],
  "forbidden": [
    "deleting existing tests",
    "hard-coded fixture-specific output"
  ]
}

Ацэнкавальныя прыстроі: выбірайце наймоцнейшыя, якія є

Для адміністратараў неабходна выкарыстоўваць найсильнейшы этап, чытка вказаць параметры вхідных дадзеных, адпаведальнага за крок і критэрыя завершэння перад змінайом коду. Аператары должны магчымае перзапускати крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Валідзіце маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выконваецца, прычына нехарактэрыстыкі должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Заставляйце людзей апраўдваць тыя крокі, якія ведуць да витрачання грошаў або змены дадзеных у прыемнай сістэме. Компіляцыйныя налашчанні не ўзроўнавальваюцца з повнасцю бізнес-процэсаў.

Метрыкі, якія маюць значэнне

У стадії «Метрыкі, якія маюць значэнне», перш чым зменшваць код, неабяжна визначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Спрыяйце цій стадіі як даговору межаў вхідных даных і перакананых выходных рэзультатаў. Даць назвы артыфактам, визначыць перакананні ў успеху і адмовіцца ад безгучнага частковага завершэння. Забезпечыце людскія празборы для тых крокоў, якія витрачаюць грошы або зменяюць даны ў працэсе. Компіляцыйныя налашчанні не ўзроўнавальваюцца з повным завершэнням бізнес-процесаў. У стадії «Метрыкі, якія маюць значэнне», перш чым зменшваць код, неабяжна визначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Зберагачыце налашчанні парадульна ад коду прыкладнага програмнага забезпечэння. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое працавнікі можуць аудытаваць, не чытаючы весь структураны лянцуг.

Стварэнне якіснага набора дадзеных

Калі працуеце над стадзіяй стварэння якіснага набора дадзеных, спачатку запішыце умовы: неабяжлівыя даннэ, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список контроля дапамагае заліцварыць пазнейшыя змены ў кодзе. Документавацію трэба стварыць як для успешнага, так і для вярнага руху задання. Перапрыбуткі, людзкія перакрыцця та обробка некоректных паведамленняў є часткай продукту, а не пазнейшым дапрацоўкам. Ствараюце контрольныя пункты пасля дорогіх крокаў. Продовжэнне роботы не должна занова платіць за той самы вызыв LLM, калі аператар перапрыбуе пазнейшы вузел.

Практычны цикл

Калі працюеце над стадзіяй «Практычны цыкл», спачатку запісайце умовы працы: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае заліцвачыць змяны ў кодзе адпаведна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зрабіце пераконтроль пасля дорогіх крокаў. Програма не должна зноў ставіць плату за той самы вызов LLM, калі аператар праказвае спробу ў вынікуючым вузле.

Пашырэныя памылкі

Калі працюеце над стадзіяй «Звычныя памылкі», спачатку запісайце «контракт»: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Спрыятлівае ставленне да гэтай стадзіі як да контракту межа даннемі і перакананымі выходамі. Дайце назвы элементам, задаце правілы пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Стварыце контрольны пункт пасля дорогіх крокаў. Програма не должна занова ставіць плату за той самы вызыв LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працюеце над стадзіяй «Звычныя памылкі», спачатку запісайце «контракт»: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Зберагаце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.

Метрыкі маршрутацыі, у конкрэтных деталях

Метрыкі маршрутацыі, якія перакладаюцься ў конкрэтныя этапы роботы, працуюць наўздоўж калі іх розглядаць як вимерную плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметкі па адкату перш чым расширваць масштабы. Дакументаваць трэба як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Храніце стан графа простым і з адначыяным типам дадзеных. Вкладаныя блокі маскуюць, який вузел запісаў канкрэтны поле, і спакоююць продовжэнне роботы пасля перарываў.

Найлепшая пачатковая точка

Лепшы спосаб выканання задач — калі яго расследжваць як мерыемую паверхню. Запісаце адна «золатая» версія, адзін прыклад неудачы і прыметку па вярнэнні да пачатковага стану пры расширэнні масштаба. Валіце маленькія, тэставаныя элементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты обработкі дадзеных павінны быць простымі та з адначыя типамі дадзеных. Вкладаныя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакоююць працу пасля перерываў.

Рэальная, мінімалістычная рамка для ацэнкі, яю можна скопіяваць

Прыглыбны стадія ацэнкі працюе найэфектывней, калі яе спрыяваць як меравальную паверхню. Зафіксавайце адны ідеальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Спрыявайце гэты стадію як кантракт межа вхіднымі даннымі і паверыжанымі выходамі. Даўце назвы артыфактам, задаць критэрыя успеху і не прымайце часткова завершаныя рэзультаты без паведамлення. Храніце стан графа ў простым і типаванам формате. Вярнутыя структуры маскуюць інфармацію пра тое, який вузел запісаў кожны поле, і спакшуюць возз'яданне пасля перарываў. Прыглыбны стадія ацэнкі працюе найэфектывней, калі яе спрыяваць як меравальную паверхню. Зафіксавайце адны ідеальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Храніце настройкі за межамі коду прыемліка. Файлы сераўіса, сховішчы секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнага чытання всего графа.

evals/
  cases/
    skills/security-review.trigger.json
    agents/fix-null-condition.json
  graders.py
  metrics.py
  runner.py
  run.py        # CLI entry1. Case files. A skill trigger case is just positives and negatives. An agent case is a prompt plus graders and a run count.
// cases/skills/security-review.trigger.json
{
  "skill": "security-review",
  "positives": [
    "Audit this endpoint for SQL injection",
    "Check the login flow for auth bypasses",
    "Is this file-upload handler safe?"
  ],
  "negatives": [
    "Upgrade React dependencies",
    "Rename this variable across the repo",
    "Add a loading spinner to the form"
  ]
}
// cases/agents/fix-null-condition.json
{
  "id": "fix-null-condition",
  "prompt": "Fix saving rules with a null condition",
  "fixture": "fixtures/null-condition",
  "setup": ["npm ci"],
  "runs": 5,
  "graders": [
    { "type": "shell", "cmd": "npm test -- null-condition", "critical": true },
    { "type": "shell", "cmd": "git diff --check" },
    { "type": "forbidden", "pattern": "it\\.skip|xit\\(", "message": "must not disable tests" }
  ]
}
# graders.py
import re, subprocess
def shell(step, ctx):
    r = subprocess.run(step["cmd"], cwd=ctx.workdir, shell=True,
                       capture_output=True, text=True)
    ok = r.returncode == 0
    return {"pass": ok, "score": 1 if ok else 0, "detail": r.stdout[-400:]}
def forbidden(step, ctx):
    bad = re.search(step["pattern"], ctx.diff) is not None
    return {"pass": not bad, "score": 0 if bad else 1,
            "detail": step["message"] if bad else ""}
def judge(step, ctx):
    v = ctx.llm.rate(step["rubric"], ctx.artifact)  # 0..1, blinded
    return {"pass": v >= step.get("threshold", 0.7), "score": v}
GRADERS = {"shell": shell, "forbidden": forbidden, "judge": judge}3. Metrics. Success rate, pass@k, pass^k, and the routing confusion matrix — exactly the numbers from earlier.
# metrics.py
def success_rate(rs):
    return sum(1 for r in rs if r["pass"]) / len(rs)
def pass_at_k(rs):
    return 1 if any(r["pass"] for r in rs) else 0
def pass_hat_k(rs):
    return 1 if all(r["pass"] for r in rs) else 0
def routing(positives, negatives, fired):
    tp = sum(1 for p in positives if fired(p))
    fp = sum(1 for n in negatives if fired(n))
    fn = len(positives) - tp
    tn = len(negatives) - fp
    return {"tp": tp, "fp": fp, "fn": fn, "tn": tn,
            "precision": tp / (tp + fp or 1),
            "recall": tp / (tp + fn or 1)}4. The runner. One function per suite. The agent runner repeats each case so pass^k is meaningful; the skill runner just asks the router which skills fire.
# runner.py
import json
from graders import GRADERS
from metrics import success_rate, pass_at_k, pass_hat_k, routing
def run_agent_case(agent, path):
    c = json.load(open(path))
    runs = []
    for _ in range(c.get("runs", 3)):
        ctx = agent.run(c["prompt"], fixture=c["fixture"], setup=c["setup"])
        ok = True
        for step in c["graders"]:
            g = GRADERS[step["type"]](step, ctx)
            if step.get("critical") and not g["pass"]:
                ok = False
        runs.append({"pass": ok})
    return {"id": c["id"], "success": success_rate(runs),
            "pass_at_k": pass_at_k(runs), "pass_hat_k": pass_hat_k(runs)}
def run_skill_trigger(router, path):
    c = json.load(open(path))
    fired = lambda prompt: c["skill"] in router.route(prompt)
    return {"skill": c["skill"], **routing(c["positives"], c["negatives"], fired)}5. Run it. The CLI just dispatches on the case type and prints the metrics.
$ python run.py cases/agents/fix-null-condition.json
fix-null-condition   success=0.80   pass@5=1.00   pass^5=0.20
$ python run.py cases/skills/security-review.trigger.json
security-review      precision=0.86  recall=1.00   (tp=6 fp=1 fn=0 tn=5)

Не ствараце нічога з нуля, як толькі не ўтрэба

Калі не трэба ствараць ўсё з нуля, спачатку апішыце неабходныя даннэ, адпаведальную особу за кожны крок і критэрыя завершэння працы, перш чым зменіце код. Аператары должны магчыма ўвайсці знову у крок, выкарыстоўваючы вядомую точку контролю, без неабязковасці здогадвацца пра схованы стан. Адзначыце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкія пераказы і обробка некоректных паведамленняў є частью продукту, а не дадатковым элементам для пасляднейшай дапрацоўкі. Заставьце людзкую затверджэнняе на тых кроках, дзе відбываецца выдатак грошэй або зміняюцыся даннэ для працы. Компіляцыйныя налашчэнні не ўзроўнаваны з повнасцю бізнес-функцыйоналу.

Загальныя ацэнкі LLM і запытаў

Для стадіі адміністрацыі запыткаў для загальных LLM неабходна падчас змены коду вызначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае рэаналізаваць крок на адным вядомым пункце контролю, не спрабоўваючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны даны з перакананнем схэмы, чым вольныя тэкстовыя выказванні.

Аналіз, наборы дадзеных і платформы з LLM як суддзем

Для стадіі платформ LLM-as-judge для набора данных Tracing неабяжна прадзефінавань вхідных дадзеных, адміністратара крока і крэтэрыяў завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце цій стадіі як кантракту межа вхіднымі дадзенымі і паверанымі выходнымі рэзультатамі. Даўце назвы артыфактам, прадзефінаваць перакананняя пра успех і адмовіцеся ад беззвучнага частковага завершэння. Калі наступны крок — гэта код або вызов інструмента, валідаванне структураваных выходных дадзеных за дапамою схемы лепша, чым вольная проза. Для стадіі платформ LLM-as-judge для набора данных Tracing неабяжна прадзефінавань вхідных дадзеных, адміністратара крока і крэтэрыяў завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Храніце настройкі праза коду прыемленае. Файлы сяродавішча, хранілішча секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое працавнікі можуць аудытаваць без чытання тэксту.

весь граф.

Інструменты для агента та критэрыя якосці

Калі працуеце над стадзіяй критэрыяў для інструментаў, спецыяльных для агента, спачатку запісайте умовы: неабходныя даннэ, сігнал успеху і тое, што выканаецца у разы ўзельнага неякосці. Такі чарт дапамагае залічыцца з пазнейшымі зменамі ў кодзе. Документавайце як правільны, так і патэнцыйны шляхы роботы. Перапрыбуткі, людзкія контралі та обработка некоректных паведамленняў є часткай продукту, а не пазнейшым дапрацоўкам. Зявляйце логі з назвай інструмента, хэшам параметраў, часам адклікання та рэзультатам кожнага вызову. Без такога следу дэбагаванне цыклаў агента губіць гадзіны.

Як выбраць

Калі працюеце над этапам «Як выбраць», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкі дапамагае заліцвачваць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісь крок не выйшае, прычына нявыпання павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце пераконтроўку пасля дорогіх крокаў. Система не павинна знову стягваць плата за той самы вызов LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел.

Чэк-ліст для эксплуатацыі

Для этапа «Чэк-ліст для эксплуатацыі» перад зменай кодза задазвольце даны, адпаведальнага за крок і критэрыя завершэння. Аператары павінны магчымаць перзапуск кроку з вядомай точкі пераконтроўкі, не падозрюючы пра схованы стан.

Запісвайце часы выконання і кост токена або запиту праз функцыянальныя рэзультаты. Відразлівая візуальна атрыбутацыя коста запобегае неспакоўным рахункам, калі парадок зменшваецца з дэмавай версіі на спяльныя среды.

Заставьце людзкія апраўленні на тых элементах, якія витрачаюць грошы або зменяюць данні ў працэсе вырабоцтва. Праця ў часе компілявання не абавязкова значыць повнайшую падтрымку бізнес-процэсаў.

Следзіце за косцам і затрымкамі праз якасць. Адпаведны рэзультат, які ў 10 разоў дарожыць меньш, можа быць правильным выборам для працэсу вырабоцтва.

Закрепіце версіі залежнасцяў і запісвайце хеш-значэнне зображэння, якое выканало дэму. Возможнасць павторнага стварэння результатаў лепшая за традыцыйныя знання.

Вядзьміце прыоритет над малымі, тэставанымі елементамі працэсу над вялікімі скрыптамі. Калі якісь крок не выйшае, прычына нехацкага рэзультата должна быць адносна конкретнай адпаведальнасці, а не сложным ланцоўкам крокаў.

Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычнага шляху і паказвце способы абяроны. У спільных средах неабходны ліміты частоты запытоў, пераканання ў належнасці тэрыторіі і чысткі власнік для ротацыі секрэтных даных. Валіце простую надзейнасць працоўнікам, а не хітрыя експерыментальныя дэманстрацыі.

Прыметкі для ce69f1512f25: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенаў на сесію і зберагачыце транскрыпты празаўседы ў фіксы для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннімі.