Hoppa till innehållet
AI-grafen
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

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.

Källor

Alla källor och licenser