Режим JSON и структурированный вывод
Как заставить модель возвращать строго валидный JSON
Aijora API поддерживает Режим JSON — режим, в котором модель гарантированно возвращает валидный JSON. Это критически важно для надежной интеграции с backend-системами, где нужен предсказуемый формат ответа.
Что такое Режим JSON?
Обычно языковые модели возвращают текст в свободной форме. Даже если попросить "ответь в JSON", модель может добавить пояснения, форматирование или вернуть невалидный JSON.
Режим JSON решает эту проблему:
- Модель гарантированно возвращает валидный JSON
- Не добавляет лишний текст до или после JSON
- Парсинг ответа всегда успешен
Как включить
Добавьте параметр response_format
в запрос:
{
"model": "gpt-4o-mini",
"messages": [...],
"response_format": { "type": "json_object" }
}
Важно: В системном промпте или сообщении пользователя обязательно укажите, что нужен JSON-ответ. Иначе модель может вернуть ошибку или некорректный результат.
Базовый пример
Запрос
curl https://api.aijora.com/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AIJORA_API_KEY" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "Ты — ассистент, который всегда отвечает в формате JSON."
},
{
"role": "user",
"content": "Назови 3 популярных языка программирования с их годом создания"
}
],
"response_format": { "type": "json_object" }
}'
const response = await fetch('https://api.aijora.com/api/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AIJORA_API_KEY}`
},
body: JSON.stringify({
model: 'gpt-4o-mini',
messages: [
{
role: 'system',
content: 'Ты — ассистент, который всегда отвечает в формате JSON.'
},
{
role: 'user',
content: 'Назови 3 популярных языка программирования с их годом создания'
}
],
response_format: { type: 'json_object' }
})
});
const data = await response.json();
const jsonResponse = JSON.parse(data.choices[0].message.content);
console.log(jsonResponse);
import os
import json
import requests
response = requests.post(
'https://api.aijora.com/api/v1/chat/completions',
headers={
'Authorization': f'Bearer {os.getenv("AIJORA_API_KEY")}'
},
json={
'model': 'gpt-4o-mini',
'messages': [
{
'role': 'system',
'content': 'Ты — ассистент, который всегда отвечает в формате JSON.'
},
{
'role': 'user',
'content': 'Назови 3 популярных языка программирования с их годом создания'
}
],
'response_format': {'type': 'json_object'}
}
)
data = response.json()
json_response = json.loads(data['choices'][0]['message']['content'])
print(json_response)
Ответ модели
{
"languages": [
{
"name": "Python",
"year": 1991
},
{
"name": "JavaScript",
"year": 1995
},
{
"name": "Java",
"year": 1995
}
]
}
Структурированный вывод с JSON Schema
Для более строгого контроля над структурой ответа можно использовать JSON Schema (поддерживается не всеми моделями).
Пример с фиксированной схемой
const response = await fetch('https://api.aijora.com/api/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AIJORA_API_KEY}`
},
body: JSON.stringify({
model: 'gpt-4o-mini',
messages: [
{
role: 'user',
content: 'Извлеки информацию о пользователе: Иван, 25 лет, живет в Москве, работает разработчиком'
}
],
response_format: {
type: 'json_schema',
json_schema: {
name: 'user_info',
strict: true,
schema: {
type: 'object',
properties: {
name: { type: 'string' },
age: { type: 'integer' },
city: { type: 'string' },
occupation: { type: 'string' }
},
required: ['name', 'age', 'city', 'occupation'],
additionalProperties: false
}
}
}
})
});
Ответ будет строго соответствовать схеме:
{
"name": "Иван",
"age": 25,
"city": "Москва",
"occupation": "разработчик"
}
Практические примеры
1. Извлечение данных из текста
Use case: Парсинг резюме, контактов, заказов
async function extractContactInfo(text) {
const response = await fetch('https://api.aijora.com/api/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AIJORA_API_KEY}`
},
body: JSON.stringify({
model: 'gpt-4o-mini',
messages: [
{
role: 'system',
content: 'Извлеки контактную информацию из текста. Верни JSON с полями: name, email, phone, company.'
},
{
role: 'user',
content: text
}
],
response_format: { type: 'json_object' }
})
});
const data = await response.json();
return JSON.parse(data.choices[0].message.content);
}
// Использование
const contact = await extractContactInfo(
'Меня зовут Алексей Петров, работаю в ООО "ТехноСервис". ' +
'Email: a.petrov@techserv.ru, телефон +7 (999) 123-45-67'
);
console.log(contact);
// {
// "name": "Алексей Петров",
// "email": "a.petrov@techserv.ru",
// "phone": "+7 (999) 123-45-67",
// "company": "ООО \"ТехноСервис\""
// }
2. Классификация и тегирование
Use case: Модерация контента, категоризация товаров
import os
import json
import requests
def classify_text(text):
response = requests.post(
'https://api.aijora.com/api/v1/chat/completions',
headers={
'Authorization': f'Bearer {os.getenv("AIJORA_API_KEY")}'
},
json={
'model': 'gpt-4o-mini',
'messages': [
{
'role': 'system',
'content': 'Классифицируй текст. Верни JSON: {"category": "...", "sentiment": "positive/negative/neutral", "tags": [...], "confidence": 0.0-1.0}'
},
{
'role': 'user',
'content': text
}
],
'response_format': {'type': 'json_object'}
}
)
data = response.json()
return json.loads(data['choices'][0]['message']['content'])
# Использование
result = classify_text("Отличный товар! Быстрая доставка, всем рекомендую!")
print(result)
# {
# "category": "отзыв о товаре",
# "sentiment": "positive",
# "tags": ["доставка", "качество", "рекомендация"],
# "confidence": 0.95
# }
3. Генерация структурированных данных для БД
Use case: Создание записей в базе данных
interface Product {
name: string;
description: string;
price: number;
category: string;
tags: string[];
}
async function generateProductData(prompt: string): Promise<Product> {
const response = await fetch('https://api.aijora.com/api/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AIJORA_API_KEY}`
},
body: JSON.stringify({
model: 'gpt-4o-mini',
messages: [
{
role: 'system',
content: 'Создай структуру товара для базы данных. JSON: name, description, price (число), category, tags (массив строк).'
},
{
role: 'user',
content: prompt
}
],
response_format: { type: 'json_object' },
temperature: 0.7
})
});
const data = await response.json();
return JSON.parse(data.choices[0].message.content);
}
// Использование
const product = await generateProductData(
'Беспроводные наушники с шумоподавлением, цена около 15000 рублей'
);
// Сохранение в БД
await db.products.insert(product);