E· Universitetevals-benchmarks· ca 60 min· utvecklande· verifierad 2026-09-20
Bygg en eval-harness
Kunna bygga en harness med testfall, mått och rapport som körs i CI.
Förkunskaper
- DTestning med pytestkrävs
- EModellutvärderingkrävs
Intuition
En eval-harness är till modeller vad enhetstester är till kod: en fast uppsättning fall med förväntade svar, ett skript som kör modellen mot dem, och en rapport. Varje ändring (prompt, modellversion, retrieval-parameter) körs genom harnessen innan den släpps.
Delar:
- Fall:
{id, input, expected, kind}i JSONL, versionshanterade. Blanda lätta, svåra, kantfall och tidigare buggar. - Mått per fall: exakt match, normaliserad match, numerisk tolerans, rubrik via domare.
- Rapport: totalmått + lista över fall som gick från rätt till fel (regressioner) — det viktigaste.
- Determinism: temperatur 0, fasta frön, sorterad utdata; annars går rapporten inte att jämföra.
- CI-grind: bygget failar om måttet faller under tröskel eller om en «guldstandard»-fall regredierat.
Kod
import json
def load_cases(path):
return [json.loads(l) for l in open(path, encoding="utf-8") if l.strip()]
def score(pred, exp, kind):
if kind == "exact": return pred == exp
if kind == "normalized": return " ".join(pred.lower().split()) == " ".join(exp.lower().split())
if kind == "numeric": return abs(float(pred) - float(exp)) <= 1e-6
raise ValueError(kind)
def run_eval(model_fn, cases):
res = {c["id"]: score(model_fn(c["input"]), c["expected"], c["kind"]) for c in cases}
fails = sorted(k for k, ok in res.items() if not ok)
return {"n": len(cases), "accuracy": sum(res.values()) / len(cases), "failures": fails, "per_case": res}
def compare(before, after):
return sorted(k for k in before["per_case"] if before["per_case"][k] and not after["per_case"].get(k, False))
# CI:
# r = run_eval(modell, load_cases("cases.jsonl")); assert r["accuracy"] >= 0.85, r["failures"]
# reg = compare(json.load(open("baseline.json")), r); assert not reg, f"regressioner: {reg}"
Labben evals-harness-labb bygger exakt detta med tester.
Behärskning innebär
- Bygger en harness med testfall, mått och deterministisk rapport
- Hittar regressioner mellan två versioner
- Kör harnessen i CI med tröskel
Logga in för att göra övningarna och bygga upp din behärskning.