Unterstützung für strukturierte Ausgabe für die Prompt API

Veröffentlicht: 13. Mai 2025

Large Language Models (LLMs) sind berüchtigt für ihre gelegentlich langen Antworten. Auch wenn Sie das Modell anweisen, nur mit „wahr“ oder „falsch“ zu antworten, antwortet es möglicherweise mit einer freundlichen Ausgabe und mehr, als Sie gefragt haben, z. B.: „Sicher, die Antwort lautet: wahr.“

Mit der Prompt API können Sie ein JSON-Ausgabeformat für die Antwort des Modells angeben, indem Sie den Methoden LanguageModel.prompt() und LanguageModel.promptStreaming() ein JSON-Schema übergeben. Die Unterstützung für strukturierte Ausgabe ist ab Chrome-Version 137 verfügbar.

Was ist ein JSON-Schema?

JSON Schema ist ein Vokabular, das für Konsistenz, Gültigkeit und Interoperabilität von JSON-Daten im großen Maßstab sorgt. Beim Datenaustausch zeichnet sich JSON Schema als leistungsstarker Standard für die Definition der Struktur und Regeln von JSON-Daten aus. Dabei werden die Eigenschaften Ihrer Daten anhand einer Reihe von Keywords definiert.

JSON Schema ist der Industriestandard für eine strukturierte Ausgabe und wird unter anderem von der OpenAI API und der Gemini API verwendet.

Sie können das Modell beispielsweise anweisen, einem Beitrag in einem Online-Netzwerk wie Mastodon maximal drei Hashtags zuzuweisen. Die ideale Ausgabe könnte in etwa so aussehen:

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

Das entsprechende JSON-Schema für diese angeforderte Ausgabeobjektform würde dann so aussehen:

{
  "type": "object",
  "properties": {
    "hashtags": {
      "type": "array",
      "maxItems": 3,
      "items": {
        "type": "string",
        "pattern": "^#[^\\s#]+$"
      }
    }
  },
  "required": ["hashtags"],
  "additionalProperties": false
}

Dieses JSON-Schema definiert eine Struktur für ein Objekt, das ein hashtags-Feld mit den folgenden Einschränkungen enthalten muss:

  • "type": "object": Der Wurzelwert muss ein JSON-Objekt sein.
  • "properties": { "hashtags": ... }: Das Objekt kann (und muss in diesem Fall) eine Property namens hashtags haben.
  • "hashtags":

    • "type": "array": Der Wert muss ein Array sein.
    • "maxItems": 3: Das Array kann maximal drei Elemente enthalten.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" }: Jeder Eintrag im Array muss ein String sein, der dem angegebenen regulären Ausdrucksmuster entspricht: ^#[^\\s#]+$:
      • ^# → muss mit einem # beginnen.
      • [^\\s#]+ → gefolgt von einem oder mehreren Zeichen, die kein Leerzeichen (\s) oder eine weitere # sind.
      • $ → muss dort enden.
  • "required": ["hashtags"]: Das Objekt muss die Property hashtags enthalten.

  • "additionalProperties": false: Es sind keine anderen Properties als Hashtags zulässig.

Eine vollständige Beschreibung der Funktionen des Formats finden Sie in der Dokumentation JSON Schema-Grundlagen.

LLMs eignen sich hervorragend zum Erstellen von JSON-Schemas. Beschreiben Sie die Einschränkungen in natürlicher Sprache in Ihrem Prompt und geben Sie ein gültiges Beispiel-JSON-Objekt an. Damit sind Sie schon fast am Ziel. Sie können dann JSON-Objekte mit einem der JSON-Schema-Validatoren, z. B. dem Newtonsoft JSON Schema Validator, anhand des generierten JSON-Schemas validieren.

Ein JSON-Objekt wurde in einem JSON-Schema-Validator erfolgreich anhand eines JSON-Schemas validiert.

JSON-Schema an die Prompt API übergeben

Damit das Modell ein angefordertes JSON-Schema berücksichtigt, müssen Sie das JSON-Schema als Argument an das Optionsobjekt der prompt()- oder promptStreaming()-Methode als Wert eines responseConstraint-Felds übergeben.

Hier ist ein sehr einfaches JSON-Schema-Beispiel, das dafür sorgt, dass das Modell mit true oder false antwortet, wenn es klassifiziert, ob eine bestimmte Nachricht wie dieser Mastodon-Beitrag sich auf Töpferei bezieht.

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  

Vorhersehbare Ausgaben unterstützen

Durch die Unterstützung strukturierter Ausgabe für die Prompt API sind die Antworten des LLM viel vorhersehbarer. Anstatt ein Objekt aus einer Markdown-Antwort oder einer anderen Nachverarbeitung zu extrahieren, können Entwickler jetzt davon ausgehen, dass die Antwort des Modells gültiges JSON ist.

So kommt die integrierte KI cloudbasierten APIs einen Schritt näher – mit allen Vorteilen der lokalen, clientseitigen KI.