CH NEO-ZÜRICH AUSGABE
WETTER · GRAU 13°C
BLEND DES TAGES · 07/ROGUE
EST. 2027
DIE AEC CYBER MORGENZEITUNG

PAZ Kaffi

DESIGN · ABBRUCH · KOFFEIN · DEPESCHE
AUSGABE 0919 · 19 September 2026
SENDUNG 04:42 MEZ
2'400 BOGEN GEDRUCKT
LESEZEIT · 47 MIN
Retry-Wrapper löschen — die API formt das JSON
Akademie
FRAME · 06:50
19-09-2026

Retry-Wrapper löschen — die API formt das JSON

Strukturierte Ausgaben: LLM liefert Daten statt Prosa. Anthropics output_config formt die Form — Sie prüfen die Werte.

Am 14. September 2026 führte das Benchmark-Haus BenchLM.ai einen Test für strukturierte Ausgaben durch und meldete eine Zahl, die ans Monitor gehört: GPT-5.6 Terra gab bei allen 87 abgeschlossenen Calls gültiges JSON zurück und lag trotzdem 10-mal falsch; Claude Sonnet 5 gab bei 86 von 87 Calls gültiges JSON zurück und lag 2-mal falsch. Unterschiedliche Noten, identische Lektion — kein Provider behauptet, dass ein Schema eine Antwort wahr macht. Merken Sie sich diese Lücke. Sie ist der Grund, warum dieses Stück existiert, und warum die Datei, die Sie gleich löschen werden, für sich allein nie genügt hätte.

Sie kennen diese Datei. Sie passten einen Absatz eines Baubeschrieb ins Modell, forderten einen Raumplan an und erhielten Prosa. Sie schrieben “nur JSON” und bekamen JSON in Klammern. Sie stritten die Klammern weg und bekamen ein Komma am Ende. Sie schrieben try/except json.JSONDecodeError mit Retry, dann einen zweiten, dann einen Stripper. Sechs Wochen später will es keiner im Team anfassen. Diese Datei ist das, was zu löschen ist.

Das Werkzeug: Diese Anleitung ruht auf einer Sache: dem offiziellen Anthropic Python SDK (pip install anthropic) — der gleiche client.messages-Aufruf, den Sie bereits kennen, plus zwei Methoden, die das Parsing übernehmen, das Sie von Hand schreiben. Ein Nachmittag eines Architekten ist es wert, weil es “Modell gibt Text zurück, den Sie hoffen, ist JSON” in “Modell gibt Daten zurück, die Ihr Scheduler lädt” umwandelt — und das funktioniert für Raumprogramme, Kostenlisten oder jeden Archicad-Automation-Job, der in einer Tabelle endet.

Der Mechanismus ist einfach. Sie hängen ein JSON-Schema über output_config={"format": schema} an messages.create() an, und die Antwort ist auf diese Form beschränkt. Noch besser: client.messages.parse() validiert die Antwort gegen Ihr Schema — der Retry-Wrapper-Job, server-seitig verschoben und ins SDK integriert. Für die andere Hälfte des Problems, wenn das Modell etwas aufrufen statt zurückgeben soll, setzen Sie strict: true als Top-Level-Feld auf der Tool-Definition (neben name / description / input_schema) — nicht auf tool_choice — mit additionalProperties: false und gefülltem required. Dann validiert tool_use.input exakt.

Wenn Sie diesen Trick 2024 gelernt haben, machen Sie zuerst mit einer Gewohnheit Schluss. Das Assistant-Prefill — das Seeding des Assistant-Turns mit einer öffnenden {, sodass das Modell in JSON weitermachen musste — funktioniert nicht mehr. Es gibt einen 400 auf Opus 5, Sonnet 5 und der 4.6/4.7/4.8-Familie zurück. Der ältere Top-Level-Parameter output_format ist ebenfalls veraltet; die aktuelle Form ist output_config: {format: ...}. Diesen alten Trick und seinen Ersatz in einem Atemzug zu nennen, ist das Nützlichste, das dieses Stück für jeden tun kann, der vor zwei Jahren die API zuletzt angefasst hat.

Einrichtung:

python -m venv .venv
.venvScriptsactivate        # Windows  (source .venv/bin/activate auf macOS/Linux)
pip install anthropic
setx ANTHROPIC_API_KEY "sk-ant-..."   # export ANTHROPIC_API_KEY=... auf macOS/Linux
python -c "import anthropic; print(anthropic.__version__)"

Erste Schritte:

  1. Schema definieren — ein Objekt mit einem rooms-Array; jeder Room trägt name (string), area_m2 (number) und floor (string); setzen Sie additionalProperties: false und markieren Sie alle drei als required.
  2. Den Aufruf machen mit messages.parse(), so validiert das SDK für Sie. Standard ist claude-opus-5; eine kurze Extraktion wie diese ist genau die Form, wo claude-haiku-4-5 kostenmässig vertretbar ist ($1,00 / $5,00 pro Million Token ein/aus, gegen $5,00 / $25,00 für Opus 5, mit Sonnet 5 dazwischen bei $2,00 / $10,00) — das ist eine Anmerkung, keine Regel; die Modellwahl ist Ihre.
  3. Das Ergebnis lesen: Merken Sie sich, dass response.content eine Liste von Content-Blöcken ist, keine Zeichenkette — prüfen Sie block.type, bevor Sie block.text anfassen. Unterschätzen Sie max_tokens nicht; eine abgeschnittene Antwort ist ein Retry, den Sie doppelt bezahlen. ~16000 ist ein sinnvoller Standard ohne Streaming; eine reine Klassifikation kann bei ~256 sitzen.
import anthropic
client = anthropic.Anthropic()

schema = {
  "type": "object", "additionalProperties": False, "required": ["rooms"],
  "properties": {"rooms": {"type": "array", "items": {
    "type": "object", "additionalProperties": False,
    "required": ["name", "area_m2", "floor"],
    "properties": {
      "name":    {"type": "string"},
      "area_m2": {"type": "number"},
      "floor":   {"type": "string"}}}}}}}

