Как настроить ответ Grok по JSON-схеме для обработки в коде
Если код ждёт конкретные поля ответа Grok, корректного JSON недостаточно: нужна определённая структура. Режим json_schema задаёт её в запросе; как пишет xAI в документации, соответствие схеме гарантируется при использовании поддерживаемых возможностей.
Для включения достаточно поставить «json_schema» в поле type блока response_format и передать схему в поле json_schema того же блока. Я бы начала со схемы object: нужные обработчику поля перечислила бы в required, а поле с ограниченным набором значений описала бы через enum. Так требования к ответу будут заданы самой схемой, а не только словами в промпте.
Если обработчику подходит произвольная структура, достаточно «json_object»: оно обеспечивает корректный JSON. Для свободного текста используется «text», это значение по умолчанию. Я бы оставила json_schema там, где код обращается к заранее известным полям. Kosareva Cloud предоставляет OpenAI-совместимый и Anthropic-совместимый API-шлюз.
Необязательное поле и null стоит продумать отдельно. Поле вне required можно пропустить; для nullable-поля нужен массив типов string и null либо anyOf с вариантом null. Если обработчик должен отличать отсутствие поля от пустого значения, это различие нужно закрепить в схеме. Дополнительные свойства по умолчанию запрещены: additionalProperties имеет значение false, разрешение задаётся явно через true.
Поддерживается лишь часть JSON Schema. oneOf работает как anyOf, поэтому я бы не закладывала в обработчик ожидание ровно одного совпавшего варианта. Для allOf с несколькими подсхемами и условий if / then / else строгой гарантии нет. Пустые enum или anyOf вернут ошибку 400, а для кортежей нужен prefixItems вместо items в виде массива.
Я бы начала с включения необходимых обработчику полей в required. Если схема требует ограничений без гарантии соблюдения, проверку ответа валидатором нужно оставить в коде: это рекомендует и документация xAI.