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

Veröffentlicht am 13. Mai 2025

Large Language Models (LLMs) sind für ihre gelegentlich langen Antworten bekannt. Auch wenn Sie dem Modell sagen, es soll nur mit „true“ oder „false“ antworten, kann es mit einer freundlichen Antwort und mehr als dem, was Sie gefragt haben, antworten, z. B. „Sicher, die Antwort ist: true“.

Um dieses Problem zu beheben, können Sie mit der Prompt API ein JSON-Ausgabeformat für die Antwort des Modells angeben, indem Sie ein JSON-Schema an die LanguageModel.prompt() und LanguageModel.promptStreaming() Methoden übergeben. Die Unterstützung für strukturierte Ausgaben ist ab Chrome-Version 137 verfügbar.

Was ist ein JSON-Schema?

Ein JSON-Schema ist ein Vokabular, das die Konsistenz, Gültigkeit und Interoperabilität von JSON-Daten im großen Maßstab ermöglicht. Beim Datenaustausch ist das JSON-Schema ein leistungsstarker Standard zum Definieren der Struktur und der Regeln von JSON-Daten. Es verwendet eine Reihe von Keywords, um die Eigenschaften Ihrer Daten zu definieren.

Das JSON-Schema ist der Branchenstandard für strukturierte Ausgaben und wird unter anderem von der OpenAI API und Gemini APIverwendet.

Sie fordern das Modell beispielsweise auf, maximal drei Hashtags für einen Beitrag in einem sozialen Onlinenetzwerk wie Mastodon zuzuweisen. Die ideale Ausgabe könnte so aussehen:

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

Das entsprechende JSON-Schema für diese angeforderte Form des Ausgabobjekts sieht dann so aus:

{
  "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 Feld hashtags mit den folgenden Einschränkungen enthalten muss:

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

    • "type": "array": Der Wert muss ein Array sein.
    • "maxItems": 3: Das Array darf maximal drei Elemente enthalten.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" }: Jedes Element 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 ein weiteres # sind.
      • $ → muss dort enden.
  • "required": ["hashtags"]: Das Objekt muss die hashtags Property 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 zu den JSON Schema Basics.

Tatsächlich sind LLMs sehr gut im Erstellen von JSON-Schemas. Beschreiben Sie die Einschränkungen in natürlicher Sprache in Ihrem Prompt und geben Sie ein gültiges JSON-Beispielobjekt an. Dann haben Sie schon die Hälfte geschafft. Sie können JSON-Objekte dann mit einem der JSON-Schema-Validatoren anhand des generierten JSON-Schemas validieren, z. B. mit dem Online-Validator für das Newtonsoft-JSON-Schema.

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 Optionenobjekt der Methoden prompt() oder promptStreaming() übergeben, und zwar als Wert eines Felds responseConstraint.

Hier ist ein sehr einfaches JSON-Schema-Beispiel, das dafür sorgt, dass das Modell mit entweder true oder false antwortet, wenn es klassifiziert, ob es in einer bestimmten Nachricht wie diesem Mastodon-Beitrag um Keramik geht.

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

Die Unterstützung für strukturierte Ausgaben für die Prompt API macht die Antworten des LLM viel vorhersehbarer. Anstatt ein Objekt aus einer Markdown-Antwort zu extrahieren oder eine andere Nachbearbeitung durchzuführen, können Entwickler jetzt davon ausgehen, dass die Antwort des Modells gültiges JSON ist.

Dadurch rückt die integrierte KI einen Schritt näher an cloudbasierte APIs heran, mit allen Vorteilen der lokalen, clientseitigen KI.