Gepubliceerd: 13 mei 2025
Grote taalmodellen (LLM's) zijn berucht om hun soms lange antwoorden. Zelfs als u het model vertelt om alleen maar met 'waar' of 'onwaar' te antwoorden, kan het model reageren met een vriendelijke reactie en meer dan waar u om vroeg, zoals: 'Zeker, het antwoord is: waar.'
Om dit probleem aan te pakken, kunt u met de Prompt API een JSON-uitvoerformaat opgeven voor de respons van het model door een JSON-schema door te geven aan de methoden LanguageModel.prompt()
en LanguageModel.promptStreaming()
. Ondersteuning voor gestructureerde uitvoer is beschikbaar vanaf Chrome-versie 137.
Wat is JSON-schema
JSON Schema is een vocabulaire dat consistentie, validiteit en interoperabiliteit van JSON-gegevens op schaal mogelijk maakt. Als het gaat om gegevensuitwisseling, onderscheidt JSON Schema zich als een krachtige standaard voor het definiëren van de structuur en regels van JSON-gegevens. Het gebruikt een reeks trefwoorden om de eigenschappen van uw gegevens te definiëren.
JSON Schema is de industriestandaard voor het garanderen van gestructureerde uitvoer, die onder meer wordt gebruikt door de OpenAI API en Gemini API .
U vraagt het model bijvoorbeeld om maximaal drie hashtags toe te wijzen aan een bericht op een online sociaal netwerk, zoals Mastodon. De ideale uitvoer zou er ongeveer zo uit kunnen zien als de volgende JSON:
{
"hashtags": [
"#pottery",
"#dyi"
]
}
Het corresponderende JSON-schema voor deze gevraagde uitvoerobjectvorm zou er dan als volgt uitzien:
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
Dit JSON-schema definieert een structuur voor een object dat een hashtags
moet bevatten met de volgende beperkingen:
-
"type": "object"
: De hoofdwaarde moet een JSON-object zijn. -
"properties": { "hashtags": ... }
: Het object kan (en moet in dit geval) een eigenschap hebben met de naamhashtags
. "hashtags":
-
"type": "array"
: De waarde moet een array zijn. -
"maxItems": 3
: De array kan maximaal 3 items bevatten. -
"items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: Elk item in de array moet een string zijn die overeenkomt met het gegeven reguliere expressiepatroon:^#[^\\s#]+$
:-
^#
→ moet beginnen met een#
. -
[^\\s#]+
→ gevolgd door een of meer tekens die geen spatie zijn (\s
) of een andere#
. -
$
→ moet daar eindigen.
-
-
"required": ["hashtags"]
: Het object moet de eigenschaphashtags
bevatten."additionalProperties": false
: Er zijn geen andere eigenschappen dan hashtags toegestaan.
Lees de JSON Schema Basics -documentatie voor een volledige beschrijving van de mogelijkheden van het formaat.
LLM's zijn zelfs heel goed in het maken van JSON-schema's. Beschrijf de beperkingen in natuurlijke taal in uw prompt en geef een geldig voorbeeld van een JSON-object, en u bent halverwege. Vervolgens kunt u JSON-objecten valideren aan de hand van het gegenereerde JSON Schema met een van de JSON Schema validators , bijvoorbeeld de online Newtonsoft JSON Schema Validator .
Geef een JSON-schema door aan de Prompt API
Om er zeker van te zijn dat het model een aangevraagd JSON-schema respecteert, moet u het JSON-schema als argument doorgeven aan het prompt()
of het promptStreaming()
-methode-object als de waarde van een responseConstraint
veld.
Hier is een heel eenvoudig JSON-schemavoorbeeld dat ervoor zorgt dat het model reageert met true
of false
bij het classificeren of een bepaald bericht zoals dit Mastodon-bericht over aardewerk gaat.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
Ondersteun voorspelbare resultaten
Gestructureerde uitvoerondersteuning voor de Prompt API maakt de reacties van de LLM een stuk voorspelbaarder. In plaats van een object uit een Markdown-antwoord of andere nabewerking te extraheren, kunnen ontwikkelaars er nu van uitgaan dat het antwoord van het model geldige JSON is.
Dit brengt ingebouwde AI een stap dichter bij cloudgebaseerde API’s, met alle voordelen van het uitvoeren van lokale AI aan de clientzijde.