Зачем приложениям на базе ИИ нужен структурированный вывод?
Приложениям с ИИ нужен структурированный вывод, потому что программа не может надёжно обработать обычный связный текст: ей каждый раз нужны одни и те же поля с одинаковыми названиями и типами. Одно лишнее предложение или пропущенное поле может нарушить следующий этап работы вашего приложения.
Представьте вымышленный логистический стартап Parcelwise со штатом 12 человек. Его разработчица Сана создаёт инструмент, который читает письма клиентов и заполняет форму изменения доставки: номер заказа, желаемая дата, новый адрес и запрашивает ли клиент возврат денег. Типичное письмо выглядит так: 'Здравствуйте, заказ PW-88213, в чт меня не будет, можете привезти в сб? Или оставьте у соседей в № 14. Если не получится, просто отмените и верните деньги, пжл.' В первой версии она просит модель 'ответить в JSON'. Большинство ответов удаётся обработать, но некоторые начинаются с 'Конечно, вот JSON', в некоторых поле называется 'date' вместо 'requested_date', а в одном дата указана как 'суббота'.
Что такое схема JSON и чем она полезна?
Схема JSON — это формальное описание ожидаемых данных: какие поля существуют, какие из них обязательны, каков тип каждого поля и какие значения допустимы. Передавая модели схему, вы превращаете просьбу «пожалуйста, ответьте в JSON» в контракт, соблюдение которого может проверить ваш код.
Для Саны схема задаёт следующее: order_reference — обязательная строка; requested_date — обязательная строка в формате даты или null, если дата не указана; new_address — строка или null; refund_requested — обязательное логическое значение; никакие другие поля не допускаются. Последнее правило не даёт модели добавлять поля с комментариями.
Как API моделей обеспечивают структурированный вывод?
Программные интерфейсы основных моделей позволяют передавать схему JSON вместе с запросом, а вывод модели ограничивается так, чтобы соответствовать этой схеме.
OpenAI
При включённом строгом режиме функция структурированных ответов OpenAI ограничивает ответы заданной схемой JSON. В документации она отличается от более раннего режима JSON, который обеспечивает только корректность JSON, но не соответствие вашей схеме. Рекомендуется использовать структурированные ответы, когда эта функция доступна.
Anthropic
API Claude позволяет получать результаты в формате JSON, соответствующие заданной вами схеме, а также включать строгую проверку в определениях инструментов, чтобы входные данные каждого инструмента проверялись на соответствие его схеме. В документации указано, какие возможности схем поддерживаются, а какие приводят к ошибке.
API Gemini принимает схему JSON для ответов и поддерживает определённое подмножество ключевых слов схемы. В документации сказано: хотя результат представляет собой синтаксически корректный JSON, значения всё равно следует проверять в вашем приложении.
Зачем всё равно нужны проверка и повторные попытки?
Проверка всё равно нужна, потому что схема задаёт структуру данных, но не гарантирует правильность значений. Даже безупречно оформленный ответ может содержать неверную дату, выдуманный номер заказа или отметку о возврате средств, которого клиент не запрашивал.
Проводите проверку на двух уровнях. Сначала проверьте структуру с помощью библиотеки для работы со схемами, например Pydantic в Python или Zod в JavaScript: примеры с ними есть в документации OpenAI, Anthropic и Google. Затем проверьте бизнес-правила: соответствует ли номер заказа шаблону и существует ли он в системе, относится ли дата к будущему и является ли днём доставки, входит ли адрес в зону доставки? Также предусмотрите случаи, описанные в документации поставщиков: отказ, который может не соответствовать вашей схеме, и ответ, оборванный из-за ограничения на максимальное число токенов, в результате чего JSON остаётся незавершённым.
Повторяйте попытки осторожно. Если проверка не пройдена, отправьте один повторный запрос с указанием конкретной ошибки, например: 'requested_date должно быть датой; в письме указана суббота, а дата заказа — 14 октября'. Ограничьтесь одной или двумя повторными попытками, затем передайте письмо человеку.
Как выглядят ненадёжный и надёжный структурированные ответы?
Слабый вариант: в запросе сказано 'Извлеки данные и ответь в формате JSON.' Приложение считывает всё, что приходит в ответ. Для письма выше оно получает поля order и date, значение даты 'суббота' и значение true для возврата средств, потому что модель восприняла 'если нет, просто отмените' как однозначную просьбу. Форма заполняется неверно, и клиент получает возврат средств, которого не хотел.
Надёжный вариант: запрос включает схему Саны со строгим режимом, а инструкция объясняет каждое поле, в том числе: 'refund_requested имеет значение true, только если клиент просит возврат без каких-либо условий'. Модель возвращает order_reference со значением PW-88213, requested_date с датой ближайшей субботы, new_address со значением null, refund_requested со значением false и conditional_request — поле, которое Сана добавила в схему именно для такого случая, — со значением 'возврат, если доставка в субботу или соседу невозможна'. Проверка подтверждает, что заказ существует и доставка по субботам выполняется. Поскольку письмо содержит условную просьбу, правила направляют его человеку для окончательного решения.
Какие ошибки часто допускают при работе со структурированным выводом?
Самая распространённая ошибка — считать корректный JSON достоверными данными. Другие ошибки: полагаться только на инструкции в запросе, когда API позволяет принудительно соблюдать схему; использовать расплывчатые имена полей без описаний; требовать значение, когда честный ответ — null; игнорировать отказы и обрезанные ответы; и повторять запрос, не объясняя модели, что было не так.
Какое место структурированный вывод занимает в каталоге Tosheo.ai?
«Структурированный вывод» — урок с программированием в курсе по созданию приложений с ИИ, в категории «Создание приложений с ИИ». Полная практическая версия с кодом, где вы задаёте схему, вызываете API, проверяете ответы и добавляете повторную попытку, доступна после регистрации в программе обучения с программированием. На каждом шаге вы получаете обратную связь по критериям оценки.