- Чем различаются 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.
- Данные куда-нибудь уходят?
- Нет. Схема строится в браузере, пример никуда не отправляется и не записывается в адрес страницы. Если уйти по ссылке и вернуться кнопкой «Назад», браузер может показать страницу вместе с примером, а после обновления поле будет пустым.