ДокументацияСтруктурированные ответы
Структурированные ответы
Structured Outputs заставляет модель возвращать строго валидный JSON по вашей схеме. Это удобно для парсинга ответов в коде: извлечение данных, классификация, формы, интеграции.
Zenvy передаёт параметр response_format в upstream-провайдер без изменений — формат полностью совместим с OpenAI.
JSON mode
Простой режим: модель отвечает валидным JSON, структуру задаёте промптом.
{
"model": "gpt-4o",
"messages": [
{ "role": "user", "content": "Извлеки имя и возраст: «Меня зовут Анна, мне 27 лет». Ответь JSON с полями name и age." }
],
"response_format": { "type": "json_object" }
}JSON Schema
Строгий режим: модель гарантированно следует JSON-схеме.
{
"model": "gpt-4o",
"messages": [
{ "role": "user", "content": "Извлеки данные: «Меня зовут Анна, мне 27 лет»" }
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "person",
"strict": true,
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "age"],
"additionalProperties": false
}
}
}
}Пример с SDK
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ZENVY_API_KEY,
baseURL: "https://api.zenvy.su/v1"
});
const completion = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "user", content: "Извлеки данные: «Меня зовут Анна, мне 27 лет»" }
],
response_format: {
type: "json_schema",
json_schema: {
name: "person",
strict: true,
schema: {
type: "object",
properties: {
name: { type: "string" },
age: { type: "integer" }
},
required: ["name", "age"],
additionalProperties: false
}
}
}
});
const person = JSON.parse(completion.choices[0].message.content);
console.log(person.name, person.age);Пример ответа
{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\"name\": \"Анна\", \"age\": 27}"
},
"finish_reason": "stop"
}
]
}Structured Outputs работает у моделей OpenAI (GPT-4o и новее), Gemini и ряда других. Если модель не поддерживает строгий режим, используйте json_object + описание структуры в промпте.
Даже в strict-режиме проверяйте finish_reason: при обрыве по length JSON может быть неполным. Указывайте достаточный max_tokens.
Подробнее о формате запросов: Генерация текста.