Das Ticket mit der Telefonnummer
Personenbezogene Daten aus Prompts herauszuhalten heißt: Das Modell sieht nur, was es für die Aufgabe braucht. Das ist wichtig, weil ein Prompt an einen anderen Dienst geht und oft in einem Protokoll landet.
Ein Support-Tool schickt jedes Ticket an ein Modell, das eine Antwort entwirft. Das Ticket enthält einen Namen, eine Adresse und eine Nummer. Die Antwort braucht nichts davon. Das Tool kann sie durch Platzhalter ersetzen und wieder zurücktauschen.
Am Ende dieser Lektion
Notiz
Ich kann personenbezogene Daten vor einem Modellaufruf durch Platzhalter ersetzen und danach wiederherstellen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Personenbezogene Daten | jede Angabe, die eine lebende Person identifiziert | |
| Datenminimierung | nur senden, was die Aufgabe braucht | |
| Maskieren | einen Wert durch einen Ersatz austauschen | |
| Platzhalter | eine Marke für einen entfernten Wert | [EMAIL_1] |
| Zuordnung | die Tabelle, die jeden Platzhalter mit seinem Wert verbindet |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Senden Sie nur, was die Aufgabe braucht
Fragen Sie zuerst, ob das Modell den Wert überhaupt braucht. Eine Antwort auf eine Beschwerde braucht die Beschwerde, nicht die Telefonnummer. Entfernen Sie, was nicht nötig ist.
Muss die Antwort eine Person nennen, nehmen Sie einen Platzhalter. Das Modell schreibt „Liebe [NAME_1]“, und Ihr eigener Code setzt danach den echten Namen wieder ein.
Beispiel: vorher und nachher
| Wert | An das Modell gesendet | In der Zuordnung behalten |
|---|---|---|
| Anna | [NAME_1] | [NAME_1] ist Anna |
| [email protected] | [EMAIL_1] | [EMAIL_1] ist [email protected] |
| 015112345678 | [TELEFON_1] | [TELEFON_1] ist 015112345678 |
| Anna, nochmals | [NAME_1] | Derselbe Wert behält denselben Platzhalter |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Maskieren hat Grenzen
Eine Regel findet die Formen, die Sie geschrieben haben: ein Wort mit At-Zeichen, eine lange Ziffernfolge, ein Name aus einer Liste. Sie übersieht einen Straßennamen, einen Spitznamen oder eine Nummer mit Leerzeichen.
Maskieren senkt das Risiko also und beseitigt es nie. Testen Sie es an unordentlichen Beispielen und behalten Sie eine Prüfung, die nach Resten sucht.
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\";' '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 || 200 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"Status \" + res.status);' ' return (await res.json()).choices[0].message.content;' > 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' ' } catch (fehler) {' ' console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' ' const liste = [].concat(probe);' ' const runde = nachrichten.filter(function (m) { return m.role === \"assistant\"; }).length;' ' return liste[Math.min(runde, liste.length - 1)];' ' }' '}' '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 Maskier-Skript schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '' 'const namen = [\"Anna\", \"Jonas\"];' 'const ticket = \"Hallo, ich bin Anna. Schreiben Sie an [email protected] oder rufen Sie 015112345678 an. Jonas hat mir gestern geholfen.\";' 'function nurZiffern(text) {' ' return text.length >= 8 && text.split(\"\").every(function (z) { return z >= \"0\" && z <= \"9\"; });' '}' > maskieren.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 Maskier-Skript schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function maskieren(text, namen) {' ' const zuordnung = {};' ' const gesehen = {};' ' const woerter = text.split(\" \");' ' for (let i = 0; i < woerter.length; i++) {' ' let blank = woerter[i];' ' while (blank.endsWith(\".\") || blank.endsWith(\",\")) blank = blank.slice(0, -1);' ' const ende = woerter[i].slice(blank.length);' ' let art = \"\";' ' if (blank.includes(\"@\")) art = \"EMAIL\";' ' if (nurZiffern(blank)) art = \"TELEFON\";' ' if (namen.includes(blank)) art = \"NAME\";' >> maskieren.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 Maskier-Skript schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' if (art === \"\") continue;' ' if (gesehen[blank] === undefined) {' ' const n = Object.keys(zuordnung).filter(function (k) { return k.startsWith(\"[\" + art); }).length + 1;' ' gesehen[blank] = \"[\" + art + \"_\" + n + \"]\";' ' zuordnung[gesehen[blank]] = blank;' ' }' ' woerter[i] = gesehen[blank] + ende;' ' }' ' return { text: woerter.join(\" \"), zuordnung: zuordnung };' '}' >> maskieren.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 Maskier-Skript schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function wiederherstellen(text, zuordnung) {' ' let ausgabe = text;' ' for (const schluessel of Object.keys(zuordnung)) ausgabe = ausgabe.split(schluessel).join(zuordnung[schluessel]);' ' return ausgabe;' '}' 'async function main() {' ' const sicher = maskieren(ticket, namen);' ' console.log(\"An das Modell gesendet: \" + sicher.text);' ' console.log(\"Ein @ ist noch drin: \" + sicher.text.includes(\"@\"));' ' const regel = \"Schreibe eine Antwort in zwei Sätzen an die Kundin. Lass jeden Platzhalter in eckigen Klammern genau so stehen, wie er geschrieben ist.\";' ' const nachrichten = [{ role: \"system\", content: regel }, { role: \"user\", content: sicher.text }];' ' const probe = \"Liebe [NAME_1], danke für Ihre Nachricht. Wir schreiben heute an [EMAIL_1].\";' >> maskieren.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 Maskier-Skript schreiben, Teil 5
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' const antwort = await fragen(nachrichten, probe, 100);' ' console.log(\"Antwort mit Platzhaltern: \" + antwort);' ' console.log(\"Für die Kundin wiederhergestellt: \" + wiederherstellen(antwort, sicher.zuordnung));' ' console.log(\"Protokollzeile: \" + Object.keys(sicher.zuordnung).length + \" Angaben maskiert, Antwort mit \" + antwort.length + \" Zeichen\");' '}' 'main();' >> maskieren.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 Maskier-Skript ausführen
docker exec -w /home/node/project agent node maskieren.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 |
|---|---|
| An das Modell gesendet | Das Ticket mit [NAME_1], [EMAIL_1], [TELEFON_1] und [NAME_2] anstelle der Werte |
| Ein @ ist noch drin | false |
| Antwort mit Platzhaltern | Zwei Sätze, die die Platzhalter behalten. Die Wörter ändern sich bei jedem Lauf |
| Für die Kundin wiederhergestellt | Die Antwort mit den echten Werten wieder eingesetzt |
| Protokollzeile | Anzahlen und eine Länge, ohne persönlichen Text |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Was ein Protokoll enthalten darf
Ein Protokoll lesen mehr Menschen als die Anwendung, und es lebt länger. Protokollieren Sie, was Sie zum Finden eines Fehlers brauchen: eine Anfrage-ID, eine Nutzer-ID, eine Anzahl, eine Zeit, eine Entscheidung.
Protokollieren Sie den Prompt und die Antwort nicht vollständig. Müssen Sie eine zum Debuggen behalten, behalten Sie die maskierte Kopie, kurz und mit Zugriffskontrolle.
Ein häufiger Fehler
Warnung
Viele glauben, nach dem Maskieren des Prompts seien die Protokolle sicher. Die Antwort, die Fehlermeldungen und die ursprüngliche Anfrage können noch die echten Werte enthalten. Prüfen Sie jeden Ort, den der Text durchläuft: Prompt, Antwort, Protokolle und jeden Cache.