JSON mode просит вернуть валидный JSON. Structured Outputs дополнительно задаёт точную JSON Schema. Для программной обработки предпочитайте схему.
Chat Completions#
Используется response_format:
{
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "answer",
"strict": true,
"schema": {
"type": "object",
"properties": {
"summary": {"type": "string"}
},
"required": ["summary"],
"additionalProperties": false
}
}
}
}Responses#
Та же идея задаётся через text.format, но структура отличается:
{
"text": {
"format": {
"type": "json_schema",
"name": "answer",
"strict": true,
"schema": {
"type": "object",
"properties": {
"summary": {"type": "string"}
},
"required": ["summary"],
"additionalProperties": false
}
}
}
}json_object#
json_object не задаёт структуру полей. Модель может вернуть валидный JSON, который не соответствует ожиданиям приложения. Этот режим также хуже переносится между API-диалектами.
Обязательная проверка#
Даже при strict mode:
проверяйте HTTP-статус и статус завершения;
обрабатывайте refusal;
проверяйте, не закончился ли token limit;
валидируйте результат своей JSON Schema;
не исполняйте поля ответа как код.
При смене модели прогоните тесты на вложенных объектах, enum, optional fields, Unicode, длинных строках и отказах.