Waarom hebben AI-apps gestructureerde uitvoer nodig?
AI-apps hebben gestructureerde uitvoer nodig, omdat software een prettig leesbare alinea niet betrouwbaar kan verwerken; software heeft elke keer dezelfde velden nodig, met dezelfde namen en typen. Eén extra zin of een ontbrekend veld kan de volgende stap in uw app laten mislukken.
Stelt u zich een fictieve logistieke start-up met 12 medewerkers voor: Parcelwise. Ontwikkelaar Sana bouwt een tool die e-mails van klanten leest en een formulier voor bezorgwijzigingen invult: bestelnummer, gewenste datum, nieuw adres en of de klant om terugbetaling vraagt. Een doorsnee e-mail luidt: 'Hoi, bestelling PW-88213, ik ben er do niet, kunnen jullie za komen? Of bij nr. 14 afgeven. Anders gewoon annuleren en geld terug aub.' Haar eerste versie vraagt het model om 'in JSON te antwoorden'. De meeste antwoorden zijn te verwerken, maar sommige beginnen met 'Natuurlijk, hier is de JSON', sommige noemen het veld 'date' in plaats van 'requested_date', en één geeft de datum terug als 'zaterdag'.
Wat is een JSON-schema en waarom is het nuttig?
Een JSON-schema is een formele beschrijving van de gegevens die u verwacht: welke velden er zijn, welke verplicht zijn, welk type elk veld heeft en welke waarden zijn toegestaan. Door het model een schema te geven, verandert u 'antwoord alstublieft in JSON' in een afspraak die uw code kan controleren.
Voor Sana bepaalt het schema: order_reference is een verplicht tekstveld; requested_date is een verplicht tekstveld met een datumnotatie, of null als er geen datum is opgegeven; new_address is een tekstveld of null; refund_requested is een verplicht booleaans veld; en andere velden zijn niet toegestaan. Die laatste regel voorkomt dat het model velden met commentaar toevoegt.
Hoe ondersteunen model-API's gestructureerde uitvoer?
Via de API's van grote modellen kunt u een JSON-schema meesturen met het verzoek. De uitvoer van het model wordt dan beperkt tot wat binnen dat schema past.
OpenAI
De functie Structured Outputs van OpenAI beperkt antwoorden tot een aangeleverd JSON-schema wanneer de strikte modus is ingeschakeld. De documentatie maakt onderscheid met de oudere JSON-modus, die alleen geldige JSON garandeert, niet dat uw schema wordt gevolgd. De documentatie beveelt Structured Outputs aan waar die functie beschikbaar is.
Anthropic
De API van Claude biedt JSON-uitvoer die overeenkomt met een schema dat u opgeeft, plus een strikte optie bij tooldefinities waarmee invoer voor de tool wordt gevalideerd aan de hand van het schema van die tool. De documentatie vermeldt welke schemafuncties worden ondersteund en welke een foutmelding opleveren.
De Gemini API accepteert een JSON-schema voor antwoorden en ondersteunt een afgebakende set schematrefwoorden. Volgens de documentatie is de uitvoer syntactisch correcte JSON, maar moet u de waarden nog steeds in uw toepassing valideren.
Waarom blijven validatie en nieuwe pogingen nodig?
Validatie blijft nodig, omdat een schema de structuur van de gegevens bepaalt, niet of de waarden kloppen. Een perfect gestructureerd antwoord kan nog steeds een verkeerde datum, een verzonnen bestelreferentie of een markering voor een terugbetaling bevatten waar de klant nooit om heeft gevraagd.
Valideer in twee lagen. Controleer eerst de structuur met een schemabibliotheek, zoals Pydantic in Python of Zod in JavaScript. De documentatie van OpenAI, Anthropic en Google bevat hier voorbeelden van. Controleer vervolgens de bedrijfsregels: voldoet de orderreferentie aan het patroon en bestaat deze in het systeem, ligt de datum in de toekomst en is het een bezorgdag, en valt het adres binnen een bezorggebied? Houd ook rekening met de gevallen die de aanbieders documenteren: een weigering, die mogelijk niet aan uw schema voldoet, en een antwoord dat wordt afgebroken doordat de maximale tokenlimiet is bereikt, waardoor de JSON onvolledig blijft.
Probeer het zorgvuldig opnieuw. Als een controle mislukt, laat u één nieuwe poging uitvoeren met vermelding van de specifieke fout, zoals 'requested_date moet een datum zijn; in de e-mail staat zaterdag en de besteldatum is 14 oktober'. Beperk het aantal nieuwe pogingen tot één of twee en stuur de e-mail daarna door naar een persoon.
Hoe ziet zwakke gestructureerde uitvoer eruit, en hoe robuuste?
Zwakke versie: de prompt zegt 'Haal de gegevens eruit en antwoord in JSON.' De app verwerkt alles wat terugkomt. Voor de bovenstaande e-mail ontvangt de app velden met de namen order en date, een datumwaarde van 'zaterdag' en een terugbetalingswaarde van true, omdat het model 'zo niet, annuleer dan maar' als een definitief verzoek opvatte. Het formulier wordt verkeerd ingevuld en de klant krijgt een terugbetaling die niet de bedoeling was.
Robuuste versie: het verzoek bevat het schema van Sana met strikte modus en de prompt licht elk veld toe, waaronder 'refund_requested is alleen true als de klant onvoorwaardelijk om terugbetaling vraagt'. Het model geeft order_reference PW-88213 terug, requested_date als de datum van de eerstvolgende zaterdag, new_address als null, refund_requested als false en conditional_request, een veld dat Sana speciaal voor dit geval aan het schema heeft toegevoegd, met de waarde 'terugbetaling als zaterdag of bezorging bij de buren niet mogelijk is'. De validatie bevestigt dat de bestelling bestaat en dat zaterdag een bezorgdag is. Omdat de e-mail een voorwaardelijk verzoek bevat, sturen de regels deze door naar een persoon voor de definitieve beslissing.
Wat zijn veelgemaakte fouten bij gestructureerde uitvoer?
De meest voorkomende fout is erop vertrouwen dat geldige JSON ook correcte gegevens bevat. Andere fouten: uitsluitend vertrouwen op promptinstructies terwijl de API een schema kan afdwingen, vage veldnamen zonder beschrijvingen gebruiken, een waarde afdwingen terwijl null het eerlijke antwoord is, weigeringen en afgebroken antwoorden negeren en het opnieuw proberen zonder het model te vertellen wat er mis was.
Waar past gestructureerde uitvoer in het lesaanbod van Tosheo.ai?
Gestructureerde uitvoer is een programmeerles in de cursus AI-apps bouwen, binnen de categorie AI-apps bouwen. De volledige praktijkversie met code, waarin u een schema definieert, een API aanroept, antwoorden valideert en een nieuwe poging toevoegt, vindt u na aanmelding in het programmeertraject, met feedback op elke stap aan de hand van een beoordelingsschema.