Daten entfernen und was dabei kaputtgeht
Schwärzen heißt, personenbezogene Daten aus einer Nachricht zu entfernen, bevor sie weitergeht. Eine Support-App kann eine Telefonnummer schwärzen, bevor sie ein Modell um eine Antwort bittet.
Der Haken: Die Antwort braucht diese Nummer vielleicht. Wie Sie schwärzen, entscheidet, ob Sie sie zurückholen können.
Am Ende dieser Lektion
Notiz
Ich kann personenbezogene Daten entfernen und sagen, was dabei kaputtgeht.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Schwärzen | personenbezogene Daten aus einem Text entfernen | |
| Maske | ein Wert, ersetzt durch seine Art | [EMAIL] |
| Platzhalter | ein Ersatz, der sich zurücktauschen lässt | [EMAIL_1] |
| Zuordnung | die private Liste, welcher Platzhalter welcher Wert ist | |
| Zurückholen | die echten Werte wieder einsetzen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Es gibt drei Wege zu schwärzen
Eine Maske ersetzt einen Wert durch seine Art, zum Beispiel [EMAIL]. Zwei verschiedene Adressen werden beide zu [EMAIL], Sie können sie also weder unterscheiden noch zurückholen.
Ein Platzhalter ist nummeriert, zum Beispiel [EMAIL_1]. Sie führen eine private Zuordnung von Platzhaltern und Werten und senden sie nie. Einen Wert zu vernichten heißt: Er ist für immer weg, und es gibt keine Zuordnung.
Durchgerechnetes Beispiel: eine Adresse, drei Wege
| Weg | Was das Modell sieht | Kann die Antwort sie nennen? | Können Sie sie zurückholen? |
|---|---|---|---|
| Maske | [EMAIL] | Nein | Nein |
| Platzhalter | [EMAIL_1] | Ja, als Platzhalter | Ja, aus Ihrer Zuordnung |
| Vernichten | Nichts | Nein | Nein, mit Absicht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Schwärzen kann die Antwort kaputtmachen
Sieht das Modell die Adresse nie, kann es sie nicht schreiben. Eine Antwort wie „Wir schreiben an Ihre Adresse“ ist in Ordnung. Eine Antwort, die die Adresse wiederholen muss, braucht einen Platzhalter.
Platzhalter bringen ein neues Risiko. Das Modell kann einen weglassen oder verändern. Holen Sie nur die Platzhalter zurück, die in der Antwort stehen, und prüfen Sie, dass keiner übrig bleibt.
Ein häufiger Fehler
Warnung
Viele denken, Platzhalter machten Daten anonym. Das stimmt nicht. Sie halten noch die Zuordnung und können die Platzhalter wieder zu Menschen machen. In den Worten der Datenschutz-Grundverordnung ist das Pseudonymisierung, und die Daten bleiben personenbezogen. Das ist eine einfache Zusammenfassung, keine Rechtsberatung.
Die Modellhilfe 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.
Die Modellhilfe 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.
Das Schwärzprogramm schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const text = \"Bitte schreiben Sie an [email protected] oder rufen Sie 01234567890 an. Danke, Anna.\";' 'const zaehler = {};' 'const zuordnung = {};' 'function bereinigen(wort) {' ' let w = wort;' ' while (w.length > 0 && \".,;:?()\".includes(w[w.length - 1])) w = w.slice(0, -1);' ' return w;' '}' > redact.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 Schwärzprogramm schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function artVon(w) {' ' const at = w.indexOf(\"@\");' ' if (at > 0 && w.indexOf(\".\", at) > at + 1) return \"EMAIL\";' ' if (w.length === 11 && w.startsWith(\"01\") && Number.isInteger(Number(w))) return \"TELEFON\";' ' return \"\";' '}' 'function maskieren(t) {' ' return t.split(\" \").map(function (wort) {' ' const w = bereinigen(wort);' ' return artVon(w).length === 0 ? wort : \"[\" + artVon(w) + \"]\" + wort.slice(w.length);' ' }).join(\" \");' '}' >> redact.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 Schwärzprogramm schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function tokenisieren(t) {' ' const bekannt = {};' ' return t.split(\" \").map(function (wort) {' ' const w = bereinigen(wort);' ' const art = artVon(w);' ' if (art.length === 0) return wort;' ' if (bekannt[w] === undefined) {' ' zaehler[art] = (zaehler[art] || 0) + 1;' ' bekannt[w] = \"[\" + art + \"_\" + zaehler[art] + \"]\";' ' zuordnung[bekannt[w]] = w;' ' }' ' return bekannt[w] + wort.slice(w.length);' ' }).join(\" \");' '}' >> redact.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 Schwärzprogramm schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function zurueckholen(t) {' ' let aus = t;' ' Object.keys(zuordnung).forEach(function (k) { aus = aus.split(k).join(zuordnung[k]); });' ' return aus;' '}' 'async function main() {' ' const sicher = tokenisieren(text);' ' console.log(\"maskiert: \" + maskieren(text));' ' console.log(\"mit Platzhaltern: \" + sicher);' ' console.log(\"Zuordnung bleibt hier: \" + JSON.stringify(zuordnung));' ' const q = \"Schreiben Sie eine kurze Antwort auf diese Nachricht. Übernehmen Sie jeden Platzhalter in eckigen Klammern genau. \" + sicher;' ' const probe = \"Vielen Dank. Wir schreiben noch heute an [EMAIL_1] und rufen [TELEFON_1] an.\";' ' const antwort = await fragen([{ role: \"user\", content: q }], probe, 80);' ' console.log(\"Antwort: \" + antwort.text);' ' console.log(\"zurückgeholt: \" + zurueckholen(antwort.text));' '}' 'main();' >> redact.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 Schwärzprogramm ausführen
docker exec -w /home/node/project agent node redact.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 Run ausgibt
| Zeile | Was sie zeigt |
|---|---|
| maskiert: ... [EMAIL] ... [TELEFON] ... | Nur die Arten, nichts lässt sich zurückholen |
| mit Platzhaltern: ... [EMAIL_1] ... [TELEFON_1] ... | Nummerierte Ersatzwerte |
| Zuordnung bleibt hier: {...} | Die private Liste, nie gesendet |
| Antwort: ... | Eine Antwort mit Platzhaltern. Aufgezeichnet, wenn kein Modell antwortet |
| zurückgeholt: ... | Die Platzhalter, zurückgetauscht gegen die erfundenen Werte |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.