Hoppa till innehållet
AI-grafen
FAI engineeringProjekt· ca 75 min· sandlåda på servern

Slutprov: släpp en modellversion du kan försvara

Avgör om version 2 av en assistent får släppas. Ange träffsäkerheten med osäkerhet, avgör om skillnaden mot version 1 är verklig eller brus, stoppa releasen när ett kritiskt fall går sönder och granska om LLM-domaren går att lita på.

Teori

En eval-siffra utan osäkerhet säger lite. Jämför versioner på samma fall: bara fallen där de skiljer sig bär information (McNemar). En release blockeras av kritiska fall även när totalen stiger, och ett fall som saknas i körningen räknas som fel. En LLM-domare körs i båda ordningarna; att den är konsekvent betyder inte att den håller med människor.

Deluppgifter

  1. Träffsäkerhet med osäkerhet — accuracy_ci(outcomes) returnerar {accuracy, low, high, n} där low/high är ett 95 %-Wilsonintervall. Tom lista ger ValueError.
  2. Förbättring eller brus? — paired_comparison(a, b) jämför två versioner på samma fall. Returnera {diff, a_only, b_only, p, verdict} där p kommer från ett exakt tvåsidigt McNemar-test och verdict är IMPROVED, WORSE eller NOISE (p ≥ alpha). Olika längd ger ValueError.
  3. Releasegrind — release_gate(baseline, candidate, critical, min_accuracy) returnerar {accuracy, regressions, critical_failures, block, reasons}. Ett fall som saknas i candidate räknas som fel. Blockera om ett kritiskt fall fallerar eller om träffsäkerheten är under tröskeln.
  4. Granska LLM-domaren — judge_audit(judge, pairs, human) kör varje par i båda ordningarna. Domslutet blir A, B eller TIE om det byter sida med ordningen. Returnera {verdicts, consistency, agreement} där agreement mäts mot människornas val.

Godkänt när: checks >= 1

Startkoden

körs i en isolerad sandlåda på servern
"""Evals-slutprov. Ändra funktionerna nedan; testerna bedömer beteende på nya resultat."""

IMPROVED = "förbättring"
WORSE = "försämring"
NOISE = "brus"
TIE = "LIKA"


def accuracy_ci(outcomes, z=1.96):
    """outcomes: [bool] per testfall -> {accuracy, low, high, n} med Wilsonintervall."""
    # TODO: räkna andelen rätt och ett 95 %-intervall som håller även nära 0 och 1.
    raise NotImplementedError


def paired_comparison(a, b, alpha=0.05):
    """a, b: [bool] för samma fall i samma ordning -> {diff, a_only, b_only, p, verdict}."""
    # TODO: räkna fall där bara en version har rätt och gör ett exakt, tvåsidigt McNemar-test.
    # verdict är IMPROVED eller WORSE om p < alpha, annars NOISE.
    raise NotImplementedError


def release_gate(baseline, candidate, critical=(), min_accuracy=0.0):
    """baseline, candidate: {fall_id: bool} -> {accuracy, regressions, critical_failures, block, reasons}."""
    # TODO: ett fall som saknas i candidate räknas som fel. Blockera vid kritiskt fel eller för låg träffsäkerhet.
    raise NotImplementedError


def judge_audit(judge, pairs, human):
    """judge(question, first, second) -> "1" | "2" | annat. pairs: [{id, question, a, b}], human: {id: "A"|"B"}.
    Returnerar {verdicts, consistency, agreement}."""
    # TODO: kör varje par i båda ordningarna; ett domslut som byter sida med ordningen blir TIE.
    raise NotImplementedError

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 gratis

Förväntade resultat

Alla tester och samtliga fyra releasekontroller godkända. Servern kör även dolda fall med andra siffror, saknade fall och nya domare. Kursen blir klar först efter en verifierad helkörning av slutprovet och alla kunskapssteg.

Vanliga fel

Normalapproximation i stället för Wilson ger intervall utanför 0–1. McNemar räknar med fall där båda versionerna har rätt. Ett borttaget fall försvinner ur nämnaren och höjer träffsäkerheten. Domaren körs i en ordning och positionsbias syns inte. Kör bara en deluppgift; kursen kräver helkörning med Alla.