Over ons 🤖

Laten we elkaar leren kennen

Vertel me de missie en visie

Leg het verhaal achter Mach8 uit

Hallo daar 👋

Hoe kunnen we je helpen?

Mijn gegevens mogen worden gebruikt om me op de hoogte te houden van relevant nieuws van Mach8

Implementatie & Techniek·6 min·4 mei 2025

Structured output bij LLMs: betrouwbare JSON uit een taalmodel halen

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.

Waarom JSON uit een LLM lastig is

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.

Optie 1: Native structured output via de API

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.

Optie 2: Prompttechnieken

Als je provider geen native structured output ondersteunt, kun je de prompt zo inrichten dat het model JSON produceert. Beproefde technieken:

  • Geef een voorbeeld van de gewenste output in de prompt (few-shot)
  • Vraag het model expliciet om "alleen JSON terug te geven, zonder extra tekst"
  • Gebruik een systeem-prompt die de outputstructuur beschrijft
  • Vraag het model om te beginnen met { om vrije tekst voor de JSON te voorkomen

Maar vertrouw niet blind op prompting alleen. Dit werkt goed voor eenvoudige structuren maar wordt onbetrouwbaar bij complexe geneste objecten.

Optie 3: Parsing-bibliotheken

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.

Validatie en foutafhandeling

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.

Wanneer JSON niet de juiste keuze is

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.

Conclusie

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.

Klaar om AI in te zetten?

Wij helpen je van strategie naar implementatie. Plan een vrijblijvend gesprek.

Plan een gesprek