Direct naar inhoud
Prompt engineering

Structured output: hoe je AI-antwoorden laat terugkomen als JSON of tabel

AI-antwoorden die direct in je systeem passen zonder handmatig geklungel? Met structured output maak je van ChatGPT een betrouwbare API-partner. Zo doe je dat.

FD
Frank DuindamFrank Duindam
Frank DuindamOprichter & hoofdredacteur
Bijgewerkt 7 min leestijd
Chaotische datastromen transformeren tot geordende geometrische structuren

Waarom zou je AI willen dwingen tot een formaat?

Verspreide gefragmenteerde puzzelstukjes zweven in wanorde

Stel je voor: je bouwt een tool die productreviews analyseert. Je wil van elke review weten of die positief of negatief is, wat de score is (1-5), en welke productkenmerken genoemd worden. Je stuurt honderd reviews naar ChatGPT en krijgt... honderd lange tekstjes terug. Nu mag je handmatig gaan zoeken waar de score staat, hoe het sentiment precies geformuleerd is, en of ChatGPT soms "vier sterren" schrijft in plaats van het getal 4.

Dat is niet alleen tijdrovend — het is ook onbetrouwbaar. Zodra je AI-output wil gebruiken in een workflow, dashboard of database, heb je voorspelbare structuur nodig. Geen creatieve variatie, maar exacte velden met exacte datatypes.

Dat is waar structured output om de hoek komt kijken.

Wat is structured output eigenlijk?

Naadloos in elkaar grijpende modulaire blokken vormen precisiestructuur

Structured output betekent dat je een AI-model dwingt om zijn antwoord te geven in een vooraf gedefinieerd formaat — meestal JSON. In plaats van vrije tekst krijg je een gestructureerd object met vaste keys en datatypes.

Een voorbeeld. Dit is een normaal AI-antwoord:

"De review is overwegend positief. De klant geeft 4 uit 5 sterren en noemt vooral de snelle levering en goede prijs-kwaliteitverhouding. Wel vindt hij de verpakking wat rommelig."

En dit is hetzelfde antwoord als structured output:

``json { "sentiment": "positief", "score": 4, "aspecten": [ {"naam": "levering", "waardering": "positief"}, {"naam": "prijs-kwaliteit", "waardering": "positief"}, {"naam": "verpakking", "waardering": "negatief"} ] } ``

Dat tweede antwoord kun je direct in je database droppen, visualiseren in een dashboard, of doorgeven aan een volgende stap in je automation. Geen parsing, geen regex, geen gedoe.

Drie manieren om structured output te krijgen

Er zijn drie gangbare methodes om AI te dwingen tot een formaat. Ze verschillen in betrouwbaarheid en complexiteit.

1. JSON mode (de makkelijkste)

Bij OpenAI en enkele andere providers kun je een parameter response_format meegeven met je API-call. Je zet die op {"type": "json_object"} en vraagt in je prompt expliciet om JSON terug te krijgen.

Het model gaat dan altijd valid JSON terugsturen — maar je moet zelf in je prompt beschrijven welke structuur je wil. Het model checkt niet of je de juiste veldnamen gebruikt of dat de datatypes kloppen. Het garandeert alleen dat het technisch geldige JSON is.

Voorbeeld prompt:

"Analyseer deze review en geef het resultaat terug als JSON met de volgende velden: sentiment (string), score (number 1-5), aspecten (array met objecten, elk met 'naam' en 'waardering')."

Dit werkt prima voor simpele use cases, maar het model kan nog steeds afwijken van je gewenste structuur als je prompt niet helder genoeg is.

2. Structured Outputs (de meest betrouwbare)

OpenAI heeft sinds medio 2024 een feature die letterlijk "Structured Outputs" heet. Je definieert een JSON Schema — een formele beschrijving van welke velden er moeten zijn, welke datatypes ze hebben, of ze verplicht zijn, etc. Het model garandeert dan 100% dat de output aan dat schema voldoet.

Dit is de methode die je wil gebruiken als betrouwbaarheid kritiek is. Als je JSON schema zegt dat score een integer tussen 1 en 5 moet zijn, krijg je nooit een string of een 6.

Je stuurt het schema mee als onderdeel van je API-request. Technisch iets complexer, maar de investering loont zodra je output automatisch gaat verwerken.

3. Function calling (de krachtigste)

Function calling is oorspronkelijk bedoeld om AI te laten beslissen welke externe functie het moet aanroepen (bijvoorbeeld "zoek in de database" of "verstuur een e-mail"). Maar je kunt het ook gebruiken als een slimme manier om structured output te krijgen.

