Der Spickzettel zur zweiten Hälfte des Seminars KI-Features im eigenen Produkt: Sobald das Feature Werkzeuge aufruft, Vorgänge auslöst und in Betrieb geht. Wie belegbare Antworten überhaupt entstehen — Aufgabentypen, Aufruf, Schema, Retrieval —, steht auf dem ersten Blatt: KI-Features: belastbar antworten.
Maßgeblich für API-Details ist die Herstellerdokumentation; dieses Blatt trifft eine Auswahl — die Entscheidungsraster, die einen Modellwechsel überleben.
Werkzeuge: lesend und schreibend trennen
| Werkzeug | Art | Bestätigung |
|---|---|---|
| Datensatz suchen | lesend | nein |
| Verfügbarkeit prüfen | lesend | nein |
| Frist prüfen | lesend | nein |
| Rückruf anlegen | schreibend | ja |
| Position vormerken | schreibend | ja |
Lesend und schreibend werden im Code getrennt gehalten, nicht nur in der Tabelle: jede schreibende Aktion ist bestätigungspflichtig.
Die Werkzeugbeschreibung ist selbst ein Prompt — sie braucht den Zweck in einem Satz, wann das Werkzeug zu verwenden ist und wann ausdrücklich nicht, was es zurückgibt und welche Einschränkungen gelten:
{
"name": "verfuegbarkeit_pruefen",
"description": (
"Prüft den Lagerbestand zu einer aktiven "
"Katalognummer. Nur für aktive Nummern; "
"ausgelaufene Teile über teil_suchen. "
"Gibt Bestand und Lieferzeit zurück."),
"input_schema": SCHEMA_KATALOGNUMMER,
}
Ohne den Hinweis auf ausgelaufene Teile ruft das Modell die Prüfung falsch auf.
Modul: Werkzeuge: das Modell darf handeln
Fehlermeldungen gehen in den Prompt
| Schlecht | Gut |
|---|---|
Fehler 404 | Katalognummer unbekannt; ausgelaufene Teile über teil_suchen |
Interner Fehler | Bestandssystem nicht erreichbar; später erneut versuchen |
Ungültige Eingabe | Baujahr muss zwischen 2016 und 2026 liegen |
Ein Werkzeugfehler ist kein Ausnahmefall, sondern ein Ergebnis — er wird zurückgegeben, damit das Modell sinnvoll weitermachen kann. Keine Stapelabbilder und keine Datenbankfehler im Klartext: Sie landen im Kontext.
Modul: Werkzeuge: das Modell darf handeln
Workflow oder Agent
| Workflow genügt | Agent lohnt |
|---|---|
| Schritte stehen vorher fest | Zahl der Schritte hängt vom Fall ab |
| Ein Werkzeug je Anfrage | Werkzeuge in wechselnder Folge |
| Ergebnis in einem Zug | Zwischenergebnisse steuern das Weitere |
Im Zweifel Workflow — der Umbau zum Agenten ist später leicht, der Rückbau nicht. Fällt die Wahl auf einen Agenten, stellt sich die Frage nach der Bauform:
| Bauform | Schleife | Ausführung |
|---|---|---|
| Selbst geschrieben | eigener Code | eigener Code |
| Schleifenhelfer des SDK | Bibliothek | eigener Code |
| Gehosteter Agent | Anbieter | Anbieter |
Für Features auf internen Systemen sind die ersten beiden meist die richtige Wahl: Die Werkzeuge bleiben im eigenen Code und unter eigenen Rechten. Jede Schleife braucht einen Deckel — nach Runden und nach Kosten:
for runde in range(MAX_RUNDEN):
antwort = aufruf(verlauf)
if antwort.stop_reason != "tool_use":
return antwort
if kosten.ueberschritten():
return abbruch("Kostendeckel", verlauf)
verlauf += werkzeuge_ausfuehren(antwort)
return abbruch("Rundenzahl", verlauf)
Modul: Vom Workflow zum Agenten
Wenn der Kontext wächst
| Weg | Preis |
|---|---|
| Alte Werkzeugergebnisse entfernen | Bezug auf Früheres geht verloren |
| Verlauf zusammenfassen | eigener Modellaufruf, kann Fehler einführen |
| Zwischenergebnisse auslagern | mehr Code, gezieltes Zurückholen nötig |
| Vorgang kleiner schneiden | Frage entsteht gar nicht erst |
Die letzte Zeile ist für die meisten Produktfeatures die richtige Antwort. Wer zusammenfasst, verliert leicht den Beleg — und bricht damit die Belegpflicht.
Modul: Vom Workflow zum Agenten
Goldstandard und Prüfungen nach Aufwand
| Fallart | Zweck |
|---|---|
| Einfache Fälle | Grundfunktion absichern |
| Schwierige Fälle | Grenzen sichtbar machen |
| Fälle ohne Antwort im Bestand | Verweigerung prüfen |
| Fälle mit Widerspruch | Umgang mit Konflikten prüfen |
| Fälle mit Bezeichnern und Nummern | Wortlautsuche prüfen |
Erzeugte Fragen sind zu glatt und treffen die Sprache der Nutzer nicht — der Datensatz entsteht aus echten Fällen.
| Prüfung | Aufwand |
|---|---|
| Trefferquote des Retrievals | kein Modell nötig |
| Pflichtangaben vorhanden | Textvergleich |
| Verbotene Angaben abwesend | Textvergleich |
| Verweigerung erkannt | Feld im Schema |
| Belege auffindbar | Vergleich mit der Fundstelle |
| Verständlichkeit, Vollständigkeit | Modell als Prüfer |
Die Reihenfolge hält den teuren Teil klein — das ist ihr eigentlicher Zweck. Ein Modell als Prüfer hat bekannte Schlagseiten: Es bevorzugt längere Antworten und den eigenen Stil, besonders bei gleichem Modell auf beiden Seiten. Ohne Kalibrierung gegen menschliche Urteile bleibt die Zahl bedeutungslos.
Modul: Evaluierung: die Qualität messbar machen
Angriffsfläche und Gegenmittel
| Angriff | Wirkung |
|---|---|
| Eingeschleuste Anweisung | Regeln des Betreibers werden übergangen |
| Datenabfluss über die Antwort | Interna erreichen den Anfragenden |
| Überhöhte Werkzeugrechte | Schaden über die Auskunft hinaus |
| Kostenangriff | Rechnung statt Ausfall |
Die Gegenmittel sitzen im Code, nicht im Prompt. Prompt Injection kommt dabei nicht nur aus der Eingabe: Alles, was indiziert wird, kann eine Anweisung enthalten — Tickets, Anhänge, PDF fremder Herkunft. Werkzeugergebnisse sind nicht vertrauenswürdiger als Nutzereingaben.
Rechte werden unabhängig vom Modell geprüft, mit der Identität aus der Sitzung:
def rueckruf_anlegen(args, sitzung):
werkstatt = sitzung.werkstatt_id # nie aus args
if not darf_rueckruf(werkstatt):
return fehler("nicht berechtigt")
return vorschlag_anlegen(werkstatt, args)
Steht die Kennung in args, kann das Modell eine andere liefern — die Prüfung
wäre wertlos.
| Missbrauch | Gegenmittel |
|---|---|
| Zweckentfremdung als allgemeines Modell | enge Aufgabenbeschreibung, Themenfilter |
| Sehr lange Eingaben | Obergrenze für die Eingabelänge |
| Viele Anfragen | Anfragebegrenzung je Nutzer |
| Absichtlich schwierige Fälle | Kostendeckel je Vorgang |
Die sechs Fragen vor der Auslieferung: Sind fremde Inhalte im Prompt gekennzeichnet? Prüft der Code Rechte unabhängig vom Modell? Ist jede schreibende Aktion bestätigungspflichtig? Wird die Ausgabe maskiert und validiert? Gibt es Grenzen für Länge, Häufigkeit und Kosten? Ist protokolliert, was zur Aufklärung nötig ist?
Modul: Sicherheit
Latenz zerlegen, statt das Modell zu wechseln
| Abschnitt | Ansatzpunkt |
|---|---|
| Einbettung der Frage | selten das Problem |
| Suche | Filter vor der Suche, Index prüfen |
| Neuordnung | Kandidatenzahl senken |
| Modellaufruf | Kontext kürzen, Vorspann cachen, streamen |
| Werkzeugaufrufe | nebenläufig ausführen, Abfrage optimieren |
Das Modell zu wechseln ist selten der erste und fast nie der beste Schritt. Wo Antwortzeit keine Rolle spielt — nächtliche Auswertungen, Vorabklassifizierung, Zusammenfassungen —, gehört die Arbeit in die Stapelverarbeitung.
Der Cache fällt lautlos aus. Er erzeugt keinen Fehler, nur Kosten, und die Ursache ist ohne Kennzahl praktisch nicht zu finden. Die vier häufigsten: Datum oder Uhrzeit in der Systemanweisung · eine Vorgangsnummer im Vorspann statt in der Nutzernachricht · eine je Nutzer anders sortierte Werkzeugliste · ein Datenobjekt ohne stabile Feldreihenfolge.
Modul: Kosten, Latenz und Betrieb
Was protokolliert wird
| Feld | Wofür |
|---|---|
| Frage und Zeitpunkt | Rekonstruktion des Falls |
| Fundstellen mit Kennung | war die richtige Stelle dabei? |
| Prompt-Version und Modell | Zuordnung zu einer Fassung |
| Werkzeugaufrufe mit Argumenten | Nachvollzug ausgelöster Vorgänge |
| Abbruchgrund | abgeschnittene und verweigerte Antworten |
| Token und Kosten | Auswertung je Anfragetyp |
Nutzerkennungen pseudonymisiert, Löschfristen vor dem Start festlegen. Vier Kennzahlen tragen den laufenden Betrieb: Verweigerungsquote und Anteil unplausibler Antworten, Trefferquote des Caches, Kosten je Vorgang, Latenz je Abschnitt.
Modul: Kosten, Latenz und Betrieb
Typische Fallen
- Werkzeugrechte am Modell festmachen statt an der Sitzung.
- Nebenläufigkeit einbauen, ohne die Werkzeuge dafür sicher zu machen — oder ein fehlgeschlagenes Ergebnis weglassen und Wiederholungen provozieren.
- Den Verlauf unbegrenzt wachsen lassen und die Grenze im Betrieb entdecken.
- Kontextpflege einbauen, obwohl der Vorgang von Natur aus kurz ist.
- Zusammenfassungen erzeugen, ohne ihre Qualität je zu prüfen.
- Erzeuger und Prüfer dasselbe Modell sein lassen.
- Bei rotem Evaluierungslauf die Grenze senken statt die Ursache zu suchen.
- Den Evaluierungslauf nur von Hand starten und ihn nach drei Wochen vergessen.
- Die Abwehr gegen Prompt Injection allein in die Systemanweisung schreiben.
- Ein internes Datenobjekt vollständig zurückgeben, weil es gerade zur Hand ist.
- Protokolldaten in den Prompt spiegeln, um das Debuggen zu erleichtern.
- Die Trefferquote des Caches nicht überwachen — der Ausfall zeigt sich erst auf der Rechnung.