Waardoor breekt de uitvoer van een lokaal LLM een geldig JSON-schema?

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

Lokale LLM-uitvoer doorbreekt een geldig JSON-schema wanneer generatie, constraint-afhandeling, stopregels en validatie niet hetzelfde contract afdwingen.

Een zelfgehoste workflow kan een schema dat voldoet aan de standaarden aanleveren voor bestandsmetadata, smart-home-acties, documentextractie of toolargumenten en toch onjuist gevormde of afgewezen uitvoer ontvangen. “Geldig schema” beschrijft het schemadocument, niet het volledige uitvoeringstraject. Het model moet de taak begrijpen, de decoder moet de relevante schemafuncties ondersteunen, de generatie moet zijn voltooid voordat een stopconditie deze afbreekt, de parser moet een volledige JSON-waarde reconstrueren en de applicatievalidator moet de verwachte draft- en coercionregels toepassen.

Geldige JSON en schema-geldige JSON zijn verschillende uitkomsten

Een object kan zonder problemen worden geparsed en toch verplichte velden, typen, enums, arraylimieten of voorwaardelijke vertakkingen schenden. Het kan ook correcte veldnamen bevatten, maar eigenschappen toevoegen die volgens het schema verboden zijn.

De JSON-module van Python definieert de syntaxlaag voor het decoderen van een JSON-document, maar parsing past geen afzonderlijk JSON Schema-contract toe.

Deze oorzaak is herkenbaar wanneer de uitvoer zonder syntaxfout wordt geladen, maar pas na schemavalidatie faalt. Een ontbrekende accolade of afsluitende uitleg is een serialisatiefout; een string waar een integer vereist is, is een contractfout.

Schemacompositie kan moeilijk te vervullen vertakkingen creëren

Trefwoorden zoals allOf, anyOf, oneOf en not combineren beperkingen. Een vertakking kan op zichzelf geldig zijn, terwijl het gecombineerde object aan geen of juist meerdere van de toegestane alternatieven voldoet.

De JSON Schema-richtlijnen leggen uit hoe trefwoorden voor schemacompositie bepalen of één of meerdere subschema’s moeten overeenkomen.

Een lokaal model verwerkt vaak een platte lijst met eigenschappen betrouwbaarder dan geneste voorwaardelijke logica. Als fouten zich concentreren rond unions of onderling exclusieve objectvormen, komt de belangrijkste druk voort uit vertakkingsselectie en niet uit basale JSON-interpunctie.

De decoder met constraints ondersteunt mogelijk slechts een deel van het schema

Engines voor gestructureerde uitvoer vertalen schema’s naar tokenbeperkingen, grammatica’s, reguliere expressies of backend-specifieke regels. Ze implementeren niet allemaal elke JSON Schema-draft of elk trefwoord.

vLLM biedt meerdere backends voor gestructureerde uitvoer, waaruit blijkt dat JSON-schema’s, grammatica’s, reguliere expressies en beperkingen op basis van vaste keuzes afzonderlijke uitvoeringsmodi zijn.

Deze oorzaak treedt op wanneer hetzelfde schema correct wordt gevalideerd door een standaardvalidator, maar alleen onder één inference-backend faalt. Niet-ondersteunde recursie, verwijzingen, patronen of voorwaardelijke trefwoorden kunnen worden vereenvoudigd, genegeerd of afgewezen voordat het model iets genereert.

Promptinstructies kunnen conflicteren met het schema

De gebruikersprompt kan om commentaar, citaten, uitleg, optionele weglatingen of natuurlijke-taalkundige onzekerheid vragen, terwijl het schema één object met vaste velden vereist.

Het model heeft dan twee concurrerende succescriteria: de gebruiker conversationeel antwoorden en uitsluitend tokens produceren die binnen het machinecontract zijn toegestaan. Een kleiner lokaal model kan de meest recente of opvallendste instructie volgen in plaats van beide met elkaar te verzoenen.

Deze fouten voegen vaak een inleiding, markdown-codeblok, uitleg na het object of een waarde toe die wel aan het verzoek in natuurlijke taal voldoet, maar de gedeclareerde enum schendt. Het schema is geldig; de instructiehiërarchie is inconsistent.

