Ответ в формате JSON

Режимы, в которых модель возвращает JSON-объект или ответ по схеме, разбор результата и действия, если режим не сработал.

Обновлено: 2 мин чтения

Выберите режим

Режим задаёт поле response_format с обязательным type.

ЗначениеЧто делает
textОбычный ответ, это значение по умолчанию
json_objectПросит модель вернуть один JSON-объект. Устройство объекта описывается в тексте сообщения
json_schemaПросит вернуть ответ, который подходит под вашу JSON Schema. Схема лежит в json_schema.schema, имя в json_schema.name, строгий режим включает json_schema.strict

Запросите ответ по схеме

  1. Опишите нужный объект схемой. Для строгого режима перечислите все поля в required и запретите лишние через additionalProperties: false.
  2. Передайте схему в response_format и сформулируйте задачу в сообщении.
  3. Разберите message.content как JSON. Ответ всё равно приходит строкой.
import json
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://epicai.ru/v1",
    api_key=os.environ["EPICAI_API_KEY"],
)

reply = client.chat.completions.create(
    model="deepseek/deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Назови страну и столицу для города Берлин."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "capital",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "country": {"type": "string"},
                    "capital": {"type": "string"},
                },
                "required": ["country", "capital"],
                "additionalProperties": False,
            },
        },
    },
    max_tokens=300,
)
data = json.loads(reply.choices[0].message.content)
print(data["capital"])

Режим json_object включается так же, только вместо схемы достаточно {"type": "json_object"}. В тексте сообщения при этом обязательно упомяните слово JSON и опишите ожидаемые поля. Так требует и OpenAI, поэтому без слова запрос отклоняется сразу с ошибкой 400 invalid_parameter и полем response_format в param, и ничего не списывается.

Проверьте результат

Разбор ответа стоит защитить. Если ответ оборвался по лимиту (finish_reason равен length), JSON получится неполным и не разберётся, поэтому оставляйте запас в max_tokens. epicai передаёт схему вендору как есть и ответ не проверяет, так что сверяйте поля своим валидатором.

У моделей Claude работает только json_object: epicai добавляет к запросу системную инструкцию вернуть единственный JSON-объект. Схема из json_schema до них не доходит, поэтому для Claude опишите нужные поля в тексте сообщения и проверяйте результат у себя.

Ошибки запроса

Режим json_schema без json_schema.schema даёт 400 invalid_parameter с указанием поля response_format. Тот же код приходит, если у response_format нет type или значение type другое, чем text, json_object и json_schema.

Не нашли ответ?

Посмотрите частые вопросы или напишите в поддержку.

Войти или создать аккаунт

20 000 токенов в подарок новым пользователям. Без карты и без VPN.

или через сервис

Продолжая, вы получаете сервисные письма.

Для защиты от роботов используется Yandex SmartCaptcha. Условия обработки данных.