Validatieregels - Entity Enricher-documentatie

Validatieregels

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.

Hoe zelfcorrectie werkt

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.

Correctieflow

Antwoorden per stapEén afgebakende vraag — bijvoorbeeld de flags voor een batch eigenschappen, of de beschrijvingen van één domein
Validator voegt samenGeldige items worden verzameld; onbruikbare worden per stuk weggelaten, zodat de batch nooit zijn goede antwoorden verliest
Indien onvolledigDe nieuwe poging vraagt alleen om de paden die nog ontbreken — maximaal 3 pogingen voor die stap
Daarna afschalenResterende gaten worden deterministisch gevuld en op het record vastgelegd, zodat een zwak model je beschrijvingskwaliteit kost, niet het schema
SamenstellingDe 8 onderstaande regels lopen als laatste controle over het voltooide schema

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.

Regels voor generatie vs. bewerken

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:

BereikToegepaste regelsWaarom
GeneratieAlle 8 regelsInvoergegevens zijn beschikbaar voor vergelijking
AI-bewerkingAlleen regels 2, 3, 4, 5Geen invoergegevens; gebruiker kan de structuur bewust aanpassen

De 8 regels

Regel 1

Aantal expertisedomeinen

Bereik: Alleen generatie

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.

Voorbeeldfout: Too many expertise domains: 6 defined, maximum is 3

Het maximum wordt berekend als floor(property_count / 6), met een minimum van 1. Een schema met 12 eigenschappen staat maximaal 2 domeinen toe.

Regel 2

Ten minste één eigenschap

Bereik: Beide

Elk schema moet minstens één eigenschap definiëren. Een leeg schema kan niet voor verrijking worden gebruikt.

Voorbeeldfout: Schema must have at least one property

Dit vangt gevallen op waarin de AI een geldige JSON-structuur produceert maar vergeet daadwerkelijke velden op te nemen.

Regel 3

Geldige JSON Schema-typen

Bereik: Beide

Elk eigenschapstype moet een van de standaard JSON Schema-types zijn: string, number, integer, boolean, array, object of null.

Voorbeeldfout: 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.

Regel 4

$ref-doelen bestaan

Bereik: Beide

Elke $ref moet naar iets verwijzen dat bestaat: #/$defs/... naar een entiteitsdefinitie, #/$enums/... naar een waardenset. Losse verwijzingen breken de verrijkingspijplijn.

Voorbeeldfout: manufacturer: $ref '#/$defs/Company' references undefined definition

De 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.

Regel 5

Expertisesleutel bestaat

Bereik: Beide

De expertisewaarde van elke eigenschap moet overeenkomen met een van de gedefinieerde expertisedomeinen. Zo voorkom je typefouten en inconsistenties.

Voorbeeldfout: 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.

Regel 6

Expertise vereist

Bereik: Alleen generatie

Eigenschappen die geen object zijn en niet behouden blijven, moeten een expertisetoewijzing hebben. Zo wordt elk verrijkbaar veld afgehandeld door een gespecialiseerd domein.

Voorbeeldfout: revenue: expertise is required for non-object types

Object-typen zijn uitgezonderd, omdat hun onderliggende eigenschappen hun eigen expertise dragen. Behouden velden zijn uitgezonderd, omdat ze ongewijzigd worden doorgegeven.

Regel 7

Type komt overeen met invoergegevens

Bereik: Alleen generatie

Het schematype voor elke eigenschap moet overeenkomen met het werkelijke Python-type van de bijbehorende waarde in je invoergegevens.

Voorbeeldfout: 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.

Regel 8

Alle invoereigenschappen aanwezig

Bereik: Alleen generatie

Elke sleutel in je invoerdata moet als eigenschap in het gegenereerde schema voorkomen. Zo voorkom je dat de AI stilletjes velden weglaat.

Voorbeeldfout: 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.

Type-inferentie

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:

InvoerwaardeAfgeleid typeAccepteert ook
true / falseboolean(alleen boolean)
42integernumber
3.14numberinteger
"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.

Volgende stappen