Genereer gestructureerde JSON-schema's uit voorbeelddata met AI, inclusief automatische zelfcorrectie en intelligente nabewerking.
Schemageneratie zet ruwe entiteitgegevens om in een getypeerd, geannoteerd JSON-schema dat precies bepaalt welke informatie er tijdens de verrijking wordt geëxtraheerd. In plaats van schema's handmatig te schrijven, plak je voorbeeld-JSON en laat je AI de structuur analyseren, types afleiden, expertisedomeinen toewijzen en verbeteringen voorstellen.
Generatie is niet één grote prompt. Het is een reeks kleine aanroepen die elk één ding doen en grotendeels tegelijk draaien — precies daardoor kunnen kleine, goedkope modellen een bruikbaar schema opleveren, want elke aanroep beantwoordt één afgebakende vraag over materiaal dat het in één keer kan overzien.
"8.275 h" wordt half_life_seconds: 29790), en een datum die geen enkel native type aankan wordt een geheel jaartal. Elke waargenomen waarde moet de aanname waarmaken, anders blijft de eigenschap tekst. De herschreven sample is wat wordt opgeslagen.manufacturer_name, of elk item in een scalaire array zoals therapeutic_classes[], kan een herbruikbare entiteit benoemen. Tijdens de generatie blijft de goedgekeurde voorbeeldstructuur ongewijzigd; de logische entiteitenkaart legt de scheiding vast. In de editor materialiseert de entiteitsbadge elk voorkomen als een referentie naar één gedeeld objecttype.{"en": "...", "fr": "..."}) worden samengevouwen tot één meertalige waarde.Elke stap probeert het zelf opnieuw (3 pogingen) en de antwoorden stapelen zich op over de pogingen heen, zodat een model dat in fragmenten antwoordt toch convergeert. Daarna accepteert de stap wat hij heeft gekregen en worden de gaten deterministisch opgevuld — een zwak model verslechtert de beschrijvingen in plaats van de generatie te laten mislukken. Alleen identiteit en domeinroutering mogen de hele run laten mislukken. Elke call wordt als een eigen prompt gefactureerd en gelogd, zodat het record precies laat zien waar wat is uitgegeven.
Je kunt meerdere samples van hetzelfde entity-type doorgeven in plaats van één — het schema dekt dan de vereniging van hun velden, alles wat in een sample ontbreekt wordt nullable, en de waarden die je erin ziet worden echte voorbeelden. Veldnamen moeten overeenkomen: samples die verschillende entity-types beschrijven worden geweigerd, net als objecten binnen een array die geen enkel veld delen, want dan blijft er niets over om hun rijen te identificeren. De sample-editor markeert elk zo'n verschil voordat je een generatie besteedt.
Een spreadsheet werkt ook: plak CSV-rijen waarvan de eerste rij de header is, rechtstreeks uit Excel of Google Sheets of uit een .csv-bestand. Elke rij wordt één sample, headers worden eigenschapsnamen (Author Name → author_name) en elke kolom krijgt één type — integer, getal, boolean of tekst, waarbij lege cellen null worden en decimale komma's als getallen worden gelezen in tekst die met puntkomma's of tabs is gescheiden. De rijen verschijnen als JSON in de editor zodat je ze kunt controleren voordat je genereert; bij meer dan 20 rijen worden er 20 bewaard zodat elke kolom nog een waarde laat zien. Een eerste rij met data in plaats van headers wordt geweigerd en niet geraden.
Waarden met een eigen eenheid worden omgezet naar getallen voordat het schema wordt afgeleid, omdat een kolom met "8.275 h" en "85 ms" niet gesorteerd, op bereik gefilterd of geaggregeerd kan worden. De eenheid verhuist naar de propertynaam (half_life_seconds), een niet-numerieke vervanger zoals "stable" wordt null, en datums van vóór jaar 1 worden een geheel jaartal (negatief voor v.Chr.), wat geen enkel datumtype kan opslaan en wat als tekst verkeerd sorteert. Je voorbeeldpaneel wordt hierop aangepast, zodat het altijd het voorbeeld toont dat het schema beschrijft. Alles wat de conversie niet met zekerheid kan lezen, blijft precies zoals je het hebt geschreven.
Omdat elke stap één afgebakende vraag beantwoordt, kan de correctie net zo afgebakend zijn: de validator van een stap behoudt alles wat bruikbaar terugkwam en vraagt alleen opnieuw om wat ontbreekt. Er wordt niets vanaf nul opnieuw gegenereerd, dus een gedeeltelijk correct antwoord is vooruitgang in plaats van een verspilde poging.
De acht validatieregels lopen nog steeds als eindcontrole over het samengestelde schema — typecorrectheid, toewijzing van expertisedomeinen, referentie-integriteit, volledigheid. Op dat moment zijn ze een vangnet en niet het correctiemechanisme. Lees meer over elke regel in de gids Validatieregels.
Een gegenereerd schema is meer dan een eenvoudige typedefinitie. Elke eigenschap bevat metadata die het verrijkingsproces stuurt:
JSON Schema-type (string, number, integer, boolean, array, object)
Contextuele beschrijving die de AI vertelt welke informatie te vinden
Welk expertisedomein (financieel, regelgevend, enz.) deze waarde levert
Of dit veld deel uitmaakt van wat de instantie identificeert. Identificerende eigenschappen doen twee dingen tegelijk: ze richten de verrijkingsprompt op de juiste entiteit, en fusie matcht array-items erop. Zo'n eigenschap mag toch nullable zijn — een kwalificator die op elkaar lijkende zusteritems onderscheidt blijft identificerend, ook als hele families die echt missen
Als de waarden van een string uit een kleine, conventionele set komen (statussen, gradaties, classificatiecodes), stelt de generatie de leden voor — geschreven zoals in je samples — als een open vocabulaire waar verrijking naartoe convergeert. Waarden die buiten de lijst opduiken, verschijnen als kandidaten in de editor en je sluit de set zodra die niet meer groeit; een gesloten set wordt een hard contract waar verrijking niet buiten kan afdwalen
Of het veld null mag zijn — niet-nullable velden zijn vereist voor toelating tot de database
Of het veld in meerdere talen moet worden verrijkt
Of de oorspronkelijke waarde ongewijzigd moet blijven tijdens verrijking
Realistische voorbeeldwaarden die de AI naar het juiste formaat leiden
Machinaal controleerbare vorm voor stringwaarden: onjuist opgemaakte antwoorden worden afgewezen en opnieuw geprobeerd, en opgeslagen waarden behouden de canonieke vorm. Generatie claimt alleen een benoemd formaat (date, time, date-time, uuid, email, uri, ipv4, ipv6) dat door de voorbeelden wordt aangetoond — een regex-patroon is een voorspelling over waarden die nog niemand heeft gezien, en een verkeerd patroon laat elke verrijking van het veld mislukken, dus dat voeg je zelf toe in de editor
De AI groepeert schema-eigenschappen in expertisedomeinen op basis van hun semantische betekenis. Zo kan een schema voor een farmaceutisch bedrijf domeinen bevatten als “Financieel analist,” “Regelgevingsexpert” en “Bedrijfsinformatie.” Deze domeinen worden gebruikt door de multi-expertisestrategie om parallelle, gespecialiseerde LLM-aanroepen uit te voeren voor diepere resultaten.
Het aantal expertisedomeinen wordt automatisch beperkt op basis van het aantal eigenschappen van je gegevens om overfragmentatie te voorkomen:
Zodra de fragmenten zijn samengevoegd, regelen deterministische stappen alles wat niet aan een model overgelaten mag worden — met je werkelijke invoerdata als bewijs:
Een veld dat in een van de voorbeelden ontbreekt of null is, wordt nullable, wat het model ook antwoordde, zodat een onbekende waarde een geaccepteerd antwoord is in plaats van een datakwaliteitsfout. Voorbeelden kunnen alleen verruimen: een handvol voorbeelden bewijst aanwezigheid voor die instanties, nooit voor elke instantie van het type — daarom krijgt het model ook een stem, en worden de twee met OR gecombineerd.
Attributen die niet samen kunnen bestaan, worden via een regel verzoend in plaats van opnieuw uitgevraagd: preserve wint van multilingual en nullable, een overgebleven gesloten vocabulaire wist multilingual, en een sleuteleigenschap houdt nooit een enum.
Elk object binnen een array heeft gegarandeerd minstens één sleuteleigenschap — dat is de eenheid waarop fusie dedupliceert, dus een array-item zonder sleutel zou het samenvoegen van de antwoorden van twee modellen onmogelijk maken.
Alle unieke expertise domains worden uit het schema verzameld voor metrics en strategieconfiguratie.
Een schema beschrijft zichzelf in een taal — de typenamen, eigenschapsbeschrijvingen, expertiselabels en suggesties. Dat is iets anders dan de talen waarin je verrijkt. Noem er een bij het genereren, of laat het weg en dan bepaalt de taal van de eigenschapsnamen in je voorbeeld: een Frans voorbeeld levert niet langer een Engels schema op. De keuze wordt bewaard, zodat latere AI-bewerkingen in dezelfde taal blijven schrijven in plaats van terug te vallen op Engels.
Je hebt geen voorbeeldgegevens nodig om te beginnen. Beschrijf in gewone woorden het voorbeeld dat je wilt — het soort entiteit, de eigenschappen die het moet bevatten, hoe groot of hoe diep — eventueel met documenten om het op te baseren, of met zoeken op het web om het aan de werkelijkheid te toetsen — en het platform schrijft de voorbeelden voor je. Vraag er meerdere aan en je krijgt meerdere verschillende instanties, niet één instantie die steeds anders verwoord is.
Het eerste sample bepaalt in dezelfde aanroep ook waar de andere over gaan. Als je N keer los om “een voorbeeld” vraagt, krijg je steevast N keer hetzelfde beroemde exemplaar; door de hele cast vooraf te benoemen worden ze onderling verschillend.
De overige samples worden parallel gegenereerd tegen de structuur van sample 1 als contract, en niet alleen met het verzoek om die te volgen — zo kan een variant geen veld hernoemen, toevoegen of weglaten. Samples die alsnog dubbel of misvormd terugkomen, worden opnieuw opgevraagd in een begrensde retry-ronde, en als het volledige aantal niet wordt gehaald, krijg je dat te horen in plaats van stilzwijgend minder samples.
Alles in je verzoek wordt gehonoreerd — een limiet op de omvang wint van de drang van de generator om volledig te zijn, een structuur waar je om vraagt wint van de standaardstructuur — of het antwoord vertelt je wat niet gehonoreerd kon worden en waarom; er wordt nooit stilzwijgend iets weggelaten. Eén ding is geen verzoek: hoeveel samples je krijgt, wordt bepaald door het sample-aantal, en elk sample is precies één instantie — in de tekst om “drie samples” vragen levert nooit een lijst in één object verpakt op. Als het verzoek echt dubbelzinnig is (een soort entiteit met meerdere lezingen, twee onverenigbare scopes), vraagt de generator het je voordat de generatie wordt uitgevoerd, in plaats van te gokken. De taal staat standaard op auto, afgeleid uit de woorden van je eigen verzoek en daarna uit een eventueel bijgevoegd document.
Lees een eigenschapsnaam in de context van het bovenliggende object en tel hoeveel verschillende dingen ze kan vragen. Eén is duidelijk. Bij twee of meer kiest elk model een andere, en dan mengt de kolom antwoorden op verschillende vragen — annual_revenue bij een bedrijf kan de groep of de entiteit betreffen, bruto of netto, in een van meerdere valuta's. Helemaal geen — een naam voor iets wat deze ouder simpelweg niet heeft — is erger: met niets om op te zoeken verzint het model een waarde.
Generatie bestrijdt dit twee keer: de prompt zelf eist namen die maar één lezing toelaten, en een nabewerking van het voltooide schema markeert de namen die dat alsnog niet doen. In dit stadium is de oplossing een hernoeming — de beschrijvingen zijn uit de namen gegenereerd, dus een beschrijving kan de naam waaruit ze voortkomt niet verduidelijken, en er hangt nog niets van het schema af. Samplegeneratie voert dezelfde controle uit op de sample en past de hernoemingen toe voordat je die ooit ziet. Vrije tekst — een beschrijving, een samenvatting, notities — wordt nooit gemarkeerd: de formulering varieert, maar de gestelde vraag is duidelijk.
Gemarkeerde eigenschappen tonen een badge “ambigu” in de Workflow Editor, met daarin de lezingen die de naam toelaat. Zodra het schema live is, verschuift de oplossing naar een herschreven beschrijving, die één betekenis vastlegt zonder het datacontract te breken. Zie de handleiding Ambiguïteitscontrole voor het volledige beoordelingskader en de bijbehorende oplossingen.
Bij het genereren van een voorbeeldentiteit op basis van een beschrijving kun je “Zoeken op het web gebruiken” inschakelen, zodat het model actuele feiten op het web opzoekt in plaats van alleen op zijn trainingsdata te vertrouwen. Dat levert actuelere, nauwkeurigere voorbeeldwaarden op — vooral voor snel veranderende gegevens zoals prijzen, personeelsaantallen of recente releases. De optie is alleen beschikbaar voor modellen waarvan de provider ingebouwd zoeken op het web ondersteunt, en zoekopdrachten worden door de provider in rekening gebracht zoals elk ander modelgebruik.
Na de generatie kun je schema's aanpassen met instructies in natuurlijke taal. Typ een opdracht en de AI voert de wijziging door met behoud van je bestaande schemastructuur. Elke bewerking levert ook 5 suggesties voor verdere verbeteringen op.
Voeg een employee_count integer-veld toeMaak een genest adresobject met stad en landVoeg Franse beschrijvingen toe aan alle tekstveldenDefinieer een verwijzing naar een moederbedrijf met $defsMarkeer het website-veld als nullableAI-bewerkingen worden gevalideerd met een subset van de generatieregels (typecontrole, referentie-integriteit, expertiseconsistentie) zonder vergelijking met invoergegevens, omdat je mogelijk opzettelijk velden toevoegt of verwijdert.
Zowel schemageneratie als AI-bewerking leveren 5 gerichte suggesties die verschillende verbetercategorieën bestrijken:
Suggesties verschijnen als klikbare chips in de Workflow Editor — klik op een suggestie om het AI-bewerkingsveld automatisch in te vullen en toe te passen.