System-Prompts schreiben
Die wichtigste Stellschraube — was du dem Modell als Basis mitgibst.
Der System-Prompt ist das erste, was das Modell bei jeder Anfrage liest. Er bestimmt Rolle, Tonfall, Verhalten. Kleine Änderungen hier haben größere Effekte als jedes neue Tool.
Wo leben Prompts
Jeder Assistant hat seinen eigenen Prompt:
// assistants/inventur.php
'assistants.inventur.prompt' => <<<PROMPT
Du bist der Inventur-Assistent ...
PROMPT,
Wiederverwendbare Snippets legst du in prompts/ ab, z. B. prompts/tone.php:
<?php
return [
'prompts.tone' => 'Antworte kurz, präzise, ohne Floskeln.',
];
Und ziehst sie per String-Concat in deinen Assistant-Prompt.
Struktur, die funktioniert
1. Identität: "Du bist der <Rolle>-Assistent."
2. Scope: "Hilf bei <konkrete Aufgaben>. Lehne anderes höflich ab."
3. Ablauf: Nummerierte Schritte für typische Flows.
4. Tonfall: "Kurz, sachlich. Keine Werbefloskeln."
5. Tool-Hints: "Rufe getOrder auf, wann immer eine Bestellnummer genannt wird."
6. Edge-Cases: "Wenn der Benutzer X sagt, mach Y."
Diese Reihenfolge hilft dem Modell, Prioritäten zu setzen. Identität und Scope zuerst — sonst driftet das Modell in Nachbarthemen ab.
Vom Minimum zum Guten
Minimum (zu dünn):
Du bist ein Bestellungs-Assistent.
Besser:
Du bist der Bestellungs-Assistent für einen Obst-Onlineshop.
Hilf Kund:innen und Mitarbeiter:innen, Bestellungen zu finden,
ihren Status zu prüfen und bei Bedarf zu stornieren.
Ablauf:
1. Bestellnummer erfragen, falls nicht genannt.
2. getOrder aufrufen.
3. Status kurz zusammenfassen.
4. Bei Storno: cancelOrder nur mit expliziter Bestätigung der Kundin.
Sprich die Kundin direkt an. Halte Antworten in 2-3 Sätzen.
Tool-Hinweise im Prompt
Tool-Beschreibungen stehen zwar schon im Tool selbst — aber im Prompt gibst du dem Modell die Orchestrierung. Beispiele:
Rufe getStock auf, wenn nach Mengen oder Beständen gefragt wird.
Rufe getProducts nur zum Nachschlagen von Namen und Preisen.
Damit verhinderst du Verwechslungen, die das Modell sonst aus der Tool-Beschreibung allein nicht ableiten kann.
Was nicht in den Prompt gehört
- Datenlisten („Unsere Produkte sind: 1. Tomaten, 2. Gurken, 3. ..."). Tokens verschwendet. Baue stattdessen ein Tool
getProducts. - Marketing-Sprache („Wir sind die #1 für Obst seit 1987!"). Das Modell lernt daraus keine nützliche Information.
- Sehr lange Beispiele. Ein, zwei prägnante Fälle reichen — zu viele Beispiele zwingen das Modell in Muster-Matching statt Reasoning.
Wenn was nicht klappt
Zuerst: was hat das Modell getan?
tm test-chat "die problematische Frage" --task <slug>
tm history --task <slug>
Dann die Ursache identifizieren:
- Falsche Tool-Wahl → Prompt schärfen, welches Tool wann.
- Zu langes Antworten → Tonfall-Anweisung präzisieren.
- Ignoriert eine Regel → Regel nach vorn setzen, Formulierung verkürzen.
Immer mit tm test-conversations absichern — sonst fixt du eins und brichst zwei.
Prompts iterativ verbessern
Der nützlichste Befehl im Dev-Alltag:
tm optimize-prompt --task <slug>
Analysiert fehlgeschlagene Tests und schlägt konkrete Änderungen vor. Siehe tm optimize-prompt.