Структурированный вывод
JSON, XML, YAML
Проблема: ИИ часто возвращает свободный текст, но вашему коду нужны структурированные данные вроде JSON или конкретных форматов. Как получить консистентный, парсируемый вывод?
Решение: Заполни анкету
Structured Output промптинг указывает точный формат, который ИИ должен использовать в ответе. Это как дать человеку анкету для заполнения вместо просьбы написать письмо в свободной форме. Необходим для Prompt Chaining, где каждый шаг требует парсируемых данных, а few-shot примеры помогают модели выучить точный формат.
Представьте это как заполнение структурированной формы:
- 1. Определяем схему: Указываем поля: имя, email, отдел
- 2. Даём пример: Показываем ожидаемую структуру JSON
- 3. Запрашиваем данные: "Извлеки контактную информацию из этого письма"
- 4. Получаем структурированный результат: Чистый JSON, готовый к парсингу
Где это используется?
- API-ответы: Генерация JSON для веб-приложений
- Извлечение данных: Вытягивание структурированной информации из неструктурированного текста
- Генерация форм: Создание структурированных записей из описаний
- Генерация кода: Конкретные сигнатуры функций или структуры классов
Интересный факт: Современные API вроде OpenAI и Anthropic теперь поддерживают "вызов функций", который гарантирует валидный JSON! Это устраняет ошибки парсинга и делает ИИ намного надёжнее для продакшн-использования.
Попробуйте сами!
Используй интерактивный пример ниже, чтобы увидеть, как указание формата вывода приводит к консистентным, машиночитаемым ответам.
Структурированный вывод
Получайте данные в предсказуемом формате для программной обработки
Популярные форматы вывода:
- • Сложно парсить программно
- • Формат может меняться
- • Требует NLP для извлечения
Шаблон промпта
Проанализируй следующий текст и верни результат ТОЛЬКО в формате JSON.
Текст: "{ТЕКСТ}"
Используй следующую структуру:
{
"field1": "тип и описание",
"field2": "тип и описание"
}
Важно: верни ТОЛЬКО валидный JSON без дополнительного текста.response = client.chat.completions.create(
model="gpt-4",
response_format={ "type": "json_object" },
messages=[
{"role": "system", "content": "Return JSON only"},
{"role": "user", "content": "Analyze this review..."}
]
)response = client.messages.create(
model="claude-3-opus",
tools=[{
"name": "extract_data",
"input_schema": {
"type": "object",
"properties": {
"sentiment": {"enum": ["positive", "negative"]},
"score": {"type": "number"}
}
}
}],
tool_choice={"type": "tool", "name": "extract_data"}
)- • Всегда указывайте "верни ТОЛЬКО JSON без дополнительного текста"
- • Используйте JSON Schema для валидации на стороне клиента
- • Предоставляйте пример ожидаемой структуры в промпте
- • Используйте response_format или tool_use для гарантированного JSON
- • Обрабатывайте ошибки парсинга — модель может не следовать инструкциям
| Метод | Надёжность | Гибкость | Сложность |
|---|---|---|---|
| Инструкции в промпте | ⭐⭐ | ⭐⭐⭐ | Низкая |
| JSON Mode | ⭐⭐⭐ | ⭐⭐ | Низкая |
| Function Calling | ⭐⭐⭐ | ⭐⭐⭐ | Средняя |
| Structured Outputs API | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Средняя |
Попробуй сам
Интерактивное демо этой техники
Извлечь контактную информацию из текста и вернуть в формате JSON
Контактная информация:
- Имя: Алексей Смирнов
- Компания: DataFlow
- Email: a.smirnov@dataflow.ru
- Телефон: +7 (916) 123-45-67
- Адрес: ул. Ленина, 42
{
"name": "Алексей Смирнов",
"company": "DataFlow",
"email": "a.smirnov@dataflow.ru",
"phone": "+7 (916) 123-45-67",
"address": "ул. Ленина, 42"
}
Без указания схемы модель возвращает список с тире — человеку удобно, но машине не парсить. JSON-схема + инструкция «только JSON» дают машинно-читаемый результат, который можно сразу использовать в коде.
Создайте бесплатный аккаунт для решения челленджей
3 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения