Ein neues Modell antwortet anders
Ein Modell hinter einer Funktion zu wechseln heißt, dieselben Fälle auf beiden Versionen laufen zu lassen. Danach ziehen Sie die Nutzer langsam um. Das ist wichtig, weil eine neue Version im Schnitt besser und in einzelnen Fällen schlechter ist, und Ihre Nutzer finden diese Fälle zuerst.
Kein Labor hier trainiert oder betreibt ein Modell, daher vergleicht diese Lektion zwei aufgezeichnete Versionen. Die Methode ist die, die Sie echt anwenden würden.
Am Ende dieser Lektion
Notiz
Ich kann aus zwei aufgezeichneten Läufen entscheiden, ob eine Funktion zu einem anderen Modell wechselt.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Rückschritt | ein Fall, der früher bestand und jetzt scheitert |
| Canary | ein kleiner Anteil Nutzer, der zuerst wechselt |
| Rollback | der Weg zurück zur alten Version |
| Eimer | eine feste Zahl, in die ein Nutzer immer fällt |
| Kostenanstieg | der Prozentsatz, um den die neue Version teurer ist |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Beide Versionen über dieselben Fälle laufen lassen
Nutzen Sie für beide Versionen dieselben Fälle und notieren Sie je Fall, ob er bestand und was er kostete. Vergleichen Sie die Zahl der Treffer, listen Sie aber auch die Rückschritte auf.
Zwei Versionen mit gleicher Trefferzahl können sich unterscheiden: Eine kann einen Fall verfehlen, den die andere bestand. Ein Rückschritt bei einem wichtigen Fall kann mehr zählen als ein besserer Schnitt.
Durchgerechnetes Beispiel: alt und neu über sechs Fälle
| Version | Bestanden | Kosten | Rückschritte |
|---|---|---|---|
| Alt | 5 von 6 | 180 | keine |
| Neu | 5 von 6 | 144 | c3 bestand früher und scheitert jetzt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zuerst einen kleinen Anteil umziehen
Stellen Sie nicht alle auf einmal um. Schicken Sie einen kleinen Anteil der Nutzer zur neuen Version und beobachten Sie. Wählen Sie die Nutzer nach einer festen Regel, damit dieselbe Person immer dieselbe Version bekommt.
Lassen Sie die alte Version weiterlaufen, damit Sie in einem Schritt zurück können. Und schauen Sie auf die Rechnung: Eine Preisänderung kann den Gewinn auffressen. Legen Sie den akzeptierten Anstieg fest, bevor Sie nachsehen.
Ein häufiger Fehler
Warnung
Viele glauben, ein neueres Modell sei immer besser, ein kurzer Test genüge also. Ein neues Modell kann im Schnitt besser und bei Ihren Fällen schlechter sein. Lassen Sie Ihre eigenen Fälle laufen, ziehen Sie zuerst einen kleinen Anteil um und behalten Sie den Weg zurück.
Modell-Helfer schreiben, Teil 1
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.
Modell-Helfer schreiben, Teil 2
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.
Vergleich schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '' '// Zwei aufgezeichnete Versionen einer Funktion über dieselben sechs Fälle. Die Kosten sind in Mikro-Euro.' 'const alt = [1, 1, 1, 0, 1, 1].map(function (ok, i) { return { fall: \"c\" + (i + 1), ok: ok === 1, kosten: 30 }; });' 'const neu = [1, 1, 0, 1, 1, 1].map(function (ok, i) { return { fall: \"c\" + (i + 1), ok: ok === 1, kosten: 24 }; });' 'const MAX_RUECKSCHRITTE = 1;' 'function bestanden(lauf) { return lauf.filter(function (r) { return r.ok; }).length; }' 'function summe(lauf) { return lauf.reduce(function (s, r) { return s + r.kosten; }, 0); }' > wechsel.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.
Vergleich schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function rueckschritte(a, b) {' ' return a.filter(function (r, i) { return r.ok && b[i].ok === false; }).map(function (r) { return r.fall; });' '}' '// Ein Nutzer ist im Canary, wenn die Buchstaben seines Namens einen Eimer unter dem Prozentwert ergeben.' 'function imCanary(nutzer, prozent) {' ' let n = 0;' ' for (const b of nutzer) n = n + b.charCodeAt(0);' ' return n % 100 < prozent;' '}' >> wechsel.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.
Vergleich schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' console.log(\"alt: \" + bestanden(alt) + \" von 6, Kosten \" + summe(alt));' ' console.log(\"neu: \" + bestanden(neu) + \" von 6, Kosten \" + summe(neu));' ' const schlecht = rueckschritte(alt, neu);' ' console.log(\"Rückschritte: \" + schlecht.join(\", \") + (schlecht.length <= MAX_RUECKSCHRITTE ? \" (erlaubt)\" : \" (zu viele)\"));' ' const leute = [\"ana\", \"cy\", \"eva\", \"gus\", \"li\", \"zoe\"];' ' console.log(\"Canary bei 10 Prozent: \" + leute.filter(function (u) { return imCanary(u, 10); }).join(\", \"));' ' const r = await fragen([{ role: \"user\", content: \"Wie viel sind 15 Prozent von 200 Euro? Antworten Sie in einem kurzen Satz.\" }], \"15 Prozent von 200 Euro sind 30 Euro.\", 40);' ' console.log(\"Heute live (nicht in der Aufzeichnung): \" + r.text);' '}' 'main();' >> wechsel.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.
Vergleich ausführen
docker exec -w /home/node/project agent node wechsel.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine mögliche Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| alt: 5 von 6, Kosten 180 | Die aufgezeichnete alte Version |
| neu: 5 von 6, Kosten 144 | Die aufgezeichnete neue Version, günstiger |
| Rückschritte: c3 (erlaubt) | Ein Rückschritt, innerhalb der Grenze von einem |
| Canary bei 10 Prozent: ana | Der Nutzer, den die feste Regel in den kleinen Anteil legt |
| Heute live (nicht in der Aufzeichnung): ... | Ihr eigener Aufruf. Er ändert sich bei jedem Lauf oder zeigt Aufgezeichnete Probe |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.