OpenAI
Эта страница была переведена машинным переводом. Открыть оригинальную статью на английском.

Вызов функций в API OpenAI

Что такое вызов функций и как он работает в API OpenAI?

Обновлено: 4 days ago

По состоянию на 11 марта 2025 года мы выпустили базовые компоненты нашей новой платформы Agents. Подробнее см. в документации API по Responses API, инструментам, включая Web Search, File Search и Computer Use, а также по Agents SDK с Tracing.

Вызов функций позволяет подключать модели OpenAI к внешним инструментам и системам. Это полезно во многих случаях, например для наделения ИИ-помощников дополнительными возможностями или для создания глубоких интеграций между вашими приложениями и LLM.

Подробнее см. в нашем руководстве для разработчиков по вызову функций.

В июне 2024 года мы запустили Structured Outputs. Если включить эту функцию, установив `strict: true` в определении функции, Structured Outputs гарантирует, что аргументы, сгенерированные моделью для вызова функции, будут в точности соответствовать JSON Schema, которую вы указали в определении функции.

В октябре 2024 года мы запустили функцию 'Generate Anything', которая позволяет разработчикам описать функцию, вставить её напрямую или вставить свой код и сгенерировать корректную схему функции. Подробнее о 'Generate Anything' читайте в этой статье справочного центра

Как использовать вызов функций?

Вызов функций полезен для множества сценариев, например:

  • Предоставление помощникам доступа к данным:

    • ИИ-помощнику нужно получить последние данные о клиенте из внутренней системы, когда пользователь спрашивает: «Какие у меня последние заказы?», прежде чем он сможет сгенерировать ответ пользователю

  • Предоставление помощникам возможности выполнять действия:

    • ИИ-помощнику нужно планировать встречи на основе предпочтений пользователя и доступности в календаре.

  • Предоставление помощникам возможности выполнять вычисления:

    • помощнику-репетитору по математике нужно выполнить математическое вычисление.

  • Построение сложных рабочих процессов:

    • конвейер извлечения данных, который получает исходный текст, затем преобразует его в структурированные данные и сохраняет их в базе данных.

Вызов функций поддерживается в Responses API, который объединяет возможности, ранее разделённые между API завершения чата и Assistants API.

Как использовать режим JSON?

Когда режим JSON включён, корректность вывода модели как JSON обеспечивается, за исключением некоторых пограничных случаев, которые вам следует выявлять и обрабатывать соответствующим образом.

Чтобы запросить режим JSON через Responses API или API завершения чата, можно установить response_format в { "type": "json_object" } для поддерживаемых моделей, но это работает только при соблюдении предварительных условий для модели, сообщений и инструментов (например, модель поддерживает json_object, диалог содержит инструкцию выдавать JSON, а ограничения инструментов совместимы). Для режима JSON с response_format: {"type": "json_object"} как минимум одно сообщение запроса должно содержать json в какой-либо форме, например JSON, json или Json; в противном случае API вернёт ошибку. Когда вызов функций используется с совместимыми моделями или путями, JSON-ограничения автоматически применяются к аргументам вызова функции; несовместимые модели или сочетания инструментов и форматов ответа могут быть отклонены либо не использовать выборку с ограничениями JSON.

Важные замечания:

  • При использовании режима JSON вы всегда должны явно инструктировать модель выдавать JSON через какое-либо сообщение в диалоге, например через системное сообщение. Если вы не добавите явную инструкцию генерировать JSON, модель может начать выдавать бесконечный поток пробельных символов, и запрос может выполняться непрерывно, пока не достигнет лимита токенов. Чтобы снизить риск такой ошибки, режим JSON отклоняет запросы, если соответствующие входные сообщения или инструкции не содержат слово json в какой-либо форме, без учёта регистра.

  • Режим JSON не гарантирует, что вывод будет соответствовать какой-либо конкретной схеме, а только то, что он будет валидным и разберётся без ошибок. Чтобы обеспечить соответствие вашей схеме, следует использовать Structured Outputs, а если это невозможно — библиотеку валидации и, при необходимости, повторные попытки, чтобы вывод соответствовал нужной схеме.

  • Ваше приложение должно выявлять и обрабатывать пограничные случаи, из-за которых вывод модели может не быть полным JSON-объектом (см. ниже)

Была ли эта статья полезной?