pro Model HubDocs
Funktionen

Strukturierte Ausgaben

Antworten als gültiges JSON, optional nach einem festen Schema.

Mit response_format erzwingst du, dass die Antwort gültiges JSON ist. Das ist die Grundlage für Extraktion, Klassifikation und alles, was dein Code weiterverarbeitet. Alle aktuellen Chat-Modelle unterstützen beide Varianten.

JSON nach Schema (empfohlen)

Mit json_schema hält sich die Antwort an dein JSON Schema – Feldnamen, Typen und Pflichtfelder stimmen garantiert.

import json

schema = {
    "type": "object",
    "properties": {
        "kategorie": {"type": "string", "enum": ["Rechnung", "Technik", "Vertrag", "Sonstiges"]},
        "dringend": {"type": "boolean"},
        "zusammenfassung": {"type": "string"},
    },
    "required": ["kategorie", "dringend", "zusammenfassung"],
    "additionalProperties": False,
}

response = client.chat.completions.create(
    model="mistral-small-24b",
    messages=[
        {"role": "system", "content": "Ordne Support-Anfragen ein."},
        {"role": "user", "content": "Seit heute früh ist unser Shop offline, bitte sofort melden!"},
    ],
    response_format={"type": "json_schema", "json_schema": {"name": "ticket", "schema": schema, "strict": True}},
)
ticket = json.loads(response.choices[0].message.content)
print(ticket["kategorie"], ticket["dringend"])

Das Schema kannst du auch aus einer Pydantic-Klasse erzeugen: Ticket.model_json_schema().

Beliebiges JSON

{"type": "json_object"} erzwingt gültiges JSON ohne festes Schema. Beschreibe die gewünschten Felder dann im Prompt – ohne Schema wählt das Modell Feldnamen teils selbst (z. B. einwohnerzahl statt einwohner).

response = client.chat.completions.create(
    model="gemma-4-31b",
    messages=[{"role": "user", "content": "Nenne die größte Stadt Bayerns als JSON mit den Feldern stadt und einwohner."}],
    response_format={"type": "json_object"},
)

Tipps

  • Erwähne im Prompt, dass JSON erwartet wird, und beschreibe die Bedeutung der Felder – das Schema legt nur die Form fest, nicht den Inhalt.
  • Setze max_tokens großzügig genug. Wird die Ausgabe abgeschnitten (finish_reason: "length"), ist das JSON unvollständig.
  • Bei eingeschaltetem Reasoning gilt das Schema für content, der Gedankengang steht wie immer in reasoning_content.

Auf dieser Seite