Опубликовано: 13 мая 2025 г.
Большие языковые модели (LLM) печально известны своими иногда длинными ответами. Даже если вы скажете модели ответить просто «истина» или «ложь», модель может ответить дружелюбным выводом и больше, чем вы просили, например: «Конечно, ответ: истина».
Чтобы решить эту проблему, API Prompt позволяет указать формат вывода JSON ответа модели, передав схему JSON методам LanguageModel.prompt()
и LanguageModel.promptStreaming()
. Поддержка структурированного вывода доступна с версии Chrome 137.
Что такое схема JSON
JSON Schema — это словарь, который обеспечивает согласованность, валидность и совместимость данных JSON в масштабе. Когда дело доходит до обмена данными, JSON Schema выделяется как мощный стандарт для определения структуры и правил данных JSON. Он использует набор ключевых слов для определения свойств ваших данных.
JSON Schema — это отраслевой стандарт для обеспечения структурированного вывода, используемый, в частности, OpenAI API и Gemini API .
Например, вы предлагаете модели назначить максимум три хэштега для поста в онлайн-социальной сети, такой как Mastodon. Идеальный вывод может выглядеть примерно так:
{
"hashtags": [
"#pottery",
"#dyi"
]
}
Соответствующая схема JSON для этой запрошенной формы выходного объекта будет выглядеть следующим образом:
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
Эта схема JSON определяет структуру объекта, который должен содержать поле hashtags
со следующими ограничениями:
-
"type": "object"
: Корневое значение должно быть объектом JSON. -
"properties": { "hashtags": ... }
: Объект может (и в данном случае должен) иметь свойство, называемоеhashtags
. "hashtags":
-
"type": "array"
: Значение должно быть массивом. -
"maxItems": 3
: Массив может содержать не более 3 элементов. -
"items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: Каждый элемент массива должен быть строкой, которая соответствует заданному шаблону регулярного выражения:^#[^\\s#]+$
:-
^#
→ должно начинаться с#
. -
[^\\s#]+
→, за которым следует один или несколько символов, не являющихся пробелом (\s
) или другим#
. -
$
→ должно заканчиваться там.
-
-
"required": ["hashtags"]
: Объект должен содержать свойствоhashtags
."additionalProperties": false
: не допускаются никакие другие свойства, кроме хэштегов.
Полное описание возможностей формата можно найти в документации по основам схемы JSON .
На самом деле, LLM действительно хороши в создании JSON Schema. Опишите ограничения на естественном языке в вашем приглашении и предоставьте допустимый пример JSON-объекта, и вы на полпути. Затем вы можете проверить JSON-объекты на соответствие сгенерированной JSON-схеме с помощью одного из валидаторов JSON-схем , например, онлайн- валидатора Newtonsoft JSON Schema .
Передайте схему JSON в API Prompt
Чтобы убедиться, что модель учитывает запрошенную схему JSON, необходимо передать схему JSON в качестве аргумента объекту параметров методов prompt()
или promptStreaming()
в качестве значения поля responseConstraint
.
Вот очень простой пример схемы JSON, который гарантирует, что модель выдает либо true
, либо false
при классификации того, относится ли данное сообщение, например, этот пост Mastodon , к гончарному делу.
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
Поддержка предсказуемых результатов
Поддержка структурированного вывода для API Prompt делает ответы LLM намного более предсказуемыми. Вместо того, чтобы извлекать объект из ответа Markdown или другой постобработки, разработчики теперь могут предположить, что ответ модели — это действительный JSON.
Это делает встроенный ИИ на шаг ближе к облачным API, сохраняя все преимущества работы локального ИИ на стороне клиента.
,Опубликовано: 13 мая 2025 г.
Большие языковые модели (LLM) печально известны своими иногда длинными ответами. Даже если вы скажете модели ответить просто «истина» или «ложь», модель может ответить дружелюбным выводом и больше, чем вы просили, например: «Конечно, ответ: истина».
Чтобы решить эту проблему, API Prompt позволяет указать формат вывода JSON ответа модели, передав схему JSON методам LanguageModel.prompt()
и LanguageModel.promptStreaming()
. Поддержка структурированного вывода доступна с версии Chrome 137.
Что такое схема JSON
JSON Schema — это словарь, который обеспечивает согласованность, валидность и совместимость данных JSON в масштабе. Когда дело доходит до обмена данными, JSON Schema выделяется как мощный стандарт для определения структуры и правил данных JSON. Он использует набор ключевых слов для определения свойств ваших данных.
JSON Schema — это отраслевой стандарт для обеспечения структурированного вывода, используемый, в частности, OpenAI API и Gemini API .
Например, вы предлагаете модели назначить максимум три хэштега для поста в онлайн-социальной сети, такой как Mastodon. Идеальный вывод может выглядеть примерно так:
{
"hashtags": [
"#pottery",
"#dyi"
]
}
Соответствующая схема JSON для этой запрошенной формы выходного объекта будет выглядеть следующим образом:
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
Эта схема JSON определяет структуру объекта, который должен содержать поле hashtags
со следующими ограничениями:
-
"type": "object"
: Корневое значение должно быть объектом JSON. -
"properties": { "hashtags": ... }
: Объект может (и в данном случае должен) иметь свойство, называемоеhashtags
. "hashtags":
-
"type": "array"
: Значение должно быть массивом. -
"maxItems": 3
: Массив может содержать не более 3 элементов. -
"items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: Каждый элемент массива должен быть строкой, которая соответствует заданному шаблону регулярного выражения:^#[^\\s#]+$
:-
^#
→ должно начинаться с#
. -
[^\\s#]+
→, за которым следует один или несколько символов, не являющихся пробелом (\s
) или другим#
. -
$
→ должно заканчиваться там.
-
-
"required": ["hashtags"]
: Объект должен содержать свойствоhashtags
."additionalProperties": false
: не допускаются никакие другие свойства, кроме хэштегов.
Полное описание возможностей формата можно найти в документации по основам схемы JSON .
На самом деле, LLM действительно хороши в создании JSON Schema. Опишите ограничения на естественном языке в вашем приглашении и предоставьте допустимый пример JSON-объекта, и вы на полпути. Затем вы можете проверить JSON-объекты на соответствие сгенерированной JSON-схеме с помощью одного из валидаторов JSON-схем , например, онлайн- валидатора Newtonsoft JSON Schema .
Передайте схему JSON в API Prompt
Чтобы убедиться, что модель учитывает запрошенную схему JSON, необходимо передать схему JSON в качестве аргумента объекту параметров методов prompt()
или promptStreaming()
в качестве значения поля responseConstraint
.
Вот очень простой пример схемы JSON, который гарантирует, что модель выдает либо true
, либо false
при классификации того, относится ли данное сообщение, например, этот пост Mastodon , к гончарному делу.
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
Поддержка предсказуемых результатов
Поддержка структурированного вывода для API Prompt делает ответы LLM намного более предсказуемыми. Вместо того, чтобы извлекать объект из ответа Markdown или другой постобработки, разработчики теперь могут предположить, что ответ модели — это действительный JSON.
Это делает встроенный ИИ на шаг ближе к облачным API, сохраняя все преимущества работы локального ИИ на стороне клиента.