OpenAI представила Structured Outputs для API
6 августа 2024 года OpenAI объявила о запуске новой функции в своем API – Structured Outputs. Эта функция гарантирует, что выходные данные, генерируемые моделями, будут точно соответствовать JSON схемам, предоставленным разработчиками.
Прошлой осенью на DevDay OpenAI представила JSON mode, который помог улучшить надежность генерации валидных JSON-данных, но не обеспечивал полного соответствия схемам. Новая функция Structured Outputs решает эту проблему, позволяя моделям строго следовать заданным схемам.
Эта возможность особенно полезна для разработчиков, использующих API OpenAI для создания ассистентов, обработки данных и построения многоэтапных агентских рабочих процессов. Ранее разработчикам приходилось использовать сторонние инструменты и повторные запросы, чтобы добиться соответствия вывода заданным форматам. С внедрением Structured Outputs эти сложности уходят в прошлое.
В тестах OpenAI новая модель gpt-4o-2024-08-06 с включенной функцией Structured Outputs показала 100% точность в следовании сложным JSON схемам, в то время как предыдущая модель gpt-4-0613 достигала менее 40%.
Благодаря структурированным выводам gpt-4o-2024-08-06 достигается 100% надежность наших оценок, идеально соответствующих схемам вывода.
Как использовать Structured Outputs
- Функциональные вызовы: Для активации Structured Outputs необходимо установить параметр strict: true в определении функции. Эта возможность доступна для всех моделей, поддерживающих инструменты, включая gpt-4-0613 и gpt-3.5-turbo-0613.
- Параметр response_format: Разработчики могут предоставить JSON схему через новый параметр json_schema. Эта функция доступна для моделей gpt-4o-2024-08-06 и gpt-4o-mini-2024-07-18.
Безопасность:
Structured Outputs будет соблюдать текущие политики безопасности OpenAI, позволяя модели отказывать в выполнении небезопасных запросов.
Поддержка SDK:
Обновленные SDK для Python и Node имеют встроенную поддержку Structured Outputs. Подача схемы осуществляется через объекты Pydantic или Zod, а SDK автоматически обрабатывает сериализацию и десериализацию JSON-ответов.
Примеры использования:
- Динамическое создание интерфейсов на основе пользовательских предпочтений.
- Разделение конечного ответа от сопутствующего рассуждения.
- Извлечение структурированных данных из неструктурированных.
Ограничения:
Несмотря на преимущества, у функции Structured Outputs есть некоторые ограничения, которые следует учитывать при её использовании:
- Дополнительная задержка: Первый запрос с новой схемой может занять до 10 секунд из-за необходимости обработки схемы. Однако последующие запросы с той же схемой будут выполняться быстро без дополнительной задержки.
- Отказы в небезопасных запросах: Модель может отказаться следовать предоставленной схеме, если запрос является небезопасным. В таких случаях в ответе будет указан параметр refusal с значением true, указывающий на отказ.
- Ограничения на максимальное количество токенов: Модель может не следовать схеме, если достигнуто максимальное количество токенов или другое условие остановки до завершения генерации.
- Ошибки в значениях JSON объектов: Structured Outputs не предотвращает все возможные ошибки модели. Например, модель может допустить ошибки в значениях JSON объектов (например, неверный шаг в математическом уравнении). Разработчикам рекомендуется предоставлять примеры в системных инструкциях или разбивать задачи на более простые подзадачи.
- Не совместим с параллельными вызовами функций: Параллельные вызовы функций могут не соответствовать заданным схемам. Для отключения параллельных вызовов установите параметр parallel_tool_calls: false.
- Не совместим с Zero Data Retention (ZDR): JSON схемы, использованные в Structured Outputs, не являются участниками политики нулевого хранения данных.
Доступность:
Функция Structured Outputs доступна в API с сегодняшнего дня. Structured Outputs с функциональными вызовами доступна для всех моделей, поддерживающих функциональные вызовы, включая новейшие модели gpt-4o и gpt-4o-mini. Также эта функция доступна на Chat Completions API, Assistants API и Batch API и совместима с визуальными вводами.
Structured Outputs с форматом ответов доступна на моделях gpt-4o-mini и gpt-4o-2024-08-06 и на всех тонко настроенных моделях, основанных на этих моделях. Эта функция также доступна на Chat Completions API, Assistants API и Batch API и совместима с визуальными вводами.
С переходом на новую модель gpt-4o-2024-08-06 разработчики экономят 50% на входных токенах ($2,50 за 1 млн входных токенов) и 33% на выходных токенах ($10,00 за 1 млн выходных токенов) по сравнению с gpt-4o-2024-05-13.
Для начала использования Structured Outputs посетите документацию на сайте OpenAI, ну а полная и оригинальная статья с примерами кода представлена тут.
Заключение
Внедрение Structured Outputs в API OpenAI открывает новые возможности для разработчиков, позволяя создавать более надежные и точные приложения. Новая функция не только улучшает соответствие генерируемых данных заданным схемам, но и упрощает процесс разработки, уменьшая количество необходимых повторных запросов и исправлений. Structured Outputs является важным шагом на пути к созданию более безопасных и надежных AI-систем.