spec = "Erdgeschoss: Wohnraum 32 m2, Kueche 12 m2, WC 4 m2."

msg = client.messages.parse(
    model="claude-opus-5",
    max_tokens=16000,
    output_config={"format": schema},
    messages=[{"role": "user", "content": spec}],
)

←HEUTE: Sept 2026 — gültiges JSON ist jetzt eine Einzeiler-Garantie; korrekte Werte aber nicht. →3012: die Büros, die einen Content-Check neben jeden Schema-Check schrieben, haben nie einen plausibel-falschen Raumplan in eine Ausschreibung eingereicht. Kern: das Schema beweist den Container; nur eine vertraute Zahl beweist den Inhalt.

Hier ist der Absatz, der eine SDK-Anleitung in ein PAZ-Stück verwandelt. Schema-gültig ist nicht gleich korrekt. Eine Antwort kann jeden Typ in Ihrem Schema erfüllen und trotzdem sagen, ein Raum sei 23 m² statt 32. Strukturierte Ausgaben entfernen Parse-Fehler und genau null Wahrheits-Fehler — was genau BenchLM.ai mass: der Container war 87-mal perfekt, der Inhalt 10-mal falsch — und das Modell, das besser scorte, verpasste immer noch zwei. Das ist die gleiche Disziplin, bei der PAZ’s openBIM-Arbeit immer wieder ankommt: ein erhaltenes Modell sollte validiert werden, bevor es vertraut wird, nicht nachdem es fehlschlägt — buildingSMART’s IDS-Gewohnheit, eine Anforderung automatisch statt per Auge zu prüfen. Ein Check, der nicht fehlschlagen kann, ist kein Check.

Atelier: Für ein Schweizer Atelier, das Raumprosa in einen Plan quetscht, ist das Risiko nicht der Crash, den Sie sehen — es ist die saubere Tabelle, die keiner re-liest. Der nächste Schritt: jeden Extraktionsaufruf wrappen, so dass er die aufsummierte Geschossfläche neben der Fläche ausgibt, die Sie bereits im Plan halten, und die Zeile nicht schreibt, wenn sie auseinandergehen. Ein Assertion, einmal hinzugefügt, schliesst die exakte Lücke, die BenchLM fand. Diese Gewohnheit in einen wiederholbaren internen Ablauf zu verwandeln, ist die Art von praktischer Fähigkeit, die PAZGPT und unsere PAZ Workshops trainieren.

Hack: Setzen Sie die Summe, die Sie extrahierten, neben die Geschossfläche, der Sie vertrauen, und verweigern Sie das Ergebnis, wenn sie sich nicht abstimmen. Das Schema garantiert die Form bereits; dies ist die Zeile, die den Inhalt sichert.

rooms = msg.parsed["rooms"]
extracted = sum(r["area_m2"] for r in rooms)
known_floor = 48.0                     # die Zahl aus dem Plan, dem Sie bereits vertrauen
print(f"extracted {extracted} m2  vs  known {known_floor} m2")
assert abs(extracted - known_floor) < 2.0, "areas don't reconcile — read the prose again"

Dieser assert ist die ganze Lektion. Schritte eins und zwei sind die Mechanik; Schritt drei — die Zahl neben der Zahl — ist der Teil, der die nächste Modell-Release überlebt, wenn sich die API-Oberfläche wieder verschoben hat und der Prefill-Trick längst Vergangenheit ist.

Zum Lernen:

Löschen Sie den Retry-Wrapper — aber erst, nachdem Sie die Zeile geschrieben haben, die die Werte prüft, denn das ist die Zeile, die der Wrapper nie hatte.

GEMELDET AUS
MIT-UNTERZEICHNER
PAZ Academy
VERTRAUEN
HIGH
NACHDRUCKE
© PAZ - PARAMETRIC ACADEMY ZURICH · ALLE RECHTE VORBEHALTEN

PAZ Kaffi · interdisziplinäre Redaktionsarbeit, geleitet von der PAZ Academy

⚑ FEHLER MELDEN · KORREKTUR EINSENDEN
◂ ZURÜCK ZUR TITELSEITE · PAZ KAFFI

© 2026 PAZ Academy.