F· AI engineeringevals-benchmarks· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20
Regressionstester för modeller
Kunna fånga kvalitetsförsämringar mellan modellversioner automatiskt.
Förkunskaper
- EBygg en eval-harnesskrävs
Intuition
Ett totalmått som går från 0,87 till 0,86 ser harmlöst ut — men kan dölja att tjugo fall blivit fel medan nitton andra blivit rätt. Regressionstester tittar på fallen, inte på snittet.
Tre nivåer:
| Nivå | Vad | Vid fel |
|---|---|---|
| Gyllene fall | ~30 fall som måste fungera (säkerhet, kärnflöden) | blockerar release |
| Tröskel | totalmått ≥ gräns | blockerar release |
| Regressionslista | fall som gick från rätt till fel | kräver granskning, inte automatiskt stopp |
Den tredje är den mest användbara i vardagen — och den som kräver att du sparar resultatet per fall, inte bara summan.
Kod
import json, pathlib
def kor_och_jamfor(modell, fall, baslinje_fil="evals/baseline.json", gyllene=frozenset(), trosk=0.85):
resultat = {f["id"]: bool(kontrollera(modell(f["input"]), f)) for f in fall}
acc = sum(resultat.values()) / len(resultat)
bas = json.loads(pathlib.Path(baslinje_fil).read_text()) if pathlib.Path(baslinje_fil).exists() else {}
regressioner = sorted(k for k, v in bas.items() if v and not resultat.get(k, False))
forbattringar = sorted(k for k, v in resultat.items() if v and not bas.get(k, True))
gyllene_fel = sorted(k for k in gyllene if not resultat.get(k, False))
rapport = {"accuracy": round(acc, 4), "regressioner": regressioner,
"forbattringar": forbattringar, "gyllene_fel": gyllene_fel,
"blockerar": bool(gyllene_fel) or acc < trosk}
print(json.dumps(rapport, ensure_ascii=False, indent=2))
return rapport, resultat
# I CI:
# rapport, resultat = kor_och_jamfor(...)
# assert not rapport["blockerar"], rapport
# vid godkänd release: skriv om baseline.json med det nya resultatet
Underhåll av fallmängden är det som avgör om sviten är värd något om ett år:
- Varje produktionsbugg blir ett nytt fall. Alltid.
- Varje ny funktion kommer med sina fall.
- Fall som alla versioner klarat i ett år kan flyttas till en långsam svit.
- Baslinjen uppdateras bara vid medveten release, aldrig automatiskt — annars normaliseras försämringar tyst.
Behärskning innebär
- Bygger en gyllene uppsättning som blockerar release
- Skiljer regression från brus
- Underhåller fallmängden över tid
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- OpenAI Evals (MIT) — MIT
- Google — Rules of Machine Learning — CC BY 4.0