JSON von der KI bekommen: verlässliche strukturierte Daten
Prompts, um Rechnungen und Formulare in JSON oder CSV zu extrahieren, fehlende Felder zu behandeln und das Ergebnis zu validieren, bevor es in eine Tabelle geht.
Du bittest die KI, die Angaben einer Rechnung „als JSON“ auszugeben, und sie antwortet: „Gerne! Hier ist das gewünschte JSON“, gefolgt von einem Codeblock und dann einer Anmerkung, die ihre Entscheidungen erklärt. Am nächsten Tag heißt das Feld betrag plötzlich summe, das Datum steht ausgeschrieben da, und der Preis wird zu "125,50 €", einer Zeichenkette. Für einen Menschen ist das lesbar. Für ein Skript oder eine Tabelle ist es ein Ausfall.
JSON ist ein Textformat, das Daten in Paaren aus Name und Wert ablegt. Du musst nicht programmieren können, um davon zu profitieren, und wenn dein Ziel eine Tabellenkalkulation ist, geht CSV noch einfacher. In beiden Fällen bleibt das Prinzip dasselbe: Du legst das Format vorab fest, ohne Interpretationsspielraum.
Das Schema beschreiben, statt „als JSON“ zu sagen
Das Wort „JSON“ allein lässt dem Modell die freie Wahl bei Struktur, Namen und Typen. Du musst ihm die vollständige Form geben. Nimm einen Gastronomen, der seine Lieferantenrechnungen nachverfolgen will.
Vorher:
Extrahiere die Angaben dieser Rechnung als JSON.
Nachher:
Extrahiere die Daten der untenstehenden Rechnung. Antworte ausschließlich mit einem gültigen JSON-Objekt, ohne Text davor oder danach und ohne Markdown-Codeblock-Markierungen.
Halte dich genau an diese Struktur und diese Feldnamen:
{
"lieferant": "Zeichenkette",
"rechnungsnummer": "Zeichenkette",
"datum": "JJJJ-MM-TT",
"gesamt_netto": Zahl,
"gesamt_brutto": Zahl,
"positionen": [
{ "bezeichnung": "Zeichenkette", "menge": Zahl, "einzelpreis_netto": Zahl }
],
"kategorie": "getraenke" | "frischware" | "trockenware" | "sonstiges"
}
Regeln:
- Zahlen werden mit Dezimalpunkt geschrieben, ohne Währungssymbol.
- Fehlt eine Angabe oder ist sie unleserlich, setze null. Rate nie und berechne sie nicht.
- Füge kein Feld hinzu.
Rechnung:
[TEXT DER RECHNUNG]Vier Entscheidungen machen den Unterschied. Das Schema wird vollständig gezeigt, also ändern sich die Feldnamen nicht mehr. Das Datum hat ein eindeutiges Format: 2026-03-04 wird nicht von Land zu Land verwechselt. Die Kategorie ist eine geschlossene Liste, was vermeidet, dass „Getränke“, „Getränk“ und „Weine“ in derselben Datei stehen. Und schließlich gibt das null der KI einen ehrlichen Ausweg, wenn die Information fehlt.
Fehlende Felder, Quelle der meisten Fehler
Wenn ein Feld in deinem Schema verpflichtend ist und die Information nicht im Dokument steht, neigt das Modell dazu, eine zu erzeugen. Eine Umsatzsteuer-Identifikationsnummer kann dort auftauchen, wo keine war. Das JSON ist dann vollkommen gültig und falsch.
Zwei Vorkehrungen helfen. Die erste ist die oben genannte null-Regel, für jedes Feld. Die zweite ist, den Beleg zu verlangen, wenn viel auf dem Spiel steht: Füge ein Feld quellenauszug hinzu, das die Passage abschreibt, aus der der Wert stammt. So kannst du an einer Stichprobe schnell vergleichen. Zur allgemeinen Logik geht der Artikel zum Verringern von Halluzinationen weiter.
Der häufigste Fall: eine CSV-Datei für Excel
Ist dein Ziel eine Tabellenkalkulation, vergiss JSON: Verlang direkt eine CSV-Datei. Eine Falle, die du kennen solltest: Mit deutschen Regionaleinstellungen erwartet Excel in der Regel ein Semikolon als Trennzeichen und ein Komma für die Dezimalstellen. Eine CSV-Datei mit Kommas kann sich daher so öffnen, dass alles in einer einzigen Spalte steht.
Beispiel für eine Kassenwartin eines Vereins, die per E-Mail eingegangene Anmeldungen umwandelt, hier mit erfundenen Daten:
Wandle die untenstehenden Nachrichten in eine CSV-Tabelle um, ohne jeden Text drumherum und ohne Codeblock-Markierungen. Parameter: - Trennzeichen: Semikolon ; - Dezimalstellen: Komma - erste Zeile, genau so: name;vorname;aktivitaet;betrag;zahlungsart;zu_pruefen - aktivitaet: aus [LISTE DER AKTIVITÄTEN] - zahlungsart: scheck, ueberweisung, bar oder leer, wenn nicht angegeben. Eine Zeile pro angemeldeter Person. Meldet eine Nachricht zwei Personen an, mache zwei Zeilen. Ist eine Angabe nicht vorhanden oder mehrdeutig, lass das Feld leer und setze „ja“ in zu_pruefen. Nachrichten: [NACHRICHTEN EINFÜGEN]
Füge das Ergebnis in eine .csv-Datei ein oder in deine Tabellenkalkulation über die Funktion zum Textimport. Achtung bei personenbezogenen Daten: Bevor du Nachrichten echter Personen einfügst, sieh dir an, was man nicht in einen Chatbot einfügen sollte, und die Bedingungen deines Tarifs.
Das Ergebnis jedes Mal validieren
Eine strukturierte Ausgabe kann auf drei Arten kaputtgehen: Der Text ist kein gültiges JSON, die Struktur entspricht nicht dem Schema, oder die Werte sind falsch. Die ersten beiden lassen sich automatisch kontrollieren. Hier ein kurzes Python-Skript, das anhält, sobald ein Problem auftritt:
import json
FELDER = {"lieferant", "rechnungsnummer", "datum", "gesamt_netto",
"gesamt_brutto", "positionen", "kategorie"}
KATEGORIEN = {"getraenke", "frischware", "trockenware", "sonstiges"}
def validieren(antwort: str) -> dict:
daten = json.loads(antwort) # bricht ab, wenn es kein JSON ist
if set(daten) != FELDER:
raise ValueError(f"Falsche Felder: {set(daten) ^ FELDER}")
if daten["kategorie"] not in KATEGORIEN:
raise ValueError(f"Unbekannte Kategorie: {daten['kategorie']}")
brutto, netto = daten["gesamt_brutto"], daten["gesamt_netto"]
if brutto is not None and netto is not None and brutto < netto:
raise ValueError("Gesamtbetrag brutto kleiner als netto")
return daten
Die Prüfung des Bruttobetrags ist schlichter Fachverstand, und sie fängt Fehler ab, die kein Schema sehen würde. Plane bei den Werten eine Stichprobenkontrolle ein: Vergleiche zehn Dokumente von Hand, bevor du der Verarbeitung vertraust, und danach ab und zu einige.
Ohne Code kannst du das Modell in einer neuen Unterhaltung bitten, dir verdächtige Zeilen zu melden, aber es kann welche übersehen. Eine in der Tabellenkalkulation neu berechnete Summe bleibt sicherer.
Auf die API umsteigen, wenn das Volumen steigt
Wenn du Dutzende Dokumente über ein Programm verarbeitest, ist der Prompt allein nicht die beste Lösung. Die APIs der wichtigsten Anbieter bieten Optionen, um die Ausgabe auf ein JSON-Schema festzulegen. Ihre Namen und Garantien ändern sich, sieh in die Dokumentation deines Anbieters, wenn du dich damit befasst. Diese Optionen garantieren dir eine schemakonforme Struktur, keine richtigen Werte: Behalte die null-Regel und die fachlichen Kontrollen bei.
Bei einem Ablauf in mehreren Schritten dient eine JSON-Ausgabe auch als Brücke zwischen zwei Modellen oder zwei Prompts, wie in einer Prompt-Kette.
Mach den Test an drei echten Dokumenten
Wähle drei Dokumente derselben Art, darunter ein schlecht gemachtes: eine gescannte Rechnung, eine unvollständige Nachricht. Schick sie mit einem Schema aus nur fünf Feldern durch den Prompt deiner Wahl und vergleiche dann jeden Wert mit dem Original. Das schlecht gemachte Dokument sagt dir, welche Regeln du hinzufügen musst, bevor du das Schema erweiterst.