Zum Inhalt springen

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.

ModellJSON-ModusJSON-Schema
gemma4-26bJaJa
qwen3.6JaJa
qwen3.5-27bJaJa
devstral-small-2JaJa
ministral-3-14bJaJa

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}, ...]}

Für volle Kontrolle: Sie definieren ein JSON-Schema, und das Modell hält sich exakt daran.

from openai import OpenAI
from 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.parsed
for uni in result.universities:
print(f"{uni.name} ({uni.city}), gegründet {uni.founded}")

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.