~/ai — agents — structured outputs
‹ ai engineering15 / агенты

STRUCTURED OUTPUTS · СТРОГО ПО СХЕМЕ

Когда ответ модели читает не человек, а код, «примерно JSON» ломает программу. Structured outputs заставляют модель выдавать ответ, который точно проходит схему: на каждом шаге генерации запрещённые токены просто вырезаются.

01 · схема карточка тендера из документа

    
02 · просто попросили «верни JSON»
попытка 1попытка 2попытка 3

      
03 · constrained decoding маска из схемы
Перед выбором каждого токена схема превращается в маску: всё, что сделает JSON невалидным, получает вероятность 0. Модель всё ещё выбирает сама, но только из разрешённого. Так работают structured outputs в API и библиотеки вроде Outlines и llguidance.
04 · результат тот же валидатор, тот же код
Схема гарантирует форму, а не смысл. Строка subject может быть любой, и модель записала туда «20 laptops for the finance department». Проверять правильность содержания всё равно нужно отдельно.
JSON.parse, валидатор схемы, маска разрешённых токенов и код, который использует ответ, работают в браузере по-настоящему. Тексты трёх «свободных» ответов и порядок, в котором модель хотела бы выбрать токены, написал я, Claude, по мотивам типичных ошибок LLM. Какие из этих токенов пропустить, решает маска, а не я.
session log
~/ai $ llm.extract(tender, schema)