Поддержка структурированного вывода для Prompt 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. Опишите ограничения на естественном языке в приглашении и предоставьте действительный пример объекта JSON, и вы уже на полпути. Затем вы можете проверить объекты JSON на соответствие сгенерированной схеме JSON с помощью одного из валидаторов схемы JSON , например, онлайн -валидатора схемы JSON Newtonsoft .

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

Передайте схему JSON в Prompt API

Чтобы убедиться, что модель соответствует запрошенной схеме JSON, вам необходимо передать схему JSON в качестве аргумента в объект параметров метода prompt() или promptStreaming() в качестве значения поля responseConstraint .

Вот очень простой пример схемы JSON, который гарантирует, что модель ответит либо true , либо false при классификации того, относится ли данное сообщение, подобное этому сообщению Мастодонта, о керамике.

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, предоставляя все преимущества локального ИИ на стороне клиента.