Gestructureerde uitvoerondersteuning voor de Prompt API

Gepubliceerd: 13 mei 2025

Grote taalmodellen (LLM's) staan ​​bekend om hun soms lange antwoorden. Zelfs als je het model vraagt ​​om alleen "waar" of "onwaar" te antwoorden, kan het model vriendelijk antwoorden en meer dan je gevraagd hebt, zoals: "Zeker, het antwoord is: waar."

Om deze uitdaging aan te pakken, kunt u met de Prompt API een JSON-uitvoerformaat van de respons van het model specificeren 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-data op schaal mogelijk maakt. Als het gaat om data-uitwisseling, onderscheidt JSON Schema zich als een krachtige standaard voor het definiëren van de structuur en regels van JSON-data. Het gebruikt een reeks trefwoorden om de eigenschappen van uw data te definiëren.

JSON Schema is de industriestandaard voor het garanderen van gestructureerde output en wordt onder andere 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:

{
  "hashtags": [
    "#pottery",
    "#dyi"
  ] 
}

Het bijbehorende JSON-schema voor de gevraagde uitvoerobjectvorm ziet er dan als volgt uit:

{
  "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 -veld 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 die hashtags heet.
  • "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 ( \s ) of een andere # zijn.
      • $ → moet hier eindigen.
  • "required": ["hashtags"] : Het object moet de eigenschap hashtags 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 erg goed in het creëren van JSON-schema's. Beschrijf de beperkingen in natuurlijke taal in je opdracht en geef een geldig voorbeeld van een JSON-object, en je bent al halverwege. Je kunt JSON-objecten vervolgens valideren aan de hand van het gegenereerde JSON-schema met een van de JSON-schemavalidators , bijvoorbeeld de online Newtonsoft JSON Schema Validator .

Een JSON-object succesvol valideren tegen een JSON-schema in een JSON-schemavalidator.

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 options-object van de methoden prompt() of promptStreaming() als de waarde van een responseConstraint veld.

Hier is een heel eenvoudig JSON-schemavoorbeeld dat ervoor zorgt dat het model met true of false reageert bij het classificeren of een 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 uitkomsten

Ondersteuning voor gestructureerde output voor de Prompt API maakt de reacties van de LLM veel voorspelbaarder. In plaats van een object te extraheren uit een Markdown-reactie of andere nabewerking, kunnen ontwikkelaars er nu van uitgaan dat de reactie van het model geldige JSON is.

Hiermee komt ingebouwde AI een stap dichter bij op de cloud gebaseerde API's, met alle voordelen van het uitvoeren van lokale AI aan de clientzijde.