Acht validatieregels waarborgen de kwaliteit van schema's. Ze draaien in code zodra AI-schemageneratie haar antwoord heeft samengesteld — een laatste vangnet over een pipeline die zichzelf al stap voor stap corrigeert.
Correctie gebeurt waar de fout ontstaat, niet aan het eind. Generatie is een reeks kleine calls die elk één ding doen, en elke call heeft zijn eigen validator: die controleert het antwoord van die call, behoudt alles wat geldig was en vraagt alleen opnieuw om wat nog ontbreekt. Een model dat in fragmenten antwoordt, convergeert daardoor in plaats van opnieuw te beginnen.
Slechts twee stappen kunnen een generatie helemaal laten mislukken: het benoemen van de entity en het toewijzen van eigenschappen aan expertisedomeinen. Al het andere heeft een deterministische fallback, en dat is wat kleine modellen hier bruikbaar maakt.
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.
Elke $ref moet naar iets verwijzen dat bestaat: #/$defs/... naar een entiteitsdefinitie, #/$enums/... naar een waardenset. Losse verwijzingen breken de verrijkingspijplijn.
manufacturer: $ref '#/$defs/Company' references undefined definitionDe twee namespaces zijn gescheiden: een #/$defs/-verwijzing is een relatie naar een geneste entiteit, terwijl een #/$enums/-verwijzing een teksteigenschap beperkt tot een gesloten lijst met toegestane waarden. Elk moet een bijbehorende vermelding in zijn eigen blok hebben.
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.
Deze tabel beschrijft wat de validator accepteert, niet wat de generatie oplevert. Een voorbeeldwaarde 3 maakt de eigenschap nog geen integer: numerieke velden worden geleverd als number, tenzij een aparte stap bevestigt dat de grootheid echt discreet is en geen enkele waargenomen waarde dat tegenspreekt. Eén geheel getal in een voorbeeld bewijst niet dat halven onmogelijk zijn — en integer ten onrechte declareren zou 6.2 in een afnemende database afkappen tot 6.