Структурированный вывод
Структурированный вывод позволяет модели возвращать данные в указанном вами формате JSON, что подходит для извлечения данных, классификации, заполнения форм и других задач.
JSON Mode
Самый простой способ структурированного вывода, принудительно возвращающий валидный JSON:
Python
json_mode.py
from openai import OpenAI
client = OpenAI(
base_url="https://api.ofox.ai/v1",
api_key="<Ваш OFOXAI_API_KEY>"
)
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": "Вы — ассистент по извлечению данных. Возвращайте результат в формате JSON."},
{"role": "user", "content": "Извлеките имя, компанию и должность из следующего текста: Иван Петров — старший инженер в Яндексе"}
],
response_format={"type": "json_object"}
)
import json
result = json.loads(response.choices[0].message.content)
print(result)
# {"name": "Иван Петров", "company": "Яндекс", "title": "старший инженер"}При использовании JSON Mode системный промпт обязательно должен содержать ключевое слово “JSON”, иначе некоторые модели могут проигнорировать требования к формату.
Ограничения JSON Schema
Более точный контроль структуры вывода, гарантирующий соответствие имен и типов полей ожидаемым:
json_schema.py
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "user", "content": "Проанализируйте тональность этого отзыва: Этот продукт великолепен, очень удобен в использовании!"}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "sentiment_analysis",
"schema": {
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"],
"description": "Эмоциональная окраска"
},
"confidence": {
"type": "number",
"description": "Уверенность 0-1"
},
"keywords": {
"type": "array",
"items": {"type": "string"},
"description": "Ключевые эмоциональные слова"
}
},
"required": ["sentiment", "confidence", "keywords"],
"additionalProperties": False
}
}
}
)Вывод:
{
"sentiment": "positive",
"confidence": 0.95,
"keywords": ["великолепен", "очень удобен"]
}Практические сценарии
Извлечение данных
# Извлечение структурированных данных из неструктурированного текста
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{
"role": "user",
"content": """Извлеките информацию о заказе:
Клиент Алексей Смирнов 15 января 2025 года оформил заказ на 3 MacBook Pro,
цена за единицу 189 990 руб., адрес доставки: г. Москва, ул. Примерная, д. 123"""
}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "order_info",
"schema": {
"type": "object",
"properties": {
"customer": {"type": "string"},
"date": {"type": "string"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"quantity": {"type": "integer"},
"unit_price": {"type": "number"}
}
}
},
"address": {"type": "string"}
},
"required": ["customer", "date", "items", "address"]
}
}
}
)Классификация и разметка
# Многоклассовая классификация
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{
"role": "user",
"content": "Определите тему этой статьи: Применение технологий ИИ в сфере здравоохранения становится всё более широким..."
}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "classification",
"schema": {
"type": "object",
"properties": {
"primary_category": {"type": "string"},
"secondary_categories": {
"type": "array",
"items": {"type": "string"}
},
"tags": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["primary_category"]
}
}
}
)Поддерживаемые модели
| Модель | JSON Mode | JSON Schema |
|---|---|---|
openai/gpt-4o | ✅ | ✅ |
openai/gpt-4o-mini | ✅ | ✅ |
anthropic/claude-sonnet-4.5 | ✅ | — |
google/gemini-3-flash-preview | ✅ | ✅ |
Для моделей, не поддерживающих JSON Schema, аналогичного результата можно добиться, подробно описав ожидаемый формат JSON в системном промпте.
Last updated on