Nicht unterstützte Typen und Einschränkungen
Auf dieser Seite
Was Schemata nicht können
Das Verständnis der Grenzen strukturierter Ausgaben ist ebenso wichtig wie das Beherrschen ihrer Möglichkeiten. Die Grok-API unterstützt bestimmte JSON-Schema-Einschränkungen nicht. Der Versuch, diese zu verwenden, führt zu Fehlern oder unerwartetem Verhalten.
Die drei Hauptbeschränkungen
allOf — Zusammensetzung nicht erlaubt
Das Keyword allOf in JSON Schema kombiniert mehrere Teil-Schemata, die ein Objekt gleichzeitig erfüllen muss. Die Grok-API unterstützt diese Funktion nicht.
// FUNKTIONIERT NICHT
{
"allOf": [
{ "properties": { "nom": { "type": "string" } } },
{ "properties": { "age": { "type": "number" } } }
]
}
Alternative: Verwenden Sie ein einzelnes Objekt mit allen Eigenschaften:
// FUNKTIONIERT
{
"type": "object",
"properties": {
"nom": { "type": "string" },
"age": { "type": "number" }
}
}
minLength / maxLength — keine Längenbeschränkungen für Strings
Sie können das Modell nicht dazu zwingen, einen String mit einer minimalen oder maximalen Länge zu erzeugen.
// FUNKTIONIERT NICHT
{
"properties": {
"code": {
"type": "string",
"minLength": 3,
"maxLength": 10
}
}
}
Alternative: Definieren Sie die Einschränkung im Prompt anstelle des Schemas:
messages=[{
"role": "user",
"content": "Generieren Sie einen Produktcode zwischen 3 und 10 Zeichen."
}]
Das Modell folgt der Anweisung in den meisten Fällen, ist aber nicht wie bei einer Schema-Einschränkung garantiert.
minItems / maxItems — keine Größenbeschränkungen für Arrays
Sie können eine minimale oder maximale Anzahl von Elementen in einem Array nicht erzwingen.
// FUNKTIONIERT NICHT
{
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"maxItems": 5
}
}
}
Alternative: Verwenden Sie den Prompt, um das Modell zu führen:
messages=[{
"role": "user",
"content": "Listen Sie zwischen 1 und 5 relevante Tags für diesen Artikel auf."
}]
Weitere Einschränkungen, die Sie kennen müssen
Keine regulären Ausdrücke
Die API unterstützt keine pattern-Einschränkungen für Strings. Sie können ein E-Mail-Format, eine UUID oder eine Telefonnummer nicht über das Schema erzwingen.
// FUNKTIONIERT NICHT
{
"properties": {
"email": {
"type": "string",
"pattern": "^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$"
}
}
}
Keine Standardwerte
Das Keyword default hat keine Wirkung. Wenn ein Feld im Schema enthalten ist, wird das Modell es immer befüllen.
Keine Konditionalen
Die JSON-Schema-Keywords if, then und else sind nicht verfügbar.
Die Strategie: Schema + Prompt
Der beste Ansatz kombiniert beides:
- Das Schema garantiert die Struktur: Feldnamen, Typen, Verschachtelung
- Der Prompt führt die Inhalte: Längen, spezifische Formate, Geschäftsregeln
class Report(BaseModel):
title: str
summary: str
key_points: list[str]
score: float
category: str
messages=[{
"role": "user",
"content": """Analysieren Sie diesen Text und erstellen Sie einen Bericht.
- Die Zusammenfassung muss 2-3 Sätze lang sein.
- Listen Sie genau 5 Hauptpunkte auf.
- Die Punktzahl liegt zwischen 0 und 10.
- Kategorie aus: positiv, negativ, neutral."""
}]
Das Schema garantiert Typen und Struktur. Der Prompt steuert Werte und Inhaltseinschränkungen.
Wichtige Erkenntnisse
allOf,minLength,maxLength,minItemsundmaxItemswerden nicht unterstütztpattern,defaultundif/then/else-Einschränkungen werden ebenfalls nicht unterstützt- Verwenden Sie
anyOfanstelle vonallOf, wann immer möglich - Übertragen Sie Inhaltseinschränkungen an den Prompt
- Die Kombination aus Schema (Struktur) + Prompt (Inhalt) ist die optimale Strategie