Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

A/B-Tests und Schattentests

Nach dieser Lektion: Ich kann zwei Versionen vergleichen, ohne mich vom Zufall täuschen zu lassen.

Lektion, 70 Min.6 BefehleLab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Wie man zwei KI-Versionen fair vergleicht

Ein A/B-Test gibt Version A einer Gruppe von Nutzern und Version B einer anderen und vergleicht dann, wie oft jede funktioniert. Ein Schattentest lässt die neue Version auf echten Anfragen laufen, aber niemand sieht ihre Antworten.

Beide können Sie täuschen. Eine Lücke von neun Punkten kann trotzdem Zufall sein.

Am Ende dieser Lektion

Notiz

Ich kann zwei Versionen vergleichen, ohne mich vom Zufall täuschen zu lassen.

Schlüsselwörter

BegriffWas er bedeutet
A/B-Testzwei Nutzergruppen, je eine Version
Schattentesteine neue Version, die läuft, wo sie niemand sieht
Erfolgsquoteder Anteil der Anfragen, die funktionierten
Lückeeine Quote minus die andere, in Punkten
Schwankungwie weit sich eine Lücke durch Zufall verschiebt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Lücke muss die Schwankung übertreffen

Version B besteht 138 von 200 und A besteht 120 von 200. Die Lücke beträgt 9 Punkte. Aber auch zwei Gruppen mit je 200 Nutzern unterscheiden sich durch Zufall.

Die Schwankung sagt, wie weit sich eine Lücke durch Zufall verschiebt. Eine Faustregel: Trauen Sie einer Lücke nur, wenn sie mindestens das Doppelte der Schwankung beträgt.

Durchgerechnetes Beispiel: zwei Tests

TestNutzer je GruppeLückeSchwankungDoppelte SchwankungUrteil
A gegen B2009,04,89,6Nicht belegt
A gegen C1.0005,02,24,3Belastbar

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, die höhere Punktzahl gewinne. Eine höhere Punktzahl aus einem kleinen Test kann Zufall sein. Nennen Sie nur dann einen Sieger, wenn die Lücke mindestens das Doppelte der Schwankung beträgt. Sonst schreiben Sie nicht belegt und sammeln mehr Daten.

Ein Schattentest findet neue Fehler ohne Risiko

Lassen Sie die neue Version auf denselben echten Anfragen laufen und halten Sie ihre Antworten verborgen. Für jede Anfrage haben Sie ein Paar: das alte und das neue Ergebnis.

Gleiche Summen können eine Veränderung verbergen. Zwei Fälle können schlechter werden, während zwei andere besser werden. Zählen Sie die schlechteren und lesen Sie jeden.

Durchgerechnetes Beispiel: zwölf Paare

Paar (alt, neu)BedeutungAnzahl
bestanden, bestandenGleich7
durchgefallen, durchgefallenGleich1
durchgefallen, bestandenNeu besser2
bestanden, durchgefallenNeu schlechter, diese lesen2

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Modellhilfe schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' '// Die Token einer Antwort oder null, wenn sie keine nennt.' 'function zaehlen(daten, name) {' '  return daten.usage && typeof daten.usage[name] === \"number\" ? daten.usage[name] : null;' '}' > model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Modellhilfe schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function fragen(nachrichten, probe, max) {' '  try {' '    const res = await fetch(basis + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"Status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, eingabe: zaehlen(d, \"prompt_tokens\"), ausgabe: zaehlen(d, \"completion_tokens\"), aufgezeichnet: false };' '  } catch (fehler) {' '    console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' '    return { text: probe, eingabe: null, ausgabe: null, aufgezeichnet: true };' '  }' '}' 'module.exports = { fragen };' >> model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Vergleichsskript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'function schwankung(a, an, b, bn) {' '  const p = (a + b) / (an + bn);' '  return Math.sqrt(p * (1 - p) * (1 / an + 1 / bn)) * 100;' '}' 'function luecke(a, an, b, bn) { return (b / bn - a / an) * 100; }' 'function urteil(a, an, b, bn) {' '  const ok = Math.abs(luecke(a, an, b, bn)) >= 2 * schwankung(a, an, b, bn);' '  return ok ? \"belastbar\" : \"nicht belegt\";' '}' 'function komma(zahl) { return zahl.toFixed(1).replace(\".\", \",\"); }' > ab.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Vergleichsskript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const tests = [' '  { name: \"A gegen B\", a: 120, an: 200, b: 138, bn: 200 },' '  { name: \"A gegen C\", a: 600, an: 1000, b: 650, bn: 1000 },' '];' 'const paare = \"bb bb bf bb fb bb ff bb bf bb bb fb\".split(\" \");' 'function zaehlen(art) { return paare.filter(function (p) { return p === art; }).length; }' >> ab.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Vergleichsskript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  tests.forEach(function (t) {' '    console.log(t.name + \": Lücke \" + komma(luecke(t.a, t.an, t.b, t.bn)) + \" Punkte, Schwankung \" + komma(schwankung(t.a, t.an, t.b, t.bn)) + \" -> \" + urteil(t.a, t.an, t.b, t.bn));' '  });' '  console.log(\"Schatten: gleich \" + (zaehlen(\"bb\") + zaehlen(\"ff\")) + \", neu besser \" + zaehlen(\"fb\") + \", neu schlechter \" + zaehlen(\"bf\"));' '  const f = \"Schreiben Sie in einem kurzen Satz, warum eine Lücke von 9 Punkten trotzdem Zufall sein kann.\";' '  const probe = \"Bei nur 200 Nutzern je Gruppe kann der Zufall allein eine Quote so weit verschieben.\";' '  const antwort = await fragen([{ role: \"user\", content: f }], probe, 60);' '  console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> ab.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Vergleich ausführen

Befehl
docker exec -w /home/node/project agent node ab.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was der Run ausgibt

ZeileWas sie zeigt
A gegen B: Lücke 9,0 Punkte, Schwankung 4,8 -> nicht belegtEine große Lücke, ein kleiner Test
A gegen C: Lücke 5,0 Punkte, Schwankung 2,2 -> belastbarEine kleinere Lücke, ein größerer Test
Schatten: gleich 8, neu besser 2, neu schlechter 2Gezählt aus zwölf aufgezeichneten Paaren
Das Modell sagte: ...Ein Satz aus dem Labor. Eine Aufgezeichnete Probe, wenn kein Modell antwortet

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über dieses Lab und seinen Quellcode: Lab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.