Taalmodellen zijn getraind om tekst te genereren, niet om valide JSON te produceren. Als je applicatie afhankelijk is van een gestructureerd antwoord, heb je een strategie nodig om dat betrouwbaar te krijgen, ook als het model soms toch afwijkt.
Wie AI integreert in een applicatie, wil meestal geen vrije tekst terug maar een netjes gestructureerd object: een JSON-response met specifieke velden die je kunt doorsturen naar een database of een volgende stap in je workflow. Het probleem is dat taalmodellen van nature vrije tekst produceren. Dit artikel legt uit hoe je structured output afdwingt.
Een taalmodel genereert token voor token op basis van kansen. Het "weet" niet dat het JSON produceert, het produceert gewoon tekst die op JSON lijkt. Kleine fouten — een ontbrekende sluitende haakje, een extra komma, of een onverwacht veld — zijn genoeg om een JSON.parse() te laten crashen.
Dit is geen theoretisch probleem. In de praktijk slaagt een naïeve JSON-prompt bij complexe output ongeveer zeven van de tien keer. Voor productieomgevingen is dat onacceptabel. Je hebt een betrouwbaardere aanpak nodig.
De eenvoudigste oplossing is het gebruik van de native structured output functionaliteit die de meeste grote providers aanbieden. OpenAI heeft response_format: { type: "json_schema" }, Anthropic biedt tool use als manier om gestructureerde output te forceren.
Je geeft een JSON Schema op dat beschrijft welke velden je verwacht, met welke types en of ze verplicht zijn. Het model genereert dan output die aan dat schema voldoet — niet perfect, maar significant betrouwbaarder dan een vrije prompt.
Dit is de aanbevolen aanpak voor nieuwe integraties. Het is eenvoudig te implementeren en de verantwoordelijkheid voor validatie ligt gedeeltelijk bij de provider.
Als je provider geen native structured output ondersteunt, kun je de prompt zo inrichten dat het model JSON produceert. Beproefde technieken:
{ om vrije tekst voor de JSON te voorkomenMaar vertrouw niet blind op prompting alleen. Dit werkt goed voor eenvoudige structuren maar wordt onbetrouwbaar bij complexe geneste objecten.
Bibliotheken zoals Instructor (Python), zod-gpt (TypeScript) of Outlines bieden een laag boven op de LLM-API die structured output afdwingt via retries en schema-validatie. Je definieert een schema of dataclass, en de bibliotheek zorgt er automatisch voor dat de output daaraan voldoet — inclusief herproberen als het mislukt.
Dit is een praktische middenweg: je hebt controle over het schema, validatie is automatisch, en het werkt met meerdere providers.
Ongeacht welke aanpak je kiest, valideer altijd de output voordat je die gebruikt. Een JSON-response die syntactisch correct is, kan semantisch nog steeds verkeerd zijn: een verplicht veld dat leeg is, een getal waar een string verwacht wordt.
Gebruik schema-validatie (zoals Zod in TypeScript of Pydantic in Python) als laatste vangnet. Log mislukte validaties zodat je kunt zien hoe vaak het fout gaat en welke fouten het vaakst voorkomen.
Soms is structured output niet de beste oplossing. Als je output primair menselijk leesbaar moet zijn, is vrije tekst beter. Als de structuur sterk varieert per vraag, is een rigide schema een keurslijf.
Overweeg ook of je de structurering kunt verschuiven: laat het model vrije tekst genereren en gebruik daarna een tweede, simpele aanroep of een reguliere expressie om de relevante informatie eruit te halen.
Betrouwbare JSON uit een taalmodel halen vereist meer dan een goede prompt. Het vraagt om een combinatie van native API-functies, schema-validatie en foutafhandeling. Mach8 past deze technieken toe in AI-workflows die echt schaalbaar en betrouwbaar moeten zijn.
Wil je weten hoe Mach8 AI-integraties bouwt die stabiel draaien? Bekijk onze AI-agents service of neem contact op.
Wij helpen je van strategie naar implementatie. Plan een vrijblijvend gesprek.
Plan een gesprek