Structured Output
Mit Structured Output können Sie das Modell dazu bringen, Antworten in einem exakten JSON-Schema zurückzugeben. Das ist nützlich für die Weiterverarbeitung in Pipelines, Datenextraktion oder API-Integrationen.
Unterstützte Modelle
Abschnitt betitelt „Unterstützte Modelle“| Modell | JSON-Modus | JSON-Schema |
|---|---|---|
gemma4-26b | Ja | Ja |
qwen3.6 | Ja | Ja |
qwen3.5-27b | Ja | Ja |
devstral-small-2 | Ja | Ja |
ministral-3-14b | Ja | Ja |
JSON-Modus
Abschnitt betitelt „JSON-Modus“Der einfachste Weg: Das Modell gibt garantiert gültiges JSON zurück, aber ohne festes Schema.
from openai import OpenAI
client = OpenAI( base_url="https://maki.uni-mannheim.de/v1", api_key="your-api-key",)
response = client.chat.completions.create( model="gemma4-26b", messages=[ { "role": "user", "content": "Nenne drei deutsche Universitäten mit Gründungsjahr als JSON.", } ], response_format={"type": "json_object"},)
print(response.choices[0].message.content)# {"universitäten": [{"name": "Universität Heidelberg", "gründungsjahr": 1386}, ...]}JSON-Schema (Structured Output)
Abschnitt betitelt „JSON-Schema (Structured Output)“Für volle Kontrolle: Sie definieren ein JSON-Schema, und das Modell hält sich exakt daran.
from openai import OpenAIfrom pydantic import BaseModel
client = OpenAI( base_url="https://maki.uni-mannheim.de/v1", api_key="your-api-key",)
class University(BaseModel): name: str city: str founded: int
class UniversityList(BaseModel): universities: list[University]
response = client.beta.chat.completions.parse( model="gemma4-26b", messages=[ { "role": "user", "content": "Nenne drei deutsche Universitäten.", } ], response_format=UniversityList,)
result = response.choices[0].message.parsedfor uni in result.universities: print(f"{uni.name} ({uni.city}), gegründet {uni.founded}")Ohne Pydantic
Abschnitt betitelt „Ohne Pydantic“Sie können das Schema auch direkt als Dictionary übergeben:
response = client.chat.completions.create( model="gemma4-26b", messages=[ { "role": "user", "content": "Nenne drei deutsche Universitäten.", } ], response_format={ "type": "json_schema", "json_schema": { "name": "university_list", "schema": { "type": "object", "properties": { "universities": { "type": "array", "items": { "type": "object", "properties": { "name": {"type": "string"}, "city": {"type": "string"}, "founded": {"type": "integer"}, }, "required": ["name", "city", "founded"], }, } }, "required": ["universities"], }, }, },)- Pydantic bevorzugen:
client.beta.chat.completions.parse()mit Pydantic-Modellen ist der einfachste und sicherste Weg. - Prompt hilft: Auch mit Schema-Erzwingung liefert das Modell bessere Ergebnisse, wenn der Prompt die gewünschte Struktur beschreibt.
- Große Schemata: Komplexe verschachtelte Schemata funktionieren, können aber die Antwortzeit erhöhen.