Sende Kundendaten an ein Large Language Model, ohne jemals einen echten Namen, eine E-Mail-Adresse oder ein Datum offenzulegen.
Diese Aufgabe ist eigenständig und nutzt ein fertiges, funktionierendes Demo-Skript aus dem Repo bpm-pizza-pII. Du erklärst, führst und erweiterst dieses Skript — das Repo selbst wird nicht angefasst.
Repo bpm-pizza-pII klonen, dann Abhängigkeiten installieren:
cd bpm-pizza-pII pip install -r requirements.txt
Zugangsdaten stehen NICHT im Projektverzeichnis, sondern in ~/.env (Home-Verzeichnis):
# ~/.env
PRESIDIO_API_KEY=...
PRESIDIO_API_USER=...
PRESIDIO_ANALYZER_URL=...
PRESIDIO_ANONYMIZER_URL=...
PRESIDIO_AIMAGE_REDACTOR_URL=...
LITELLM_PIZZA_URL=...
LITELLM_PIZZA_KEY=...
LITELLM_PIZZA_MODEL_1=...
Skript starten:
python3 pii_roundtrip.py --count 3
Das Skript erzeugt zufällige (nicht pseudonymisierte) Kundendatensätze: Vorname, Nachname, E-Mail-Adresse auf aipizzasim.com, Geburtsdatum, Bestelldatum, bestellter Artikel und ein Vorfall. Genau diese Daten dürfen das Modell niemals erreichen.
In einem echten Setup käme dieser Datensatz aus einer internen Kundendatenbank oder einer vergleichbaren Quelle.
=== RAW record #1 === first_name: Sofia last_name: Bergmann email: [email protected] date_of_birth: 1987-03-14 order_date: 2026-07-22 item: Pizza Quattro Stagioni incident: pizza arrived cold, box crushed
Der Datensatz geht an den Presidio-Analyzer; die erkannten Entitäten werden vom Presidio-Anonymizer in reversible Platzhalter verwandelt, zum Beispiel <PERSON_1>, <EMAIL_ADDRESS_1>, <DATE_TIME_1> und <DATE_TIME_2>. Die hier ausgegebene Zuordnung ist der Pseudonymisierungsschlüssel.
=== PSEUDONYMIZED record #1 === Dear <PERSON_1>, your order of Pizza Quattro Stagioni on <DATE_TIME_1> arrived cold and the box was crushed. Please contact us at <EMAIL_ADDRESS_1>. Your date of birth on file: <DATE_TIME_2>. --- pseudonymization key --- <PERSON_1> -> Sofia Bergmann <EMAIL_ADDRESS_1> -> [email protected] <DATE_TIME_1> -> 2026-07-22 <DATE_TIME_2> -> 1987-03-14
Der pseudonymisierte Datensatz geht zusammen mit dem Prompt an das LLM. Business Case: Die Bestellung wurde beim Transport beschädigt, das Modell schreibt eine Entschuldigungs-E-Mail, gewährt einen Kulanzgutschein über 140 EUR und legt weitere 10 EUR drauf, falls der Kunde vor seinem nächsten Geburtstag erneut bestellt. Die Antwort enthält weiterhin ausschließlich Platzhalter.
=== LLM ANSWER record #1 === Dear <PERSON_1>, We are very sorry that your order arrived cold and the box was crushed on <DATE_TIME_1>. As an apology, we are issuing a EUR 140.00 goodwill voucher to <EMAIL_ADDRESS_1>. Order again before your birthday (<DATE_TIME_2>) and we will add another EUR 10.00. Best regards, Roberto's Pizzeria
Die Platzhalter werden anhand des Pseudonymisierungsschlüssels wieder durch die Originalwerte ersetzt — das ist die E-Mail, die der Kunde tatsächlich erhält.
=== RE-IDENTIFIED record #1 (sent to the customer) === Dear Sofia Bergmann, We are very sorry that your order arrived cold and the box was crushed on 2026-07-22. As an apology, we are issuing a EUR 140.00 goodwill voucher to [email protected]. Order again before your birthday (1987-03-14) and we will add another EUR 10.00. Best regards, Roberto's Pizzeria
--count 5 --seed 42 aus und erkläre, warum die Platzhalter-Nummerierung pro Datensatz neu beginnt.PRESIDIO_AIMAGE_REDACTOR_URL, um PII aus einem Bild zu schwärzen.