Zum Hauptinhalt Zur Navigation

ChatGPT: Verlässliche, strukturierte Ausgaben

OpenAI bringt mit dem Structured-Output-Feature eine verlässliche Möglichkeit, die Ausgabe einiger seiner Modelle zu strukturieren. Wir erklären, wie das funktioniert.
/ Fabian Deitelhoff
12 Kommentare News folgen (öffnet im neuen Fenster)
Die LLMs von OpenAI können nun mit strukturierten Daten umgehen. (Bild: KI-generiert mit Stable Diffusion XL)
Die LLMs von OpenAI können nun mit strukturierten Daten umgehen. Bild: KI-generiert mit Stable Diffusion XL

OpenAIs Structured Outputs markiert einen wichtigen Fortschritt in der Anwendung von Sprachmodellen. Diese Innovation ermöglicht die zuverlässige Generierung strukturierter Daten direkt aus LLMs, was die Präzision erhöht und den Nachbearbeitungsaufwand drastisch reduziert. Die Flexibilität des Features macht es zu einem vielseitigen Werkzeug für verschiedenste Anwendungen.

Für Entwickler bedeutet dies eine erhebliche Vereinfachung des Workflows und eine Steigerung der Produktivität. Unternehmen profitieren von verbesserten Integrationsmöglichkeiten von KI in bestehende Systeme, was zu effizienteren Prozessen und innovativen Anwendungen führt.

Der Hintergrund

Die rasante Entwicklung von Large Language Models (LLMs) hat die Art und Weise, wie wir mit künstlicher Intelligenz interagieren, grundlegend verändert. Die Modelle zeigen beeindruckende Fähigkeiten in der Verarbeitung und Generierung natürlicher Sprache.

Jedoch stellt die Erzeugung strukturierter Daten eine bedeutende Herausforderung dar. Entwickler stehen oft vor dem Problem, dass die Ausgaben von LLMs zwar informativ, aber unstrukturiert sind. Das erschwert die direkte Integration in bestehende Systeme und Datenbanken erheblich.

Die manuelle Nachbearbeitung und Strukturierung dieser Daten ist zeitaufwendig und fehleranfällig. Zudem kann die Inkonsistenz in den Ausgabeformaten zu Schwierigkeiten bei der Automatisierung von Prozessen führen. OpenAI möchte mit einem Feature dagegen steuern.

Structured Outputs ist ein wichtiger Schritt von OpenAI, der darauf abzielt, die Generierung strukturierter Daten aus Large Language Models (LLMs) zu verbessern. Dieses Feature ermöglicht es, präzise und zuverlässige strukturierte Ausgaben direkt aus KI-Modellen zu erhalten, ohne aufwendige Nachbearbeitungen.

Structured Outputs: Übersicht und Vergleich

Die Funktionsweise von Structured Outputs basiert auf der Verwendung von JSON-Schemas. Entwickler können ein spezifisches Schema definieren, das die gewünschte Struktur und die Eigenschaften der Ausgabedaten festlegt. Das LLM wird dann angewiesen, seine Antworten exakt gemäß diesem Schema zu generieren. Dies geschieht durch die Nutzung des Parameters response_format in der API-Anfrage, der das gewünschte JSON-Schema spezifiziert.

Ein wesentlicher Vorteil dieses Ansatzes liegt in seiner Zuverlässigkeit. Interne Evaluierungen von OpenAI haben gezeigt, dass das neueste Modell eine beeindruckende 100-prozentige Genauigkeit bei der Einhaltung komplexer JSON-Schemas erreicht. Dies stellt eine signifikante Verbesserung gegenüber früheren Versionen dar, bei denen die Zuverlässigkeit bei weniger als 40 Prozent lag.

Traditionelle Strukturierungsmethoden wie JSON und XML haben lange Zeit als Standard für den Datenaustausch gedient. Im KI-Kontext zeigen sie jedoch Limitationen. Während diese Formate Daten effektiv strukturieren können, bieten sie keine inhärente Kontrolle über die Generierung der Daten selbst. Bei der Arbeit mit LLMs führt dies oft zu Inkonsistenzen und erfordert umfangreiche Nachbearbeitung.

Structured Outputs überwindet diese Einschränkungen, indem es die Strukturierung direkt in den Generierungsprozess integriert. Im Gegensatz zur manuellen Strukturierung, die fehleranfällig und zeitaufwendig sein kann, erzwingt Structured Outputs die Einhaltung des vorgegebenen Schemas bereits während der Modellantwort.

