Obsługa danych uporządkowanych w interfejsie Prompt API

Opublikowano: 13 maja 2025 r.

Duże modele językowe (LLM) są znane z tego, że czasami udzielają długich odpowiedzi. Nawet jeśli poprosisz model o odpowiedź „true” lub „false”, może on odpowiedzieć w przyjazny sposób i podać więcej informacji, niż oczekujesz, np. „Oczywiście, odpowiedź to: true”.

Aby rozwiązać ten problem, interfejs Prompt API umożliwia określenie formatu wyjściowego JSON odpowiedzi modelu przez przekazanie schematu JSON do metod LanguageModel.prompt() i LanguageModel.promptStreaming(). Obsługa danych wyjściowych w postaci uporządkowanej jest dostępna od wersji Chrome 137.

Czym jest schemat JSON

Schemat JSON to słownik, który umożliwia zachowanie spójności, ważności i interoperacyjności danych JSON na dużą skalę. W przypadku wymiany danych schemat JSON wyróżnia się jako skuteczny standard definiowania struktury i reguł danych JSON. Używa on zestawu słów kluczowych do definiowania właściwości danych.

Schemat JSON to standard branżowy zapewniający uporządkowane dane wyjściowe, używany m.in. przez interfejs OpenAI API i Gemini API.

Na przykład możesz poprosić model o przypisanie co najwyżej 3 hashtagów do posta w sieci społecznościowej online, takiej jak Mastodon. Idealne dane wyjściowe mogą wyglądać podobnie do tego kodu JSON:

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

Odpowiedni schemat JSON dla tego żądanego kształtu obiektu wyjściowego będzie wyglądać tak:

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

Ten schemat JSON definiuje strukturę obiektu, który musi zawierać pole hashtags z tymi ograniczeniami:

  • "type": "object": wartość główna musi być obiektem JSON.
  • "properties": { "hashtags": ... }: obiekt może (a w tym przypadku musi) mieć właściwość o nazwie hashtags.
  • "hashtags":

    • "type": "array": wartość musi być tablicą.
    • "maxItems": 3: tablica może zawierać co najwyżej 3 elementy.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" }: każdy element w tablicy musi być ciągiem znaków pasującym do podanego wzorca wyrażenia regularnego: ^#[^\\s#]+$:
      • ^# → musi zaczynać się od znaku #.
      • [^\\s#]+ → po którym następuje co najmniej 1 znak, który nie jest spacją (\s) ani innym znakiem #.
      • $ → musi się tam kończyć.
  • "required": ["hashtags"]: obiekt musi zawierać właściwość hashtags.

  • "additionalProperties": false: nie są dozwolone żadne inne właściwości niż hashtagi.

Pełny opis możliwości formatu znajdziesz w dokumentacji podstaw schematu JSON.

Modele LLM doskonale radzą sobie z tworzeniem schematów JSON. Wystarczy, że w prompcie opiszesz ograniczenia w języku naturalnym i podasz prawidłowy przykładowy obiekt JSON. Następnie możesz zweryfikować obiekty JSON na podstawie wygenerowanego schematu JSON za pomocą jednego z walidatorów schematu JSON, np. internetowego walidatora schematu JSON Newtonsoft.

Prawidłowe zweryfikowanie obiektu JSON na podstawie schematu JSON w walidatorze schematu JSON.

Przekazywanie schematu JSON do interfejsu Prompt API

Aby mieć pewność, że model będzie przestrzegać żądanego schematu JSON, musisz przekazać schemat JSON jako argument do obiektu opcji metod prompt() lub promptStreaming() jako wartość pola responseConstraint.

Oto bardzo prosty przykład schematu JSON, który zapewnia, że model odpowie „true” lub „false” w przypadku klasyfikowania, czy dana wiadomość, np. ten post na Mastodonie, dotyczy ceramiki.

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

Obsługa przewidywalnych danych wyjściowych

Obsługa danych wyjściowych w postaci uporządkowanej w interfejsie Prompt API sprawia, że odpowiedzi LLM są znacznie bardziej przewidywalne. Zamiast wyodrębniać obiekt z odpowiedzi w formacie Markdown lub innego przetwarzania końcowego, deweloperzy mogą teraz założyć, że odpowiedź modelu jest prawidłowym kodem JSON.

Dzięki temu wbudowana AI jest o krok bliżej interfejsów API opartych na chmurze, z wszystkimi zaletami działania lokalnej AI po stronie klienta.