Получить доступ

Как получить от LLM ответ в строгом формате, например JSON?

MiddleПромпты и структурированный выводAPI языковых моделей
Ещё спрашивают так:
  • Что такое structured output?
  • Как надёжно извлечь данные из текста с помощью LLM?
  • Что делать, если модель вернула невалидный JSON?
Коротко

Используйте режим структурированного вывода по JSON-схеме, если API его поддерживает, и всегда валидируйте результат в коде.

  • Без такого режима: схема и пример в промпте, низкая температура, разбор с повтором при ошибке
  • Схема делает поля и типы обязательными; валидатор (pydantic) ловит остальное

А ещё Схема гарантирует форму, но не правильность значений — их тоже проверяют

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Когда ответ модели читает программа, свободный текст не подходит. Способы, от надёжного к простому:

  1. Структурированный вывод по схеме. Многие API позволяют передать JSON-схему, и модель гарантированно возвращает валидный по ней JSON (декодирование ограничивается допустимыми токенами).
  2. Вызов функций (tool calling). Описываем «функцию» с параметрами — модель возвращает аргументы в виде JSON.
  3. Только промпт. Схема и пример в промпте, просьба вернуть только JSON без пояснений, низкая температура. Ответ разбираем и при ошибке повторяем запрос, добавив текст ошибки.

Что ещё важно:

  • валидация в коде — типы, обязательные поля, допустимые значения (например, pydantic); схема не гарантирует, что значения верны;
  • поле для отсутствия — разрешить null или "unknown", иначе модель выдумает значение, лишь бы заполнить обязательное поле;
  • плоские и простые схемы работают надёжнее глубоко вложенных;
  • перечисления (enum) вместо свободного текста для категорий.

Пример

from pydantic import BaseModel

class Lead(BaseModel):
    name: str | None
    company: str | None
    budget_rub: int | None
    intent: str  # "buy" | "research" | "unknown"

# raw — JSON от модели, полученный в режиме structured output по Lead.model_json_schema()
lead = Lead.model_validate_json(raw)   # ошибка формата → повторный запрос

Что хотят услышать

  • Механизмы: структурированный вывод по схеме, tool calling, промпт.
  • Обязательная валидация в коде и обработка ошибок.
  • Разрешённое «нет данных» против выдумывания.

Частые ошибки

  • Разбирать ответ регулярными выражениями без валидации.
  • Делать все поля обязательными — модель заполнит их выдумкой.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем