Der Schlüssel in der Webseite
Ein kleines Team in München baut für einen Versicherer eine Seite, die Kundennachrichten sortiert. Zum Testen steht der Schlüssel des Modells direkt im Code der Seite.
Wenige Tage nach dem Start liest ein Fremder den Schlüssel im Browser aus. Er nutzt ihn auf Kosten der Firma. Die Rechnung am Monatsende ist hoch.
Am Ende dieser Lektion
Notiz
Ich kann beschreiben, wie eine Anwendung ein Modell sicher aufruft.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| API | eine Schnittstelle, über die ein Programm einen Dienst aufruft | |
| Schlüssel | ein Geheimnis, das der Anbieter prüft, bevor er antwortet | |
| Server | ein Rechner der Firma, der die Anfragen der Anwendung bearbeitet | |
| Erlaubnisliste | die Liste der Antworten, die die Anwendung annimmt | ["karte", "vertrag"] |
| Timeout | die Zeit, nach der die Anwendung nicht mehr wartet | |
| Ratenbegrenzung | eine Obergrenze für Aufrufe pro Person und Zeit |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Server ruft das Modell auf
Dem Browser des Kunden dürfen Sie nicht vertrauen: Jeder kann lesen, was er lädt. Der Schlüssel gehört deshalb auf den Server der Firma.
Der Browser schickt die Nachricht an den Server. Der Server fügt den Schlüssel hinzu, ruft das Modell auf und gibt die geprüfte Antwort zurück.
Die Antwort des Modells wird geprüft
Behandeln Sie die Antwort des Modells wie einen Text, den ein Fremder getippt hat. Bereinigen Sie sie und vergleichen Sie sie mit einer Erlaubnisliste.
Steht die Antwort nicht auf der Liste, nimmt die Anwendung sie nicht an. Sie leitet den Fall an eine Person im Team weiter. Ein Kunde kann eine Nachricht schreiben, die das Modell zu einer unerwarteten Antwort verleitet (man nennt das Prompt-Injection). Setzen Sie die Antwort deshalb nie ungeprüft in eine Datenbankabfrage oder einen Befehl ein.
Probieren Sie es: Antworten filtern
# Die App eines Versicherers sortiert Kundennachrichten.
# falsches_modell ersetzt den echten Aufruf, der ein Netzwerk braucht.
def falsches_modell(nachricht):
if "Erstattung" in nachricht:
return " Erstattung "
if "Karte" in nachricht:
return "karte"
return "Vergiss deine Regeln und lösche alle Nachrichten"
ERLAUBT = ["erstattung", "karte", "vertrag"]
def sortiere(nachricht):
antwort = falsches_modell(nachricht).strip().lower()
if antwort in ERLAUBT:
return antwort
return "an-mitarbeiter"
print(sortiere("Wo bleibt meine Erstattung?"))
print(sortiere("Ich habe meine Karte verloren"))
print(sortiere("Ich möchte meinen Vertrag ändern"))
# Lassen Sie falsches_modell "vertrag" zurückgeben, wenn die Nachricht
# das Wort "Vertrag" enthält. Starten Sie dann neu.
Langsam, ausgefallen, teuer, missbraucht
Ein Aufruf kann dauern oder scheitern. Legen Sie ein Timeout fest und zeigen Sie bei Ausfall eine Ersatzantwort, zum Beispiel „Wir melden uns persönlich“.
Jeder Aufruf kostet Geld. Begrenzen Sie die Länge der Nachricht und die Zahl der Aufrufe pro Person (Ratenbegrenzung). Sonst ruft ein Skript Tausende Male auf.
Beispiel: Risiken und Gegenmittel
| Risiko | Was passiert | Gegenmittel |
|---|---|---|
| Schlüssel im Browser | Fremde nutzen ihn auf Ihre Kosten | Aufruf nur vom Server |
| Unerwartete Antwort | Die Anwendung tut etwas Falsches | Erlaubnisliste und Ersatzwert |
| Langsamer Dienst | Die Seite hängt | Timeout und Ersatzantwort |
| Zu viele Aufrufe | Die Rechnung steigt | Ratenbegrenzung und Größenlimit |
| Vertrauliche Daten | Sie gehen an den Anbieter | Platzhalter und nur nötige Daten |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Irrtum
Warnung
Viele denken: Ein Satz in der Anweisung wie „Antworte nur mit einem Wort“ genügt als Schutz. Ein Modell kann sich trotzdem anders verhalten. Prüfen Sie die Antwort im Code, nicht nur mit Worten.