JSON Schema по примеру

Вставьте ответ API или пример данных, и страница составит по нему JSON Schema 2020-12. Такую схему можно отдать языковой модели для structured outputs или в описание инструмента, а можно проверять ею данные в своём коде. Вопросы и ответы.

Часто задаваемые вопросы

Чем различаются OpenAI, Anthropic и проверка данных?
Для OpenAI все свойства обязательны и у каждого объекта стоит additionalProperties: false. Свойство, которого нет в части примеров, может быть null. Anthropic тоже требует additionalProperties: false, но на весь запрос ограничивает число необязательных свойств и свойств с выбором типа, включая ["string", "null"]. Поэтому для него обязательны только свойства из всех примеров, а null разрешён там, где встретился. Если в данных много необязательных полей, одна схема обоим API не подойдёт. Схема для проверки данных обычная: обязательны свойства из всех примеров, лишние разрешены.
Как дать несколько примеров?
Вставьте JSON Lines — по объекту в строке, и схема учтёт их все. Для OpenAI и Anthropic корень схемы должен быть объектом, поэтому массив объектов тоже считается набором примеров одного объекта. Для проверки данных массив остаётся массивом, и схема его элементов строится по всем объектам сразу. Чем разнообразнее примеры, тем точнее обязательные поля и типы.
Можно вставить объект из JavaScript?
Да. Схеме нужна только форма данных, поэтому подойдут имена свойств без кавычек, строки в одинарных кавычках, комментарии и запятые после последнего элемента. undefined считается null, а NaN и Infinity — числами.
Какие форматы строк распознаются?
date-time, date, email и uri, если им соответствуют все значения поля в примерах, а даты существуют в календаре. Для OpenAI uri не ставится: его нет среди поддерживаемых форматов. Числа без дробной части получают тип integer, с дробной — number.
Что ещё стоит дописать вручную?
Описания полей в description: модель отвечает точнее, когда понимает смысл поля. Перечисления в enum, если значений немного. Пример не говорит, какие значения допустимы, поэтому схема описывает только форму данных.
Почему в схеме для OpenAI и Anthropic нет $schema?
Эту схему передают в API внутри запроса, и версию там задаёт сам API. В схеме для проверки данных $schema указывает на JSON Schema 2020-12, как ожидают валидаторы вроде Ajv.
Данные куда-нибудь уходят?
Нет. Схема строится в браузере, пример никуда не отправляется и не записывается в адрес страницы. Если уйти по ссылке и вернуться кнопкой «Назад», браузер может показать страницу вместе с примером, а после обновления поле будет пустым.