Wenn Code die Antwort eines Modells liest, ist „meistens die richtige Form“ ein Fehler. Prompting für strukturierte Ausgabe ist die Gesamtheit der Praktiken, mit denen ein Modell jedes Mal Daten liefert, die Ihr Programm parsen kann: ein definiertes Format, ausdrückliche Einschränkungen und Validierung.
Drei Zuverlässigkeitsstufen
| Stufe | Wie | Garantie |
|---|---|---|
| Nur Prompt | Das Format im Prompt beschreiben | Keine. Meist richtig, manchmal nicht |
| JSON-Modus | Die API um eine JSON-Antwort bitten | Gültiges JSON, aber nicht Ihr Schema |
| Schema-beschränkte Ausgabe | Der API ein JSON Schema mitgeben | Die Ausgabe entspricht dem Schema |
Verwenden Sie die stärkste Stufe, die Ihr Anbieter bietet. OpenAI, Anthropic und Google bieten alle eine Möglichkeit, eine Antwort auf ein Schema oder das Eingabeschema eines Werkzeugs zu beschränken. Der Prompt zählt auf jeder Stufe, denn ein Schema steuert die Form der Ausgabe und der Prompt ihren Inhalt.
Ausgabebeschränkungen im Prompt formulieren
Nennen Sie das Format, die Felder, die Typen und die erlaubten Werte. Sagen Sie dann, was nicht erscheinen darf.
Extract the order details from the email in the tags.
Return a JSON object with exactly these fields:
- "order_id": string, as written in the email
- "items": array of {"name": string, "quantity": integer}
- "total": number, without currency symbol
- "currency": one of "USD", "EUR", "GBP"
If a field is not present in the email, use null.
Return only the JSON object, with no explanation and no code fence.
<email>
{{email}}
</email>
Vier Details in diesem Prompt verhindern die meisten Fehler:
- „Genau diese Felder“ hindert das Modell daran, wohlmeinende Extras hinzuzufügen.
- Erlaubte Werte für
currencyverhindern „US dollars“ und „$“. - Eine Null-Regel gibt dem Modell eine korrekte Möglichkeit, „nicht gefunden“ zu sagen, damit es keinen Wert erfindet.
- „Gib nur das JSON zurück“ entfernt den Kommentarsatz, der
JSON.parsebricht.
Entwerfen Sie das Schema für das Modell
Ein Schema ist Teil des Prompts. Das Modell liest Feldnamen und Beschreibungen als Anweisungen.
- Benennen Sie Felder nach ihrem Inhalt.
shipping_addressist besser alsaddr2. - Fügen Sie Beschreibungen hinzu bei Feldern, deren Bedeutung nicht offensichtlich ist, einschließlich Einheit und Format: „ISO-8601-Datum, UTC“.
- Verwenden Sie Enums, wo immer ein Feld eine feste Wertemenge hat.
- Halten Sie es flach. Tiefe Verschachtelung erhöht die Fehler. Teilen Sie eine sehr komplexe Extraktion in verkettete Prompts.
- Stellen Sie die Überlegung vor die Antwort. Wenn Sie eine Erklärung und ein Urteil wollen, ordnen Sie die Felder
"reasoning"und dann"verdict". Ein Modell schreibt Felder der Reihe nach, sodass eine zuerst geschriebene Überlegung das Urteil beeinflussen kann.
Jenseits von JSON
Strukturierte Ausgabe ist nicht nur JSON.
- Markdown mit festen Überschriften eignet sich für Antworten, die Menschen lesen: „Verwende genau diese Überschriften: Zusammenfassung, Risiken, Nächste Schritte.“
- XML-artige Tags lassen sich leicht mit einem regulären Ausdruck extrahieren und vertragen Freitext im Inneren:
<answer>…</answer>. - Ein einzelnes Token ist das zuverlässigste Format überhaupt. Bitten Sie bei der Klassifikation nur um das Label.
- CSV oder Tabellen funktionieren für kleine, regelmäßige Daten; Anführungsregeln werden bei Freitext fragil.
Wählen Sie das einfachste Format, das die Information trägt.
Längen- und Inhaltsbeschränkungen
Ausgabebeschränkungen betreffen auch Umfang und Stil:
- At most 3 bullet points, each under 20 words.
- Use only facts from the document. If the document does not say, write "not stated".
- Write in the present tense.
Geben Sie Größen als Zahlen an. „Kurz“ ist keine Einschränkung, auf die sich ein Parser oder ein Layout verlassen kann.
Immer validieren
Validieren Sie selbst bei schema-beschränkter Ausgabe, bevor Sie die Daten verwenden.
- Parsen und prüfen Sie das Schema jeder Antwort. Eine Antwort kann abgeschnitten werden, wenn sie das Ausgabe-Token-Limit erreicht, und hinterlässt dann abgeschnittenes JSON.
- Prüfen Sie die Semantik, die das Schema nicht ausdrücken kann: Die Summe stimmt mit der Summe der Positionen überein, das Datum liegt nicht in der Zukunft.
- Legen Sie den Fehlerpfad fest. Wiederholen Sie einmal mit dem Validierungsfehler im Prompt, dann weichen Sie aus oder markieren zur Prüfung.
- Führen Sie strukturierte Ausgaben nie blind aus. Ein Feld, das zu einer SQL-Klausel, einem Dateipfad oder einem Shell-Argument wird, braucht dieselbe Bereinigung wie Nutzereingaben. Siehe Prompt-Sicherheit.
Häufige Fehlerbilder
| Fehler | Ursache | Lösung |
|---|---|---|
| Text vor oder nach dem JSON | Keine „nur“-Anweisung | Ergänzen oder den JSON-Modus nutzen |
| In einen Codeblock gepackt | Gewohnheit des Modells | „Kein Codeblock“ sagen oder im Code entfernen |
| Erfundene Werte | Keine Regel für fehlende Daten | Eine Null- oder „nicht angegeben“-Regel ergänzen |
| Zusätzliche Felder | Offene Formulierung | „Genau diese Felder“ sagen; zusätzliche Eigenschaften verbieten |
| Abgeschnittene Ausgabe | Ausgabelimit erreicht | Limit erhöhen oder Aufgabe teilen |
| Uneinheitliche Enum-Schreibweise | Werte nicht aufgelistet | Die erlaubten Werte auflisten |
Den Prompt vor der Ausführung prüfen
Ein fehlendes Ausgabeformat ist der häufigste Befund bei Prompts, die Code speisen. Der PromptFlowEngine-Prompt-Analyzer meldet es, ebenso fehlende Längenvorgaben und nicht abgegrenzte Variablen. Die JSON-Extraktionsvorlage ist ein vollständiges Beispiel, das alle Prüfungen besteht.
Wie sich das in Anwendungscode einfügt, steht unter Prompt Engineering für Entwickler.