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

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åVadVid fel
Gyllene fall~30 fall som måste fungera (säkerhet, kärnflöden)blockerar release
Tröskeltotalmått ≥ gränsblockerar release
Regressionslistafall som gick från rätt till felkrä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

Alla källor och licenser