Ein Fehler im Einsatz ist der beste Test
Eine Eval aus der Produktion macht einen echten Fehler zu einem Testfall. Sie lohnt sich, denn Kunden finden Fehler, an die kein Testautor dachte, aber ihre Nachrichten enthalten Namen, Adressen und Nummern, die Sie nicht behalten dürfen.
Der Shop-Agent scheitert diese Woche viermal. Welche Teile dieser Chats dürfen in Ihre Testmenge?
Am Ende dieser Lektion
Notiz
Ich kann einen Fehler im Einsatz in einen Fall verwandeln, ohne zu behalten, was nicht behalten werden darf.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Spur | die Aufzeichnung eines echten Laufs |
| Maskierung | personenbezogene Daten durch eine Marke ersetzen |
| Stichprobe | die Auswahl, welche Spuren man ansieht |
| Kontrollfall | eine bestandene Spur, die zeigt, was nicht kaputtgehen darf |
| Drift | eine Menge, die sich ändert, bis sie nicht mehr dasselbe misst |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Wählen Sie, welche Spuren Sie lesen
Sie können nicht jede Spur lesen. Die Stichprobe wählt aus. Nehmen Sie jeden Fehler, den ein Nutzer meldete oder eine Prüfung markierte. Fügen Sie einige bestandene Spuren als Kontrollfälle hinzu, damit eine Korrektur nicht kaputt macht, was funktionierte.
Ein Fehler ist erst ein Fall, wenn eine Person aufgeschrieben hat, was hätte geschehen sollen.
Durchgerechnetes Beispiel: sechs Spuren werden vier Fälle
| Spur | Ergebnis | Was mit ihr geschieht |
|---|---|---|
| t1 | Fehler | ein Fall, die E-Mail ersetzt |
| t2 | ok | ein Kontrollfall |
| t3 | Fehler | ein Fall, die Telefonnummer ersetzt |
| t4 | Fehler | ein Fall |
| t5 | Fehler | verworfen: nach der Maskierung dieselbe Eingabe wie t4 |
| t6 | ok | nicht in der Stichprobe |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Entfernen Sie personenbezogene Daten vor dem Speichern
Die Maskierung ersetzt jeden Namen, jede Adresse und Nummer durch eine Marke wie [E-Mail]. Tun Sie das mit Regeln, die Sie lesen und testen können, nie indem Sie ein Modell bitten, und maskieren Sie auch den erwarteten Text.
Dann prüfen Sie. Suchen Sie in den fertigen Fällen, was verschwunden sein sollte. Ein Fall, der noch eine Adresse enthält, ist ein Datenleck in Ihrer Testmenge.
Verhindern Sie, dass die Menge driftet
Drift heißt, dass sich die Menge unbemerkt ändert, bis eine Punktzahl vom letzten Monat nicht mehr dasselbe bedeutet. Geben Sie der Menge eine Version. Fügen Sie Fälle nur nach Durchsicht hinzu, nie durch ein Skript, das jede Nacht läuft.
Begrenzen Sie ihre Größe und verwerfen Sie Duplikate, damit eine Flut desselben Fehlers nicht mehr zählt als der Rest.
Aufgezeichnete Spuren schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Erfundene Spuren eines Shop-Agenten. Die Personen und Nummern sind falsch.' 'const spuren = [' ' { id: \"t1\", ergebnis: \"fehler\", nutzer: \"Erstatten Sie die Bestellung A17, meine E-Mail ist [email protected]\", erwartet: \"Nach dem Artikel fragen, dann einmal erstatten\" },' ' { id: \"t2\", ergebnis: \"ok\", nutzer: \"Wo ist die Bestellung B02?\", erwartet: \"Sagen, dass sie versendet ist\" },' ' { id: \"t3\", ergebnis: \"fehler\", nutzer: \"Rufen Sie mich unter +49-170-1234567 wegen der Bestellung C11 an\", erwartet: \"Die Hilfeseite anbieten, keinen Anruf versprechen\" },' > spuren.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.
Aufgezeichnete Spuren schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' { id: \"t4\", ergebnis: \"fehler\", nutzer: \"Wo ist mein Paket? [email protected]\", erwartet: \"Die Bestellung suchen und die Nummer erfragen\" },' ' { id: \"t5\", ergebnis: \"fehler\", nutzer: \"Wo ist mein Paket? [email protected]\", erwartet: \"Die Bestellung suchen und die Nummer erfragen\" },' ' { id: \"t6\", ergebnis: \"ok\", nutzer: \"Hallo\", erwartet: \"Den Kunden begrüßen\" },' '];' 'module.exports = { spuren };' >> spuren.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.
Fallbauer schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { spuren } = require(\"./spuren\");' 'function maskieren(text) {' ' return text.split(\" \").map(function (wort) {' ' let kern = wort;' ' let ende = \"\";' ' while (kern.length > 0 && \".,?\".includes(kern[kern.length - 1])) {' ' ende = kern[kern.length - 1] + ende;' ' kern = kern.slice(0, -1);' ' }' ' if (kern.includes(\"@\")) return \"[E-Mail]\" + ende;' ' const ziffern = kern.split(\"\").filter(function (c) { return c >= \"0\" && c <= \"9\"; }).length;' ' const einfach = kern.split(\"\").every(function (c) { return (c >= \"0\" && c <= \"9\") || c === \"+\" || c === \"-\"; });' ' if (einfach && ziffern >= 7) return \"[Telefon]\" + ende;' ' return wort;' ' }).join(\" \");' '}' > faelle.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.
Fallbauer schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const gesehen = [];' 'const faelle = [];' 'const verworfen = [];' 'let anzahlOk = 0;' 'spuren.forEach(function (spur) {' ' const einer = { eingabe: maskieren(spur.nutzer), erwartet: maskieren(spur.erwartet), quelle: spur.id };' ' if (spur.ergebnis === \"ok\") {' ' if (anzahlOk % 2 === 0) { einer.art = \"Kontrolle\"; faelle.push(einer); }' ' anzahlOk = anzahlOk + 1;' ' return;' ' }' ' if (gesehen.includes(einer.eingabe)) { verworfen.push(spur.id); return; }' ' gesehen.push(einer.eingabe);' ' einer.art = \"Fehler\";' ' faelle.push(einer);' '});' >> faelle.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.
Fallbauer schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'faelle.forEach(function (einer, stelle) {' ' console.log(\"Fall \" + (stelle + 1) + \" (\" + einer.art + \", aus \" + einer.quelle + \"): \" + einer.eingabe);' '});' 'console.log(\"Als Duplikat verworfen: \" + verworfen.join(\", \"));' 'const reste = faelle.filter(function (einer) { return einer.eingabe.includes(\"@\") || einer.eingabe.includes(\"1234567\"); });' 'console.log(\"Fälle mit noch personenbezogenen Daten: \" + reste.length);' 'console.log(\"Menge Version 1 mit \" + faelle.length + \" Fällen\");' >> faelle.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.
Fälle aus den Spuren bauen
docker exec -w /home/node/project agent node faelle.jsHier 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 Fallbauer ausgibt
| Zeile | Was sie zeigt |
|---|---|
| Fälle 1 bis 4 | drei Fehler und eine Kontrolle, personenbezogene Daten ersetzt |
| Verworfen | t5 |
| Personenbezogene Daten übrig | 0 |
| Menge | Version 1 mit 4 Fällen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Probieren Sie es aus
Tipp
Fügen Sie in spuren.js eine Spur hinzu, deren Nutzertext eine Adresse wie [email protected] enthält, und starten Sie erneut. Der Fall sollte [E-Mail] zeigen. Löschen Sie dann den Aufruf von maskieren und sehen Sie, was durchsickert.
Ein häufiger Fehler
Warnung
Viele maskieren nur die Nachricht des Nutzers. Der erwartete Text, die Spur-ID und die Werkzeugargumente können dieselbe Adresse enthalten. Maskieren Sie jedes Feld, das Sie behalten, oder behalten Sie nur die nötigen, und prüfen Sie die fertige Menge auf das, was verschwunden sein sollte.