Ollama Structured Outputs in der Praxis
Das Ausführen lokaler LLMs führt häufig zu JSON-Parsing-Fehlern. Man weist das Modell an, nur JSON zurückzugeben. Dennoch fügt es Markdown-Fences oder zusätzlichen Text hinzu. Das bringt Ihren Code zum Absturz.
Seit Ollama 0.3.0 lässt sich dies mithilfe des format-Parameters beheben. Dieser zwingt das Modell, einem JSON-Schema zu folgen. Es wird dem Modell physisch unmöglich gemacht, zusätzlichen Text oder Markdown hinzuzufügen.
Ich habe dies mit Gemma4 und Ollama 0.30.7 getestet. Hier sind die Ergebnisse.
Das Problem mit natürlichem Text
Modelle sind auf Konversation trainiert. Sie möchten sagen: „Hier ist Ihr JSON.“ Selbst bei strengen Prompts kapseln sie Antworten oft in Code-Blöcke ein. json.loads() in Python schlägt fehl, sobald es auf diese Blöcke stößt.
Der Geschwindigkeitsvorteil
Die Verwendung des format-Parameters ist wesentlich schneller.
- Ohne Structured Output: 32 Sekunden
- Mit Structured Output: 5 Sekunden
Dies entspricht einer 6,4-fachen Geschwindigkeitssteigerung. Das Modell verschwendet keine Zeit damit, zu entscheiden, wie der Text formatiert werden soll. Es generiert nur Token, die in Ihr Schema passen.
Verwendung von Pydantic für Typsicherheit
Sie müssen JSON-Schemas nicht von Hand schreiben. Verwenden Sie Pydantic-Modelle, um diese automatisch zu generieren.
- Definieren Sie Ihr Pydantic-Modell.
- Verwenden Sie
model_json_schema(), um das Schema zu erstellen. - Übergeben Sie dieses Schema an Ollama.
- Verwenden Sie
model_validate_json(), um die Daten gleichzeitig zu parsen und zu validieren.
Dieser Ansatz ist perfekt für KI-Agenten. Sie können ihn nutzen, um zu entscheiden, welches Tool ein Agent als Nächstes aufrufen soll. Wenn das Modell versucht, einen Tool-Namen zu erfinden, der nicht existiert, fängt Pydantic dies sofort ab.
Aktuelle Einschränkungen
- Tief verschachtelte Schemata können in kleineren Modellen manchmal leere Arrays zurückgeben.
- Optionale Felder geben möglicherweise leere Strings statt
nullzurück. - Große Schemata verbrauchen mehr Ihres Kontextfensters.
Best Practices
- Verwenden Sie einfache Extraktion für kleine Modelle.
- Verwenden Sie Pydantic für die Validierung und die Tool-Auswahl der Agenten.
- Verwenden Sie größere Modelle für komplexe, verschachtelte Daten.
- Fügen Sie eine Retry-Logik hinzu, wenn Pydantic einen Validierungsfehler auswirft.
Hören Sie auf zu hoffen, dass Ihre Prompts funktionieren. Nutzen Sie Structured Outputs, um Ihre lokalen LLM-Pipelines zuverlässig zu machen.
Optionale Lern-Community: https://t.me/GyaanSetuAi