Суть
Есть три уровня контроля вывода с разной надёжностью:
| Уровень | Метод | Принцип | Надёжность |
|---|---|---|---|
| 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 по латентности