Dies eliminiert die Notwendigkeit komplexer Parsing-Logik und reduziert potenzielle Fehlerquellen erheblich. Das nachfolgende Listing 1 zeigt ein kurzes Beispiel für die Nutzung der strukturierten Ausgabe.

        

import OpenAI from "openai";
import { zodResponseFormat } from "openai/helpers/zod";
import { z } from "zod";

const openai = new OpenAI();
const CalendarEvent = z.object({
  name: z.string(),
  date: z.string(),
  participants: z.array(z.string()),
});

const completion = await openai.beta.chat.completions.parse({
  model: "gpt-4o-2024-08-06",
  messages: [
    { role: "system", content: "Extrahiere die Informationen des Events." },
    { role: "user", content: "Lisa und Max gehen am Freitag zur Gamescom." },
  ],
  response_format: zodResponseFormat(CalendarEvent, "event"),
});

const event = completion.choices[0].message.parsed;

Structured Outputs ist in den neuesten Modellen von OpenAI verfügbar. Dazu gehören die Modelle gpt-4o-mini-2024-07-18 und später, sowie gpt-4o-2024-08-06 und später. Ältere Modelle wie gpt-4-turbo und frühere Modelle verwenden stattdessen den JSON-Modus, wenn nicht anders angegeben. Aktiviert wird der Modus über die Angabe von:

    

response_format: { type: "json_schema", json_schema: {"strict": true, "schema": ...} }

Das Feature ist über die OpenAI-API in zwei Formen verfügbar: einmal beim Einsatz von Function Calling. Diese Funktionsaufrufe sind bei einer Anwendung nützlich, die eine Brücke zwischen den Modellen und der Funktionalität einer Anwendung schlägt.

Dem Modell lässt sich beispielsweise der Zugriff auf Funktionen geben, die eine Datenbank abfragen, um einen KI-Assistenten zu erstellen, der Benutzern bei ihren Bestellungen helfen kann, oder Funktionen, die mit der Benutzeroberfläche interagieren können. Umgekehrt sind strukturierte Ausgaben über response_format besser geeignet, wenn ein strukturiertes Schema sinnvoller ist, das verwendet wird, wenn das Modell dem Benutzer antwortet, anstatt wenn das Modell ein Tool aufruft.

Technische Details

Die technische Implementierung von Structured Outputs basiert auf der Verwendung von JSON-Schemas, einem leistungsstarken Werkzeug zur Definition und Validierung von JSON-Datenstrukturen. Entwickler spezifizieren das gewünschte Ausgabeformat durch ein detailliertes JSON-Schema, das die Struktur, Datentypen und Einschränkungen der erwarteten Antwort festlegt. Dieses Schema wird dann als Parameter in der API-Anfrage übergeben, wodurch das Modell angewiesen wird, seine Ausgabe exakt nach diesen Vorgaben zu generieren.

Im Vergleich zur Function-Calling-Funktionalität geht Structured Outputs einen Schritt weiter. Während Function Calling es ermöglicht, spezifische Funktionen mit strukturierten Eingaben aufzurufen, bietet Structured Outputs eine umfassendere Kontrolle über das gesamte Ausgabeformat. Es erlaubt die Definition komplexerer Strukturen und gewährleistet eine höhere Zuverlässigkeit bei der Einhaltung des vorgegebenen Schemas.

Ein wesentlicher Unterschied liegt in der Flexibilität und Präzision. Structured Outputs ermöglicht es, jedes beliebige JSON-Schema zu definieren, was eine feinere Granularität und Anpassung der Ausgabe erlaubt. Dies ist besonders nützlich für Anwendungen, die sehr spezifische oder komplexe Datenstrukturen erfordern.

Zudem bietet Structured Outputs eine verbesserte Fehlerbehandlung. Das Modell ist darauf trainiert, das vorgegebene Schema strikt einzuhalten, was die Wahrscheinlichkeit von Strukturfehlern in der Ausgabe drastisch reduziert. Das vereinfacht die nachgelagerte Verarbeitung und Integration der generierten Daten erheblich. Entwickler müssen sich somit keine Sorgen machen, dass das Modell einen erforderlichen Schlüssel auslässt oder einen ungültigen Enum-Wert vorgaukelt, weil es halluziniert.

Fabian Deitelhoff(öffnet im neuen Fenster) ist IT-Leiter bei Sportnavi.de GmbH und mit brickobotik in der Mint-Bildung und mit Loosely.Ruhr in der Cross-Plattform-Softwareentwicklung tätig. Seine Schwerpunkte sind Low- und No-Code und digitale Geschäftsmodelle.


Relevante Themen