ТехникаJSON

Структурированный вывод

JSON, XML, YAML

Проблема: ИИ часто возвращает свободный текст, но вашему коду нужны структурированные данные вроде JSON или конкретных форматов. Как получить консистентный, парсируемый вывод?

Решение: Заполни анкету

Structured Output промптинг указывает точный формат, который ИИ должен использовать в ответе. Это как дать человеку анкету для заполнения вместо просьбы написать письмо в свободной форме. Необходим для Prompt Chaining, где каждый шаг требует парсируемых данных, а few-shot примеры помогают модели выучить точный формат.

Представьте это как заполнение структурированной формы:

  • 1. Определяем схему: Указываем поля: имя, email, отдел
  • 2. Даём пример: Показываем ожидаемую структуру JSON
  • 3. Запрашиваем данные: "Извлеки контактную информацию из этого письма"
  • 4. Получаем структурированный результат: Чистый JSON, готовый к парсингу

Где это используется?

  • API-ответы: Генерация JSON для веб-приложений
  • Извлечение данных: Вытягивание структурированной информации из неструктурированного текста
  • Генерация форм: Создание структурированных записей из описаний
  • Генерация кода: Конкретные сигнатуры функций или структуры классов

Интересный факт: Современные API вроде OpenAI и Anthropic теперь поддерживают "вызов функций", который гарантирует валидный JSON! Это устраняет ошибки парсинга и делает ИИ намного надёжнее для продакшн-использования.

Попробуйте сами!

Используй интерактивный пример ниже, чтобы увидеть, как указание формата вывода приводит к консистентным, машиночитаемым ответам.

Структурированный вывод

Получайте данные в предсказуемом формате для программной обработки

Популярные форматы вывода:

JSON
YAML
XML
Неструктурированный вывод
Отзыв в целом положительный. Клиенту понравилась быстрая доставка (5/5), но упаковка могла быть лучше (3/5). Они рекомендовали бы этот продукт. Плюсы: качество и цена. Минусы: упаковка.
  • Сложно парсить программно
  • Формат может меняться
  • Требует NLP для извлечения
Структурированный вывод (JSON)

Шаблон промпта

Проанализируй следующий текст и верни результат ТОЛЬКО в формате JSON.

Текст: "{ТЕКСТ}"

Используй следующую структуру:
{
  "field1": "тип и описание",
  "field2": "тип и описание"
}

Важно: верни ТОЛЬКО валидный JSON без дополнительного текста.
Примеры API
OpenAI JSON Mode
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..."}
    ]
)
Anthropic Tool Use
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 от LLM?

Используйте встроенный JSON-режим API (response_format у OpenAI, tool_use у Anthropic), предоставьте JSON Schema в промпте, всегда пишите «Верни ТОЛЬКО валидный JSON», и реализуйте клиентскую валидацию с механизмом повторных попыток.

Чем отличается JSON Mode от Function Calling?

JSON Mode гарантирует валидный JSON, но не контролирует конкретную схему. Function Calling (tool_use) позволяет задать точную схему с обязательными полями и типами — вы получаете и валидный JSON, и гарантированную структуру. Используйте Function Calling, когда нужны конкретные поля.

Могут ли LLM надёжно выдавать XML, YAML или CSV?

JSON работает надёжнее всего, так как доминирует в обучающих данных. XML и YAML хорошо работают с чёткими примерами. CSV менее надёжен для сложных данных. Всегда указывайте точный формат, давайте пример и валидируйте вывод программно.

Как обрабатывать ошибки парсинга структурированного вывода?

Реализуйте стратегию повторов: ловите ошибки парсинга JSON, отправляйте сломанный вывод обратно в LLM с запросом «Исправь этот JSON», повторяйте 1-2 раза. Используйте try-catch, валидируйте по схеме и логируйте сбои для мониторинга.

Попробуй сам

Интерактивное демо этой техники

Сравнение техник
Демо режим
Предзаписанные ответы
ЗадачаНачинающийКод

Извлечь контактную информацию из текста и вернуть в формате JSON

Без техники
Без техники
Промпт
Извлеки контактную информацию из текста: "Привет! Меня зовут Алексей Смирнов, я работаю в компании DataFlow. Мой email: a.smirnov@dataflow.ru, телефон +7 (916) 123-45-67. Офис на ул. Ленина, 42."
Ответ

Контактная информация:

  • Имя: Алексей Смирнов
  • Компания: DataFlow
  • Email: a.smirnov@dataflow.ru
  • Телефон: +7 (916) 123-45-67
  • Адрес: ул. Ленина, 42
Токены:65/52
Время:380ms
Качество:
С Структурированный вывод
С техникой
Промпт
Извлеки контактную информацию из текста и верни ТОЛЬКО валидный JSON без пояснений. Схема JSON: ```json { "name": "string", "company": "string", "email": "string", "phone": "string", "address": "string | null" } ``` Текст: "Привет! Меня зовут Алексей Смирнов, я работаю в компании DataFlow. Мой email: a.smirnov@dataflow.ru, телефон +7 (916) 123-45-67. Офис на ул. Ленина, 42." JSON:
Ответ
{
  "name": "Алексей Смирнов",
  "company": "DataFlow",
  "email": "a.smirnov@dataflow.ru",
  "phone": "+7 (916) 123-45-67",
  "address": "ул. Ленина, 42"
}
👁️Указана точная JSON-схема с типами полей
🧠Инструкция «ТОЛЬКО валидный JSON» исключает свободный текст
🔍Результат можно напрямую парсить через JSON.parse()
Структурированный вывод готов к машинной обработке
Токены:115/58
Время:350ms
Качество:
Почему это работает

Без указания схемы модель возвращает список с тире — человеку удобно, но машине не парсить. JSON-схема + инструкция «только JSON» дают машинно-читаемый результат, который можно сразу использовать в коде.

1 / 2

Квиз по уроку

1 из 3

1.Почему структурированный вывод (JSON, XML и т.д.) важен при использовании LLM в приложениях?

Практика

Создайте бесплатный аккаунт для решения челленджей

3 челленджей с AI-проверкой для этого урока

Связанные уроки:RagInformation Extraction

Этот урок — часть структурированного курса по LLM.

Мой путь обучения