EUniversitetLaboration· ca 60 min· sandlåda på servern
Labb: bygg en eval-harness
Bygga en harness som kör en modell (här: en regelbaserad funktion) mot testfall med facit, räknar mått, hittar regressioner och skriver en rapport.
Lär ut: Bygg en eval-harness
Teori
En eval är en lista fall {input, expected} + ett mått (exakt match, normaliserad match, numerisk tolerans). Harnessen ska vara deterministisk och jämförbar mellan versioner.
Deluppgifter
- load_cases —
load_cases(path)läser JSONL till en lista dicts. - score —
score(pred, expected, kind)för kind exact|normalized|numeric(tol 1e-6). - run_eval —
run_eval(model_fn, cases)→ {accuracy, n, failures:[…]};compare(a, b)→ regressioner (fall som gick från rätt till fel).
Godkänt när: accuracy >= 0.8
Startkoden
körs i en isolerad sandlåda på servernimport json
def baseline(q):
"""Regelbaserad 'modell' att utvärdera."""
q = q.lower()
if "huvudstad" in q and "sverige" in q:
return "Stockholm"
if q.startswith("vad är") and "+" in q:
a, b = q.replace("vad är", "").replace("?", "").split("+")
return str(int(a) + int(b))
return "vet inte"
def load_cases(path):
# TODO: en dict per rad
...
def score(pred, expected, kind="exact"):
# TODO: exact | normalized (lower + strip + ett mellanslag) | numeric (abs diff < 1e-6)
...
def run_eval(model_fn, cases):
# TODO: {"accuracy": andel rätt, "n": antal, "failures": [{"input", "expected", "got"}], "results": {input: bool}}
...
def compare(before, after):
# TODO: lista inputs där before rätt och after fel
...
Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.
Prova diagnosenSkapa konto gratisFörväntade resultat
Baslinjemodellen (baseline) får ≥ 0,8 på fallen; compare hittar exakt de fall som regredierat.
Vanliga fel
- Normaliserar inte whitespace/skiftläge i 'normalized'.
- Jämför flyttal med ==.
- Rapporten är inte deterministisk (set-ordning).