Bildanalyse mit GPT-4.1-mini und Structured Outputs
In diesem Tutorial lernen wir, wie man Bilder mit einem multimodalen KI-Modell analysiert und die Ergebnisse direkt als strukturierte Daten zurückgibt. Dabei verwenden wir GPT-4.1-mini mit Azure OpenAI und Structured Outputs.
Anstatt für jede Aufgabe einen separaten Service zu verwenden, können wir ein Bild zusammen mit unseren Anweisungen an das Modell senden und beispielsweise eine Beschreibung, Tags, erkannte Objekte und OCR-Text extrahieren.
Der wichtige Punkt dabei ist: Die Antwort der KI soll nicht einfach ein beliebiger Text sein. Unsere Anwendung benötigt eine definierte Datenstruktur. Dafür verwenden wir JSON Schema mit Pydantic.
Voraussetzungen
- Python muss auf Ihrem Computer installiert sein.
- Ein Azure OpenAI Deployment mit GPT-4.1-mini muss vorhanden sein.
- Grundkenntnisse in Python und FastAPI.
- Grundkenntnisse in REST APIs und JSON.
- Ein Azure OpenAI Client muss im Backend eingerichtet sein.
Schritt 1: Pydantic-Schema definieren
Zuerst definieren wir mit Pydantic die Struktur, die unsere Anwendung von der KI erwartet:

Diese Klasse definiert gleichzeitig den Vertrag für unsere Anwendung und das Schema für die strukturierte Antwort des Modells. Dadurch müssen wir das JSON Schema nicht manuell als Dictionary erstellen.
Schritt 2: Bild und Prompt an das Modell senden
Das Bild wird im Backend eingelesen und anschließend als Base64 Data URL an das Modell übergeben.
Zusätzlich senden wir einen Prompt, der beschreibt, welche Informationen aus dem Bild extrahiert werden sollen. Zum Beispiel:

Der Benutzer sieht dabei nur die Upload-Funktion. Die eigentlichen Anweisungen zur Bildanalyse bleiben im Backend.
Schritt 3: Structured Outputs verwenden
Jetzt kommt der wichtige Teil. Anstatt das Modell einfach aufzufordern, JSON zurückzugeben, verwenden wir Structured Outputs:

Mit text_format=AnalysisResult verwenden wir unsere Pydantic-Klasse als Schema für die Antwort.
Das Modell erhält dadurch eine definierte Struktur und unser Backend kann das Ergebnis direkt als AnalysisResult verwenden:

Wir müssen also nicht mehr selbst versuchen, Markdown-Codeblöcke zu entfernen oder den zurückgegebenen Text manuell in JSON umzuwandeln.
Schritt 4: Ergebnis an das Frontend zurückgeben
Da unser FastAPI-Endpunkt ebenfalls AnalysisResult verwendet, können wir das Ergebnis direkt zurückgeben:

Das Frontend erhält anschließend eine vorhersehbare Struktur:

Warum Structured Outputs?
Ein einfacher Prompt wie „Antworte nur mit JSON“ kann funktionieren, ist aber kein idealer Vertrag zwischen einer KI und einer Anwendung.
Mit Structured Outputs definieren wir die erwartete Struktur explizit.
Das bringt einige Vorteile:
- Das Backend erhält eine vorhersehbare Datenstruktur.
- Das Pydantic-Modell kann gleichzeitig für die API und das KI-Ergebnis verwendet werden.
- Man benötigt weniger manuellen JSON-Parsing-Code.
- Das Frontend kann direkt mit einer definierten Struktur arbeiten.
- Der Prompt muss nicht das komplette JSON-Format beschreiben.
Structured Outputs als Vertrag
Beim Aufbau der Anwendung ist mir aufgefallen, dass das Modell manchmal Informationen zurückgeben kann, die tatsächlich nicht im Bild vorhanden sind, zum Beispiel einen falschen Preis oder ein falsches Objekt. Das ist eine typische KI-Halluzination. Structured Outputs verhindert Halluzinationen nicht, bietet aber einen zuverlässigen Vertrag zwischen der KI und der Anwendung.
Indem wir die erwarteten Felder und Datentypen mit Pydantic definieren, weiß das Backend genau, welche Struktur es erwarten kann. Um Halluzinationen zu reduzieren, habe ich außerdem klare Anweisungen in den Prompt aufgenommen, wie zum Beispiel: „Erfinde keine Preise oder Links. Wenn die Information nicht zuverlässig erkannt werden kann, gib einen leeren Wert zurück.“
Diese Kombination macht die Anwendung vorhersehbarer: Structured Outputs schützt die Struktur, während klare Prompts und Validierung helfen, die Daten zu schützen.
OCR oder multimodale KI?
Für reine Texterkennung gibt es bei Azure spezialisierte OCR- und Document-Intelligence-Lösungen. Diese sind besonders interessant, wenn es hauptsächlich darum geht, Text, Layout, Tabellen oder Positionen zuverlässig zu extrahieren.
In unserem Fall wollen wir jedoch nicht nur Text erkennen. Wir möchten das gesamte Bild analysieren und verschiedene Informationen daraus extrahieren.
Deshalb kann ein multimodales Modell wie GPT-4.1-mini eine interessante Alternative sein:
Bild + Anweisungen → Modell → strukturierte Daten
Damit können wir Bildverständnis und strukturierte Datenextraktion in einem Schritt kombinieren.
Fazit
Mit Azure OpenAI und GPT-4.1-mini können wir relativ einfach eine Anwendung bauen, die Bilder analysiert und die Ergebnisse direkt in eine für unsere Software nutzbare Struktur umwandelt.
Der entscheidende Punkt ist dabei nicht nur das verwendete Modell, sondern auch der Vertrag zwischen KI und Anwendung.
Mit Pydantic + Structured Outputs wird aus einer freien KI-Antwort eine strukturierte API-Antwort.
So kann die KI nicht nur Text generieren, sondern als eine zusätzliche Verarbeitungsschicht zwischen einem Bild und unserer Anwendung eingesetzt werden.
Ich hoffe, dieses kurze Tutorial war hilfreich.
Now let’s code!