Afkapping kan een correct plan in ongeldige uitvoer veranderen

Geneste arrays en objecten hebben voldoende gegenereerde tokens nodig om elke structuur te sluiten. Een tokenlimiet, stopstring, geannuleerd verzoek of onderbroken stream kan het antwoord beëindigen voordat de laatste scheidingstekens zijn toegevoegd.

Transformers biedt instellingen voor maximale tokens en stoppen die bepalen wanneer de generatie eindigt.

Deze hoofdoorzaak wordt gekenmerkt door geldige voorvoegsels die abrupt eindigen, vooral bij grotere arrays of lange stringvelden. Herhaalde typefouten aan het begin wijzen op iets anders; ontbrekende sluitende haakjes rond de uitvoerlimiet duiden op onvolledige generatie.

Validatiesemantiek kan waarden afwijzen die het model als gelijkwaardig beschouwde

Een model kan "3" voor een integer, null voor een weggelaten veld, een enum in kleine letters of een ISO-datum produceren terwijl de applicatie een ander formaat verwacht.

Pydantic documenteert afzonderlijke categorieën van validatiefouten voor ontbrekende waarden, ongeldige JSON, enumverschillen, verboden extra velden en incompatibele typen.

Als elke fout hetzelfde veld bereikt met een parseerbare maar afgewezen waarde, is de oorzaak geen willekeurige schemafout. Het gaat om een verschil van inzicht over coercion, strictheid, nullability, hoofdlettergebruik of formaten op applicatieniveau.

Grammaticabeperkingen kunnen syntax behouden, maar niet de bedrijfsbetekenis

Een grammatica kan ongeldige accolades en sleutels blokkeren en toch een semantisch onmogelijke combinatie toestaan, zoals een einddatum vóór een startdatum of een niet-bestaand bestandspad.

llama-cpp-python biedt generatie met grammaticabeperkingen als inference-instelling, maar de grammatica bepaalt de toegestane tokenstructuur en niet de externe werkelijkheid.

Een schemafout die wordt veroorzaakt door regels tussen velden kan pas in een tweede validatielaag zichtbaar worden. De uitvoer kan syntactisch en structureel geldig zijn, maar toch onbruikbaar voor de home-serverworkflow.

Postprocessing kan anders geldige modeluitvoer beschadigen

Applicaties verwijderen soms markdown, halen het eerste blok tussen accolades eruit, voegen streamingchunks samen, herstellen komma’s of converteren waarden vóór validatie.

Een geldige modelreactie kan ongeldig worden wanneer een streamchunk wordt gedupliceerd, Unicode verkeerd wordt gedecodeerd, een escape-sequentie wordt verwijderd of een herstel­functie geneste inhoud bewerkt. Omgekeerd kan een herstelstap verhullen dat de onbewerkte modeluitvoer ongeldig was.

De uitleg van ZimaSpace over waarom kleine lokale modellen hallucineren tijdens JSON-uitvoer vormt de aangrenzende context: schemageldigheid en feitelijke juistheid moeten afzonderlijk worden gemeten, en de onbewerkte reactie moet worden bewaard voordat de applicatie transformaties uitvoert.

Veelgestelde vragen

Bewijst geldige JSON dat de uitvoer overeenkomt met het schema?

Nee. JSON-parsing controleert de syntax. Schemavalidatie controleert afzonderlijk verplichte eigenschappen, typen, enums, vertakkingen, limieten en andere gedeclareerde beperkingen.

Voorkomt temperatuur nul schemafouten?

Nee. Dit kan één decodeerpad beter herhaalbaar maken, maar voegt geen niet-ondersteunde schemafuncties toe, voorkomt geen afkapping en lost conflicterende instructies niet op.

Garandeert constrained decoding een bruikbaar automatiseringsrecord?

Nee. Het kan ondersteunde structurele beperkingen garanderen, maar bedrijfsregels, bronverankering, het bestaan van bestanden, machtigingen en consistentie tussen velden vereisen nog steeds validatie door de applicatie.

Tech & AI HUB

Meer om te lezen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.