ИНСТРУМЕНТ СТРУКТУРИРОВАННОГО ВЫВОДА

Валидатор и автоисправление JSON Schema структурированного вывода LLM

Вставьте JSON Schema функций или response_format, чтобы точно найти причины ошибок HTTP 400 в OpenAI, Claude и Gemini и скопировать нормализованную строгую схему в один клик.

ВыполнениеБез входа · 100% локально в браузереПравила схем проверены 11 ноября 2026 г.
01

Валидатор и автоисправление JSON Schema структурированного вывода

Вставьте JSON Schema инструмента или response_format, чтобы выявить ошибки HTTP 400 и автоматически получить нормализованную строгую схему.

Статус проверкиОбнаружено блокирующих проблем схемы: 6
Автоисправленная строгая JSON Schema
request.example
{
  "type": "object",
  "properties": {
    "invoiceId": {
      "type": "string"
    },
    "currency": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "USD",
        "EUR",
        "GBP"
      ]
    },
    "totalAmount": {
      "type": "number"
    },
    "customer": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "taxId": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "name",
        "taxId"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "invoiceId",
    "currency",
    "totalAmount",
    "customer"
  ],
  "additionalProperties": false
}

Диагностика совместимости

  • $.additionalPropertiesСтрогий режим требует указывать "additionalProperties": false для каждого объекта схемы.
  • $.required (currency, customer)Строгий режим OpenAI требует перечислять все свойства в required; необязательные поля преобразованы в nullable-объединения.
  • $.properties.invoiceId.patternСтрогий структурированный вывод обычно отклоняет ключевые слова ограничения значений; перенесите правило в description и проверяйте его в коде через Zod или Pydantic.
  • $.properties.totalAmount.minimumСтрогий структурированный вывод обычно отклоняет ключевые слова ограничения значений; перенесите правило в description и проверяйте его в коде через Zod или Pydantic.
  • $.properties.customer.additionalPropertiesСтрогий режим требует указывать "additionalProperties": false для каждого объекта схемы.
  • $.properties.customer.required (taxId)Строгий режим OpenAI требует перечислять все свойства в required; необязательные поля преобразованы в nullable-объединения.
02

Инженерная справка и проверки перед запуском

Почему валидные схемы Draft-07 всё равно вызывают HTTP 400 в LLM API

Движки ограниченного декодирования до начала генерации компилируют JSON Schema в контекстно-свободную грамматику или конечный автомат масок токенов. Чтобы компиляция грамматики оставалась быстрой, OpenAI, Anthropic и Google требуют более строгого подмножества JSON Schema, чем по умолчанию генерируют Ajv, Zod или Pydantic.

Например, режим strict: true в OpenAI отклоняет любой объект без additionalProperties: false или с полями вне массива required — необязательные поля нужно задавать как nullable-объединения (["string", "null"]) и включать в required. Напротив, generationConfig.responseSchema в Google Gemini полностью отклоняет ключевое слово additionalProperties.

Правило схемыOpenAI Strict (strict: true)Строгий инструмент / JSON AnthropicGemini responseSchema
Корневой type должен быть "object"ОбязательноОбязательноРекомендуется
"additionalProperties": false в каждом объектеОбязательно (400 при пропуске)Обязательно (400 при пропуске)Запрещено (400 при наличии)
Все свойства перечислены в "required"Обязательно ([type, "null"] для опциональных)Опциональные ключи разрешеныОпциональные ключи разрешены
Регулярные выражения pattern / minLength / formatНе поддерживается в строгой грамматикеОграничено; лучше description + проверка в кодеБольшинство строковых format не поддерживается

Чек-лист продакшена для надёжного структурированного извлечения и схем инструментов

Автоисправление грамматики избавляет от HTTP 400, но точность извлечения также зависит от понятной семантики полей. Давайте полям говорящие имена, избегайте глубокой рекурсии и всегда явно обрабатывайте отказы модели (refusal).

  • Перенесите регулярные выражения, ограничения длины и числовые диапазоны в description и проверяйте их через Zod или Pydantic после парсинга.
  • Проверяйте finish_reason (или stop_reason) на обрезку по max_tokens перед вызовом JSON.parse: обрезанный JSON не распарсится даже в строгом режиме.
  • Обрабатывайте явные поля отказа по безопасности (refusal) до чтения структурированного ответа.

Частые вопросы

Как задать необязательное поле в строгом режиме OpenAI?

Включите имя поля в массив required объекта и измените его тип на nullable-объединение, например ["string", "null"]. Автоисправление выше выполняет это преобразование автоматически.

Почему Gemini отклоняет схему, которая работает в OpenAI?

Строгий режим OpenAI требует additionalProperties: false в каждом объекте, тогда как парсер responseSchema в Gemini отклоняет неизвестные ключи, включая additionalProperties. Переключите выпадающий список выше на Google Gemini, чтобы удалить несовместимые ключи.

Нужно ли всё равно проверять ответ LLM через Zod или Pydantic?

Да. Ограниченное декодирование гарантирует типы JSON и обязательные ключи, а валидатор приложения проверяет бизнес-правила: положительные суммы, корректные даты и права доступа.

Проверьте строгую схему на реальном маршруте модели

Скопируйте нормализованную JSON Schema выше и проверьте её нестриминговым запросом в LLMFly AI.

Получить API-ключ