Structured Output

Структурный вывод — получение от LLM ответа, гарантированно соответствующего заданной схеме типов. Ключевая идея: схема перестаёт быть просьбой в промпте и становится контрактом, который проверяется до того, как данные попадут в код. Высший уровень — когда нарушение схемы физически невозможно при генерации.

Суть

Есть три уровня контроля вывода с разной надёжностью:

Уровень Метод Принцип Надёжность
1 Prompt Engineering просьба «верни JSON» 80–95%
2 Function Calling / Tool Use схема как hint 95–99%
3 Native Structured Output constrained decoding 100%

На уровне 2 схема — рекомендация, модель может её нарушить. На уровне 3 нарушение исключено механически.

Зачем это нужно

Разница между 95% и 100% — это «1 запрос из 20 тихо падает без ошибки». Для высоконагруженного агента даже 2–3% брака недопустимы: некорректный тип уходит дальше по пайплайну и роняет бэкенд тихим сбоем, который обнаруживается с задержкой.

Как работает

  • Constrained decoding через FSM (Finite State Machine). На каждом шаге генерации модель выбирает токен из словаря. FSM накладывает на словарь маску по текущей позиции в схеме: вероятность недопустимого токена обнуляется до выборки. Если схема ждёт число — токен с буквами выбрать нельзя; если поле — Literal["low","medium","high"] — другие значения заблокированы.
  • Схема из типов. Класс BaseModel (PydanticAI) автоматически превращается в JSON Schema и передаётся модели как response_format; типы проверяются при десериализации, ValidationError указывает точный путь к проблеме.
  • Field(description=...) включается в схему — описание поля работает подсказкой при генерации без отдельного промпта; туда же Field(ge=…, le=…), pattern, Literal, Discriminated Union для success/error.
  • Отношение к Tool Calling: function calling даёт ту же схему как hint (уровень 2); structured output поднимает её до жёсткого ограничения (уровень 3).
  • Логически неверные (но типово валидные) данные ловятся уже на следующем слое — Validation Loops.

Связано с

  • PydanticAI — инструмент, реализующий структурный вывод
  • Tool Calling — function calling = уровень 2 (схема как hint)
  • Validation Loops — проверка бизнес-логики поверх типовой валидации
  • Schema Guided Reasoning — структура схемы ещё и направляет рассуждение

Открытые вопросы

  • какие провайдеры/модели поддерживают настоящий constrained decoding, а какие — только JSON mode
  • стоимость constrained decoding по латентности