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ź „prawda” lub „fałsz”, może on odpowiedzieć w przyjazny sposób i podać więcej informacji, niż oczekujesz, np.: „Oczywiście, odpowiedź to: prawda”.
Aby rozwiązać ten problem, Prompt API umożliwia określenie formatu JSON odpowiedzi modelu przez przekazanie schematu JSON do metod LanguageModel.prompt()
i LanguageModel.promptStreaming()
. Obsługa danych strukturalnych jest dostępna od Chrome w wersji 137.
Czym jest schemat JSON
JSON Schema 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 jest doskonałym standardem do określania struktury i reguł danych JSON. Do określania właściwości danych używa zestawu słów kluczowych.
JSON Schema to standard branżowy zapewniający strukturalne dane wyjściowe, używany m.in. przez interfejs OpenAI API i interfejs Gemini API.
Możesz na przykład poprosić model o przypisanie maksymalnie 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 kształtu obiektu wyjściowego wyglądałby tak:
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
Ten schemat JSON określa 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 nazwiehashtags
."hashtags":
"type": "array"
: wartość musi być tablicą."maxItems": 3
: tablica może zawierać maksymalnie 3 elementy."items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: każdy element tablicy musi być ciągiem znaków pasującym do podanego wzorca wyrażenia regularnego:^#[^\\s#]+$
:^#
→ musi zaczynać się od#
.[^\\s#]+
→ po którym wystę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
: Dozwolone są tylko hashtagi.
Pełny opis możliwości formatu znajdziesz w dokumentacji JSON Schema Basics.
Modele LLM bardzo dobrze radzą sobie z tworzeniem schematów JSON. Opisz ograniczenia w języku naturalnym w prompcie i podaj prawidłowy przykład obiektu JSON, a będziesz w połowie drogi. 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.
Przekazywanie schematu JSON do interfejsu Prompt API
Aby mieć pewność, że model uwzględnia żądany schemat JSON, musisz przekazać schemat JSON jako argument do obiektu opcji metody prompt()
lub promptStreaming()
jako wartość pola responseConstraint
.
Oto bardzo prosty przykład schematu JSON, który zapewnia, że model odpowie true
lub false
, klasyfikując, czy dany komunikat, 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 wyników
Obsługa danych wyjściowych w formacie strukturalnym w interfejsie Prompt API sprawia, że odpowiedzi LLM są znacznie bardziej przewidywalne. Zamiast wyodrębniać obiekt z odpowiedzi w formacie Markdown lub przeprowadzać inne przetwarzanie końcowe, deweloperzy mogą teraz zakładać, że odpowiedź modelu jest prawidłowym kodem JSON.
Dzięki temu wbudowana AI jest o krok bliżej interfejsów API opartych na chmurze, a jednocześnie ma wszystkie zalety działania lokalnej AI po stronie klienta.