Поддержка структурированного вывода для Prompt API

Опубликовано: 13 мая 2025 г.

Большие языковые модели (LLM) печально известны своими порой длинными ответами. Даже если вы укажете модели отвечать только «истина» или «ложь», она может ответить дружелюбно и более подробно, чем вы запросили, например: «Конечно, ответ: истина».

Для решения этой проблемы API Prompt позволяет указать формат вывода JSON для ответа модели, передавая JSON-схему методам LanguageModel.prompt() и LanguageModel.promptStreaming() . Поддержка структурированного вывода доступна начиная с версии Chrome 137.

Что такое схема JSON

JSON Schema — это словарь, обеспечивающий согласованность, валидность и совместимость данных JSON в любом масштабе. В сфере обмена данными JSON Schema выступает в качестве мощного стандарта для определения структуры и правил работы с данными JSON. Он использует набор ключевых слов для определения свойств данных.

JSON Schema — это отраслевой стандарт для обеспечения структурированного вывода, используемый, в частности, API OpenAI и API Gemini .

Например, вы предлагаете модели назначить не более трёх хэштегов публикации в социальной сети, например, 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 Schema .

На самом деле, LLM действительно хороши в создании JSON-схем. Опишите ограничения на естественном языке в задании и предоставьте пример корректного JSON-объекта, и вы уже на полпути к успеху. Затем вы можете проверить JSON-объекты на соответствие сгенерированной JSON-схеме с помощью одного из валидаторов JSON-схем , например, онлайн- валидатора Newtonsoft JSON Schema Validator .

Успешная проверка JSON-объекта на соответствие JSON-схеме в JSON-валидаторе.

Передайте схему 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

Поддержка предсказуемых результатов

Поддержка структурированного вывода для Prompt API делает ответы LLM гораздо более предсказуемыми. Вместо того, чтобы извлекать объект из ответа Markdown или выполнять другую постобработку, разработчики теперь могут предполагать, что ответ модели представляет собой корректный JSON.

Это делает встроенный ИИ на шаг ближе к облачным API, сохраняя все преимущества работы локального ИИ на стороне клиента.