Sprachmodelle sind probabilistisch - sie garantieren nicht, dass ihre Ausgabe wohlgeformtes JSON ist, alle Pflichtfelder enthält oder die Wertbeschränkungen respektiert, von denen Ihre Anwendung abhängt. Guardrails AI löst dies, indem es LLM-Aufrufe mit einer Validierungsschicht umhüllt, die auf JSON Schema und Python-Validatoren basiert, und bei nicht konformer Modellausgabe automatisch wiederholt. Dieser Leitfaden erklärt genau, wie es funktioniert und wie man eine zuverlässige Pipeline für strukturierte Ausgaben von Grund auf einrichtet.
Was ist Guardrails AI?
Guardrails AI ist eine Open-Source-Python-Bibliothek, die darauf ausgelegt ist, LLM-Ausgaben zuverlässig und vorhersagbar zu machen. Sie umhüllt jeden LLM-API-Aufruf - OpenAI, Anthropic, Cohere, lokale Modelle - mit einer Validierungspipeline, die die Modellantwort gegen ein benutzerdefiniertes Schema und einen Satz feldbezogener Validatoren prüft, bevor das Ergebnis an Ihren Anwendungscode zurückgegeben wird.
Die Kernabstraktion ist das `Guard`-Objekt. Sie konstruieren einen Guard aus einem Pydantic-Modell oder einer JSON-Schema-Definition, hängen optional Validatoren an einzelne Felder an und rufen dann den Guard auf, statt das LLM direkt anzusprechen. Der Guard übernimmt Prompt-Konstruktion, Antwort-Parsing, Validierung und automatisches Nachfragen bei Validierungsfehlern - alles in einer einzigen, prüfbaren Pipeline.
Wo Guardrails AI im LLM-Stack sitzt
Guardrails sitzt zwischen Ihrem Anwendungscode und dem LLM-Anbieter. Es ersetzt das Modell nicht und ändert nicht, wie das Modell aufgerufen wird - es fügt dem Aufruf eine Vertrag-Durchsetzungsschicht hinzu. Denken Sie an einen Schema-Validator für API-Antworten, nur dass die „API" ein Sprachmodell ist, das natürliche Sprache erzeugt, und die „Antwort" erst in strukturierte Daten geparst werden muss, bevor sie validiert werden kann.
- Guard: die Hauptschnittstelle - umhüllt einen LLM-Aufruf und wendet Schema + Validatoren an.
- ValidationOutcome: das von einem Guard-Aufruf zurückgegebene Ergebnisobjekt - enthält validierte Ausgabe, Bestehen/Fehlschlag-Status und Feldfehler.
- Validator: ein an ein Schemafeld gebundener Callable, der eine bestimmte Regel durchsetzt (Typ, Bereich, Regex, externe Prüfung).
- reask: der Wiederholungsmechanismus - schlägt die Validierung fehl, stellt Guardrails dem Modell mit Fehlerkontext erneut die Anfrage.
- Hub: die Guardrails-Validator-Registrierung - eine kuratierte Sammlung gemeinschaftlicher Validatoren, installierbar via `guardrails hub install`.
Note
Warum LLM-Ausgaben Validierung brauchen
Das Grundproblem ist, dass Sprachmodelle darauf trainiert sind, plausiblen Text zu erzeugen - nicht, programmiertechnische Verträge einzuhalten. Selbst wenn Sie ein Modell anweisen, JSON zurückzugeben, kann es Ausgaben mit fehlenden Feldern, falschen Werttypen, zusätzlichen Feldern, die Ihr nachgelagerter Code nicht erwartet, halluzinierten Werten außerhalb erlaubter Bereiche oder Textfragmenten um den JSON-Block herum erzeugen, die das Parsing komplett sprengen.
Die fünf Fehlermodi unvalidierter LLM-Ausgabe
- Parse-Fehler: das Modell umhüllt das JSON mit Markdown-Codezäunen, fügt Kommentare davor oder danach ein oder erzeugt fehlerhaftes JSON, das nicht geparst werden kann.
- Fehlende Pflichtfelder: das Modell lässt ein Feld aus, das es füllen sollte, und verursacht einen KeyError oder Nullreferenz-Fehler im nachgelagerten Code.
- Typverletzungen: ein als Zahl erwartetes Feld kommt als String an, oder ein Boolean kommt als String „true" statt als Literal `true`.
- Wertrestriktionsverletzungen: ein Bewertungsfeld gibt 11 zurück, obwohl 1-10 erlaubt ist, oder ein Enum-Feld liefert einen Wert außerhalb der definierten Liste.
- Halluzinierte Struktur: das Modell erfindet zusätzliche Felder oder verschachtelt Objekte anders, als das Schema es vorsieht.
Jeder dieser Fehler kann nachgelagerte Daten stillschweigend korrumpieren, Laufzeit-Ausnahmen verursachen oder schlechte Werte in die Geschäftslogik durchsickern lassen. Für Low-Stakes-Prototypen ist optimistisches Parsing akzeptabel. Für Produktionspipelines - Rechnungsextraktion, klinische Datenverarbeitung, Betrugserkennungssignale, Kundendaten-Anreicherung - ist jede Feldverletzung ein Datenqualitätsproblem, das erkannt und behandelt werden muss.
Der Vertrag zwischen Ihrer Anwendung und dem LLM ist nur so stark wie die Validierung, die Sie bei jeder Antwort durchsetzen. Hoffen ist keine Validierungsstrategie.
Warning
JSON Schema als Validierungsvertrag
JSON Schema ist die Sprache, mit der Guardrails AI beschreibt, wie eine gültige LLM-Antwort aussieht. Eine JSON-Schema-Definition legt die erwartete Objektstruktur fest - welche Felder existieren, ihre Typen, welche erforderlich sind und welche Beschränkungen für ihre Werte gelten. Dieses Schema erfüllt zwei Zwecke: Es sagt Guardrails, wie die geparste Antwort zu validieren ist, und Guardrails nutzt es, um die Prompt-Instruktion zu bauen, die dem Modell vorgibt, welche Form es erzeugen soll.
Was JSON Schema für die LLM-Validierung abdeckt
Für strukturierte Ausgabefälle sind die nützlichsten JSON-Schema-Keywords Typerzwingung, Pflichtfeld-Listen, Enum-Werte, String-Formate und numerische Bereiche. Zusammen decken sie die Mehrheit der feldbezogenen Regeln ab, die eine Extraktions- oder Generierungsaufgabe durchsetzen muss.
{
"$schema": "https://json-schema.org/draft-07/schema",
"type": "object",
"required": ["product_name", "rating", "sentiment", "summary"],
"additionalProperties": false,
"properties": {
"product_name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"rating": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"sentiment": {
"type": "string",
"enum": ["positive", "neutral", "negative"]
},
"summary": {
"type": "string",
"minLength": 20,
"maxLength": 500
},
"pros": {
"type": "array",
"items": { "type": "string" },
"maxItems": 5
},
"cons": {
"type": "array",
"items": { "type": "string" },
"maxItems": 5
}
}
}Dieses Schema weist Guardrails an, jede Antwort abzulehnen, bei der `rating` außerhalb von 1-5 liegt, `sentiment` nicht einer der drei erlaubten Werte ist oder `summary` kürzer als 20 Zeichen ist. In `required` gelistete Felder müssen vorhanden sein. `additionalProperties: false` lehnt zusätzliche Felder ab, die das Modell eigenmächtig hinzufügt.
Schema aus einer Beispielantwort generieren
Beim Entwurf einer neuen Extraktionsaufgabe kostet das Festlegen des ersten Schemas Zeit. Ein praktischer Abkürzungsweg: Führen Sie Ihren Prompt einmal ohne Validierung aus, prüfen Sie das rohe JSON, das das Modell zurückgibt, und nutzen Sie dann den JSON Schema Generator, um daraus automatisch ein Draft-07-Schema abzuleiten. Das generierte Schema erfasst Typen, Pflichtfelder und verschachtelte Struktur. Anschließend verfeinern Sie es - Stringlängen straffen, Enum-Beschränkungen ergänzen, numerische Grenzen setzen - statt jedes Keyword von Hand zu schreiben.
JSON Schema Generator
Fügen Sie beliebige JSON-Payloads ein und erhalten Sie automatisch ein vollständiges Draft-07- oder Draft-2020-12-Schema - browser-lokal, kein Upload, keine Registrierung.
Tip
Wie Guardrails AI die Ausgabe validiert
Wer die Validierungspipeline versteht, kann Fehler besser debuggen und für jedes Feld die richtige Reaktionsstrategie konfigurieren. Die Pipeline läuft bei jedem Guard-Aufruf in fester Reihenfolge: Prompt-Injektion, Antwort-Parsing, JSON-Schema-Validierung, Ausführung der feldbezogenen Validatoren und Ergebnisaufbau.
Prompt-Injektion
Bevor der Prompt an das LLM gesendet wird, hängt Guardrails einen strukturierten Instruktionsblock an, der aus Ihrem Schema abgeleitet ist. Dieser Block beschreibt das erwartete Ausgabeformat, listet Pflichtfelder mit Typen und Beschränkungen auf und enthält (wenn reask aktiv ist) die Validierungsfehler des vorherigen Versuchs. Die Injektion ist transparent - Sie schreiben Ihren Aufgabenprompt normal, und Guardrails übernimmt die Formatierungsanweisungen.
Antwort-Parsing
Nachdem das Modell geantwortet hat, extrahiert Guardrails das JSON aus der Ausgabe. Es behandelt typische Formatierungsgewohnheiten von Modellen: Entfernen von Markdown-Codezäunen, Trimmen von Prosa vor oder nach dem JSON-Block und Korrigieren kleinerer Syntaxprobleme. Lässt sich die Ausgabe nicht in ein Python-dict parsen, löst der Guard sofort einen reask mit einer Parse-Fehlermeldung aus, statt eine Ausnahme zu werfen.
JSON-Schema-Validierung
Das geparste dict wird mit einem standardkonformen Validator gegen Ihr JSON Schema geprüft. Typverletzungen, fehlende Pflichtfelder, Enum-Abweichungen und Bereichsverletzungen erzeugen an dieser Stelle strukturierte Fehlerobjekte. Sie können Ihr Schema vorab unabhängig mit der JSON Schema Validator gegen eine Kandidaten-Payload testen, bevor Sie es in einen Guard einbinden.
Ausführung der feldbezogenen Validatoren
Nach bestandener JSON-Schema-Prüfung laufen die registrierten Validatoren jedes Felds der Reihe nach. Eingebaute Validatoren sind unter anderem `ValidChoices`, `ValidRange`, `ValidURL`, `NoRefusal`, `ToxicLanguage`, `PIIFilter` und Dutzende mehr aus dem Hub. Eigene Validatoren sind einfache Python-Funktionen mit dem Decorator `@register_validator`. Jeder Validator gibt ein `PassResult` oder `FailResult` mit menschenlesbarer Fehlermeldung zurück.
Ergebnisaufbau und reask
Guardrails baut ein `ValidationOutcome` zusammen, das das validierte Ausgabe-dict, einen `validation_passed`-Boolean und eine Liste von Feldfehlern enthält. Schlägt die Validierung fehl und ist `num_reasks` größer null, springt die Pipeline zurück zu Schritt 1, wobei die Validierungsfehler in den Prompt injiziert werden, damit das Modell seine Ausgabe korrigieren kann. Jede reask-Runde verringert den Wiederholungszähler.
| on_fail-Aktion | Was sie tut | Am besten für |
|---|---|---|
| exception | Wirft sofort ValidationError | Harte Anforderungen - schnell fehlschlagen |
| reask | Stellt dem Modell die Anfrage mit Fehlerkontext erneut | Die meisten Anwendungsfälle strukturierter Ausgaben |
| fix | Wendet automatisch eine Korrekturfunktion an | Normalisierung (Trim, Kleinschreibung, Umwandlung) |
| filter | Entfernt das fehlgeschlagene Feld aus der Ausgabe | Optionale Anreicherungsfelder |
| refrain | Gibt None für den gesamten Guard-Aufruf zurück | Konservative Fallback-Workflows |
| noop | Protokolliert den Fehler, macht aber weiter | Logging- und Observability-Pipelines |
Rail-Specs und Pydantic-Integration
Guardrails AI unterstützt zwei Schemadefinitionsstile: das ältere Rail-Spec-Format und den modernen Pydantic-Modellansatz. Beide zu kennen ist nützlich, weil Sie Rail-Specs in älteren Codebasen und Community-Beispielen antreffen, während Pydantic seit Guardrails v0.4+ der empfohlene Weg für alle neuen Projekte ist.
Pydantic-Modelle als Guard-Schemata
Der sauberste Weg, ein Guardrails-Ausgabeschema in Python zu definieren, ist eine `BaseModel`-Unterklasse von Pydantic. Pydantic-Modelle haben nativen JSON-Schema-Export, IDE-Typenprüfung und vertraute Python-Syntax. Guardrails-Validatoren hängen Sie über Pydantics `Field()` mit benutzerdefinierten Metadaten an oder importieren Validator-Klassen direkt aus `guardrails`.
from pydantic import BaseModel, Field
from guardrails import Guard
from guardrails.hub import ValidRange, ValidChoices
class ProductReview(BaseModel):
product_name: str = Field(description="Name of the product reviewed")
rating: int = Field(
description="Rating from 1 to 5",
validators=[ValidRange(min=1, max=5, on_fail="reask")]
)
sentiment: str = Field(
description="Overall sentiment of the review",
validators=[ValidChoices(
choices=["positive", "neutral", "negative"],
on_fail="reask"
)]
)
summary: str = Field(description="One paragraph summary of the review")
# Build the Guard from the Pydantic model
guard = Guard.from_pydantic(ProductReview)
# Call the LLM through the Guard
outcome = guard(
openai.chat.completions.create,
model="gpt-4o",
messages=[{"role": "user", "content": f"Extract a review from: {raw_text}"}],
num_reasks=2,
)
if outcome.validation_passed:
review: ProductReview = outcome.validated_output
else:
print(outcome.error)Die Pydantic-zu-JSON-Schema-Pipeline
Unter der Haube ruft Guardrails `model.model_json_schema()` auf, um Ihr Pydantic-Modell als JSON Schema zu exportieren, und nutzt dieses Schema dann sowohl für die Prompt-Injektion als auch für die Antwortvalidierung. Das bedeutet: Jedes Pydantic-Modell, das Sie schreiben können, ist automatisch ein gültiger Guardrails-Vertrag. Sie können das generierte Schema selbst inspizieren - fügen Sie eine Beispielantwort in den JSON Schema Generator ein, um das äquivalente Schema zu sehen, und vergleichen Sie es mit der Ausgabe Ihres Pydantic-Modells.
Wenn Ihre Anwendung auf TypeScript basiert, aber einen Python-Guardrails-Dienst aufruft, erzeugt der JSON-zu-Zod-Schema-Konverter aus derselben Beispiel-JSON ein passendes Zod-Schema - nützlich, um denselben Vertrag clientseitig zu validieren, ohne die Schemadefinition manuell zu duplizieren.
Rail-Specs - das Legacy-Format
Rail-Specs sind XML-Dateien, in denen jedes `<output>`-Element ein Feld mit einem `type`-Attribut und einem oder mehreren `<validator>`-Kindelementen beschreibt. Sie stammen aus der Zeit vor der Pydantic-Integration und sind für Python-Entwickler weniger ergonomisch, werden aber weiterhin vollständig unterstützt. Erben Sie eine Guardrails-Codebasis mit `.rail`-Dateien, können Sie jede Spec schrittweise in ein Pydantic-Modell migrieren - das Validierungsverhalten ist äquivalent.
Note
Praktischer Workflow und Toolchain
Ein zuverlässiger Guardrails-Workflow kombiniert Offline-Schemaentwurf, lokales Testen und Produktionsüberwachung. Die Schema-Entwurfsphase - in der Sie festlegen, wie eine gültige Ausgabe aussieht - ist der wichtigste Schritt und profitiert am meisten von dediziertem Werkzeug.
Schritt 1: Schema offline entwerfen
Definieren Sie vor dem Schreiben von Guardrails-Code Ihr Ausgabeschema als eigenständiges JSON-Schema-Dokument. Zuerst in JSON Schema zu arbeiten erlaubt es, den Vertrag unabhängig vom LLM-Aufruf zu iterieren - Sie können Beispiel-Payloads validieren, Beschränkungen anpassen und bestätigen, dass das Schema korrekt ist, bevor Sie API-Credits für Tests ausgeben.
Mit der JSON Schema Validator von Aback Tools fügen Sie ein JSON Schema und eine Kandidaten-Payload ein und sehen sofort Fehler auf Feldebene. Nutzen Sie das, um zu bestätigen, dass Ihre `required`-Arrays, Enum-Listen und numerischen Bereiche wie erwartet funktionieren, bevor Sie das Schema in ein Pydantic-Modell übersetzen. Der JSON Formatter & Validator hilft zu prüfen, ob Ihre Schema-Datei selbst syntaktisch gültiges JSON ist, bevor Sie darauf verweisen.
Schritt 2: Pydantic aus JSON generieren
Haben Sie beim Prototyping Beispiel-LLM-Antworten gesammelt, erzeugt der JSON-zu-Python-Dataclass/Pydantic-Konverter aus einer Beispiel-Payload in einem Schritt ein Pydantic-Modell. Das Werkzeug leitet Feldtypen ab, behandelt verschachtelte Objekte und setzt `Optional` dort ein, wo Felder fehlen können. Verwenden Sie die Ausgabe als Ausgangspunkt und fügen Sie jedem Feld auf Basis der Beschränkungen in Ihrem JSON Schema Guardrails-Validatoren hinzu.
Schritt 3: Lokal mit Mock-Antworten testen
Guardrails-Guards können mit jedem Python-Callable aufgerufen werden, nicht nur mit echten LLM-APIs. Übergeben Sie in der Entwicklung eine Mock-Funktion, die eine feste String-Antwort zurückgibt, um die Validierungspipeline ohne API-Aufrufe zu testen. So iterieren Sie schnell und kostenlos über Schemaänderungen, Validator-Konfigurationen und reask-Prompts, bevor Sie einen bezahlten Modell-Endpoint anbinden.
Empfohlener Schema-Workflow mit Aback Tools
- JSON Schema Generator - leitet ein Startschema aus einer Beispiel-LLM-Antwort ab.
- JSON Schema Validator - validiert Kandidaten-Payloads offline gegen Ihr Schema.
- JSON Formatter & Validator - prüft, ob Schema-Dateien vor der Nutzung gültiges JSON sind.
- JSON zu Python Dataclass - erzeugt ein Pydantic-Modell aus einer Beispiel-Payload.
- JSON zu Zod Schema - erzeugt einen TypeScript-seitigen Vertrag zur Client-Validierung.
JSON Schema Validator
Validieren Sie beliebige JSON-Payloads gegen ein Schema mit Fehlermeldungen auf Feldebene - browser-lokal, kein Upload, sofortige Ergebnisse.
Grenzfälle und Einschränkungen
Guardrails AI verbessert die Zuverlässigkeit strukturierter Ausgaben erheblich, garantiert aber keine Korrektheit. Wer die Einschränkungen kennt, entwirft seine Pipeline mit passenden Rückfallebenen, statt dem Guard blind zu vertrauen.
Reask-Schleifen konvergieren nicht immer
Wenn ein Modell einen bestimmten Validator beständig nicht besteht, hilft mehr reask-Wiederholung nicht - es kostet nur mehr API-Credits für dasselbe Ergebnis. Manche Fehlermodi sind systematisch: Das Modell versteht eine Beschränkung wirklich nicht, oder die Beschränkung ist zu streng, um sie bei der gegebenen Eingabe zuverlässig zu erfüllen. Auditsieren Sie die Fehlerraten Ihrer Validatoren und betrachten Sie hochfrequente Fehlschläge als Signal, entweder die Beschränkungsdefinition oder den Prompt zu überarbeiten.
JSON Schema erkennt keine semantischen Fehler
Ein Schema kann bestätigen, dass `sentiment` einer der Werte `["positive", "neutral", "negative"]` ist, aber nicht verifizieren, dass das zugewiesene Sentiment für den Eingabetext tatsächlich korrekt ist. JSON Schema und Validatoren erzwingen strukturelle und syntaktische Verträge - sie ersetzen weder menschliche Prüfung noch nachgelagerte Qualitätskontrollen für die inhaltliche Richtigkeit. Nutzen Sie Guardrails, um Format und Struktur der Ausgabe durchzusetzen, und wenden Sie separate Bewertungsmaßstäbe für die inhaltliche Korrektheit an.
Latenz- und Kosten-Overhead
Jeder reask-Versuch ist ein zusätzlicher LLM-API-Aufruf zum vollen Token-Preis. Bei einem Guard mit `num_reasks=3` kann eine Extraktion im Worst Case vier LLM-Aufrufe auslösen, bevor sie scheitert. In Hochdurchsatz-Pipelines ist dieser Overhead erheblich. Profilieren Sie die reask-Rate Ihres Guards in der Staging-Umgebung, bevor Sie in Produktion gehen, und setzen Sie `num_reasks=0` für unkritische Felder, wo die on_fail-Aktionen `filter` oder `noop` akzeptable Alternativen zur Wiederholung sind.
| Einschränkung | Auswirkung | Abmilderung |
|---|---|---|
| Reask-Schleifen konvergieren nicht | Verschwendete API-Credits bei bekannten Fehlern | Validator-Fehlerraten auditieren; Beschränkungen vereinfachen |
| Semantische Fehler unerkannt | Falsche Werte bestehen strukturelle Prüfungen | Separate Inhaltsbewertungsmaßstäbe anwenden |
| Latenz durch reasks | Bis zu 4× die Kosten pro fehlgeschlagenem Aufruf | reask-Rate profilieren; filter/noop für unkritische Felder |
| Keine feldübergreifende Validierung | Kann Feld A > Feld B nicht erzwingen | Post-Validierungs-Python-Funktion für feldübergreifende Regeln |
| Anbieterspezifische Prompt-Empfindlichkeit | Injektionsformat beeinflusst die Modellcompliance | Mehrere Prompt-Formate testen; native strukturierte Ausgabemodi nutzen |
Warning
Tip
Key takeaways
- Guardrails AI umhüllt LLM-Aufrufe mit einer JSON-Schema-Validierungsschicht und feldbezogenen Validatoren und stellt dem Modell bei Validierungsfehlern automatisch erneut Anfragen.
- JSON Schema definiert den strukturellen Vertrag - Feldtypen, Pflichtfelder, Enum-Werte und numerische Bereiche. Erzeugen Sie ein Startschema aus einer Beispiel-Payload mit dem JSON Schema Generator.
- Der reask-Mechanismus stellt dem LLM die Anfrage mit strukturiertem Fehlerkontext erneut - konfigurierbar pro Guard-Aufruf mit `num_reasks`. Hohe reask-Raten deuten auf zu strenge Beschränkungen oder einen schlecht abgestimmten Prompt hin.
- Pydantic-Modelle sind das empfohlene Schemaformat ab Guardrails v0.4+: Sie exportieren automatisch zu JSON Schema und integrieren sich in die Python-Typenprüfung und IDE-Werkzeuge.
- Verwenden Sie `additionalProperties: false` in jedem Schema, um zu verhindern, dass das Modell erfundene Felder hinzufügt, die die Validierung stillschweigend passieren, aber Ihr Datenmodell korrumpieren.
- JSON Schema erzwingt Struktur, nicht semantische Richtigkeit - wenden Sie für die inhaltliche Genauigkeit separate Bewertungsmaßstäbe zusätzlich zur Guardrails-Schemavalidierung an.
- Validieren Sie Ihr JSON Schema und Kandidaten-Payloads offline mit der JSON Schema Validator, bevor Sie einen Guard in eine live LLM-Pipeline einbinden.