Ответ в формате JSON
Режимы, в которых модель возвращает JSON-объект или ответ по схеме, разбор результата и действия, если режим не сработал.
Выберите режим
Режим задаёт поле response_format с обязательным type.
| Значение | Что делает |
|---|---|
text | Обычный ответ, это значение по умолчанию |
json_object | Просит модель вернуть один JSON-объект. Устройство объекта описывается в тексте сообщения |
json_schema | Просит вернуть ответ, который подходит под вашу JSON Schema. Схема лежит в json_schema.schema, имя в json_schema.name, строгий режим включает json_schema.strict |
Запросите ответ по схеме
- Опишите нужный объект схемой. Для строгого режима перечислите все поля в
requiredи запретите лишние черезadditionalProperties: false. - Передайте схему в
response_formatи сформулируйте задачу в сообщении. - Разберите
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.
Не нашли ответ?
Посмотрите частые вопросы или напишите в поддержку.