Acht validatieregels waarborgen de kwaliteit van het schema. Wanneer een regel faalt tijdens AI-schemageneratie, wordt de fout teruggestuurd naar de AI voor automatische zelfcorrectie.
Nadat de AI een schema heeft gegenereerd, doorloopt het alle 8 validatieregels. Als een regel faalt, worden de specifieke foutmeldingen verzameld en als feedback teruggestuurd naar de AI. De AI produceert vervolgens een gecorrigeerd schema, dat opnieuw wordt gevalideerd. Deze lus gaat door tot maximaal 6 pogingen in totaal (1 initiële + 5 nieuwe pogingen).
In de praktijk slagen de meeste schema's bij de eerste poging. De zelfcorrectielus is een vangnet voor randgevallen waarin de AI typefouten maakt of een veld vergeet.
Niet alle regels gelden voor zowel schemageneratie als AI-bewerking. Regels die met invoergegevens worden vergeleken, worden tijdens het bewerken overgeslagen omdat je opzettelijk velden kunt toevoegen of verwijderen:
| Bereik | Toegepaste regels | Waarom |
|---|---|---|
| Generatie | Alle 8 regels | Invoergegevens zijn beschikbaar voor vergelijking |
| AI-bewerking | Alleen regels 2, 3, 4, 5 | Geen invoergegevens; gebruiker kan de structuur bewust aanpassen |
Het aantal expertisedomeinen mag het berekende maximum op basis van je aantal eigenschappen niet overschrijden. Dit voorkomt dat de AI te veel fijnmazige domeinen aanmaakt voor kleine schema's.
Too many expertise domains: 6 defined, maximum is 3Het maximum wordt berekend als floor(property_count / 6), met een minimum van 1. Een schema met 12 eigenschappen staat maximaal 2 domeinen toe.
Elk schema moet minstens één eigenschap definiëren. Een leeg schema kan niet voor verrijking worden gebruikt.
Schema must have at least one propertyDit vangt gevallen op waarin de AI een geldige JSON-structuur produceert maar vergeet daadwerkelijke velden op te nemen.
Elk eigenschapstype moet een van de standaard JSON Schema-types zijn: string, number, integer, boolean, array, object of null.
revenue: invalid type 'float'De AI verzint soms typen als "float", "decimal" of "date". Deze regel signaleert die en vraagt om een correctie naar een geldig type.
Alle $ref-verwijzingen moeten verwijzen naar entiteiten die zijn gedefinieerd in de $defs-sectie van het schema. Losse verwijzingen breken de verrijkingspijplijn.
manufacturer: $ref '#/$defs/Company' references undefined definitionWanneer de AI een referentie zoals #/$defs/Company aanmaakt, moet er een bijbehorende Company-definitie in het $defs-blok staan.
De expertisewaarde van elke eigenschap moet overeenkomen met een van de gedefinieerde expertisedomeinen. Zo voorkom je typefouten en inconsistenties.
revenue: expertise 'finance' not in defined domains: ['financial_analyst']De AI gebruikt mogelijk "finance" in plaats van de gedefinieerde sleutel "financial_analyst". Deze regel signaleert die afwijking zodat de AI het kan corrigeren.
Eigenschappen die geen object zijn en niet behouden blijven, moeten een expertisetoewijzing hebben. Zo wordt elk verrijkbaar veld afgehandeld door een gespecialiseerd domein.
revenue: expertise is required for non-object typesObject-typen zijn uitgezonderd, omdat hun onderliggende eigenschappen hun eigen expertise dragen. Behouden velden zijn uitgezonderd, omdat ze ongewijzigd worden doorgegeven.
Het schematype voor elke eigenschap moet overeenkomen met het werkelijke Python-type van de bijbehorende waarde in je invoergegevens.
revenue: type mismatch - input is number but schema says 'string'Als je invoer "revenue": 42.5 bevat, moet het schema het type "number" of "integer" gebruiken, niet "string". De validator is flexibel: hij accepteert "number" voor gehele getallen en omgekeerd.
Elke sleutel in je invoerdata moet als eigenschap in het gegenereerde schema voorkomen. Zo voorkom je dat de AI stilletjes velden weglaat.
Missing property from input: 'headquarters'Als je invoer-JSON een "headquarters"-sleutel bevat, moet het gegenereerde schema deze bevatten. Zo worden je gegevens volledig gedekt.
Regel 7 (type-overeenkomst) gebruikt automatische type-inferentie om je invoerwaarden te vergelijken met de gedeclareerde types van het schema. De inferentie is flexibel om valse positieven te voorkomen:
| Invoerwaarde | Afgeleid type | Accepteert ook |
|---|---|---|
| true / false | boolean | (alleen boolean) |
| 42 | integer | number |
| 3.14 | number | integer |
| "hello" | string | (alleen string) |
| [1, 2, 3] | array | (alleen array) |
| {"key": "val"} | object | (alleen object) |
Let op: booleans worden vóór integers gecontroleerd, omdat een boolean in sommige talen een subtype van integer is. Deze volgorde voorkomt dat true als een integer wordt geïnterpreteerd.