Je definieert een fictieve "functie" met parameters die precies de structuur beschrijven die je terug wil. Het model krijgt dan de opdracht om die functie aan te roepen, en het vult de parameters in op basis van de input.

Dit geeft je niet alleen structuur, maar ook semantisch begrip. Het model begrijpt dat score niet zomaar een getal is, maar een waardering op schaal 1-5. Dat helpt bij complexere outputs waar context belangrijk is.

Function calling is wel het meest omslachtig om op te zetten, dus gebruik het vooral als je toch al met functies werkt of als je complexe, geneste structuren nodig hebt.

Wanneer gebruik je welke methode?

  • JSON mode: voor snelle prototypes, simpele structuren, situaties waar je weinig controle nodig hebt. Bijvoorbeeld: eerste versie van een feature, interne tooling, experimenten.

  • Structured Outputs: voor productie-omgevingen waar betrouwbaarheid cruciaal is. Bijvoorbeeld: data die direct een database in gaat, integraties met externe systemen, workflows waar foute datatypes je applicatie breken.

  • Function calling: voor complexe use cases waar het model moet beslissen tussen meerdere acties, of waar je diep geneste structuren hebt met veel onderlinge afhankelijkheden.

Als je twijfelt: begin met JSON mode om het concept te snappen, en migreer naar Structured Outputs zodra je code live gaat.

Praktische tips voor betrouwbare structured output

Beschrijf je structuur altijd in de prompt, ook als je een schema meegeeft. Het helpt het model om te begrijpen wat je bedoelt. "Geef terug als JSON met velden x, y, z" is duidelijker dan alleen een schema zonder context.

Test edge cases. Wat gebeurt er als een review geen score heeft? Of als er geen aspecten genoemd worden? Zorg dat je schema optionele velden toestaat waar dat logisch is, of definieer defaults.

Valideer de output altijd. Ook al garandeert het model valid JSON, het kan nog steeds onzinnige waarden bevatten. Een sentiment "positief" is technisch correct, maar als de review duidelijk negatief is, heb je een probleem. Bouw validatie in je code.

Houd je schema simpel. Hoe complexer je structuur, hoe moeilijker het voor het model om alles correct in te vullen. Vooral diep geneste objecten of lange arrays kunnen tot fouten leiden. Vraag jezelf af: kan dit platter?

Let op kosten. Structured outputs kosten iets meer tokens dan vrije tekst, omdat het model extra werk moet doen om aan je schema te voldoen. Voor de meeste use cases is dat verwaarloosbaar, maar als je duizenden calls per dag doet, telt het op.

Structured output buiten de API: werkt het ook in de chat-interface?

Ja, maar met minder garanties. In ChatGPT, Claude of andere chat-interfaces kun je vragen om output in een specifiek formaat — bijvoorbeeld een tabel, JSON of CSV. De modellen zijn daar steeds beter in geworden.

Maar je hebt geen technische garantie. Het model kan besluiten om toelichting toe te voegen, de structuur iets aan te passen, of een veld te vergeten. Voor ad-hoc analyses is dat prima, maar voor geautomatiseerde workflows kun je beter de API gebruiken.

En als je geen developer bent?

Structured output klinkt technisch, en dat is het ook — maar je hoeft niet zelf code te schrijven om ervan te profiteren. Tools als Zapier, Make (voorheen Integromat) en n8n ondersteunen structured output in hun OpenAI-integraties. Je kunt daar via een visuele interface een JSON-structuur definiëren en die meegeven aan je AI-stap.

Ook binnen spreadsheets (Google Sheets met een custom script, Excel met Power Automate) kun je structured output opvragen en direct in je sheet laten landen.

Wat kun je morgen doen?

Als je nu al met de OpenAI API werkt: probeer JSON mode eens uit. Voeg response_format: {"type": "json_object"} toe aan je volgende call en vraag expliciet om een JSON-structuur in je prompt. Kijk hoe betrouwbaar het is voor jouw use case.

Als je complexere workflows hebt: verdiep je in JSON Schema en Structured Outputs. De OpenAI-documentatie heeft goede voorbeelden. Begin klein — één simpel object met drie velden — en bouw van daaruit op.

En als je geen API gebruikt maar wel regelmatig ChatGPT output wil verwerken: experimenteer met het vragen om tabellen of JSON in de chat. Vraag bijvoorbeeld: "Geef je antwoord als een tabel met kolommen X, Y, Z" en kijk hoe consistent het is over meerdere prompts.

Structured output is geen nice-to-have meer zodra je AI serieus inzet in je workflow. Het is het verschil tussen "dit werkt soms" en "hier kan ik op bouwen".