Skip to main content
Function Calling (FC) — основа построения агентов: модель никогда не выполняет функции — она только выводит «какую функцию вызвать и с какими аргументами». Выполнение происходит в вашем коде; вы отправляете результат обратно, и модель формирует финальный ответ. Эта страница основана на официальной документации OpenAI (developers.openai.com/api/docs/guides/function-calling, по состоянию на июнь 2026 года). Примеры для обоих эндпоинтов готовы к копированию и вставке.

Полный цикл вызова

1

Определите инструменты

Отправьте с запросом имена функций, описания и JSON Schema параметров
2

Модель возвращает вызов

Когда модель решает выполнить вызов, она возвращает имя функции и JSON-аргументы
3

Выполните локально

Ваш код разбирает аргументы и фактически запускает функцию (выполняет запрос к БД, обращается к внешнему API…)
4

Отправьте результат обратно

Отправьте результат вместе с диалогом во втором запросе; модель отвечает на его основе

Ключевые различия формата между двумя эндпоинтами

Одна и та же функция, но разные форматы полей в /v1/chat/completions и /v1/responses — самая частая ловушка при интеграции:
Эти два формата нельзя смешивать. Отправка вложенного определения function: {...} из Chat Completions в /v1/responses (или наоборот) — самая частая причина ошибок SDK «invalid parameter».

Полный пример: Chat Completions

Поиск погоды через полный цикл define → call → execute → return:

Полный пример: Ответы

Обратите внимание на три различия: определения tools имеют плоскую структуру, вызовы возвращаются как элементы верхнего уровня function_call, а результаты возвращаются как function_call_output. С previous_response_id второй запрос не требует повторной отправки всей истории:

Строгий режим (структурированные выводы)

strict: true гарантирует, что аргументы модели точно соответствуют вашей JSON Schema — без выдуманных или пропущенных полей. Есть три требования:
  1. Схема должна включать "additionalProperties": false
  2. Каждое поле должно присутствовать в required (необязательность выражайте с помощью "type": ["string", "null"])
  3. Только поддерживаемое подмножество JSON Schema (примитивные типы, enum, массивы, вложенные объекты, …)
строгий режим несовместим с параллельными вызовами функций: когда вам нужны строгие гарантии схемы, также задайте parallel_tool_calls: false.

parallel_tool_calls и tool_choice

Параллельные вызовы

parallel_tool_calls по умолчанию включен: модель может запросить несколько функций за один ход (например, погоду для Пекина и Шанхая одновременно). Выполните каждую, затем верните все результаты перед следующим запросом — каждый результат должен соответствовать своему call_id (responses) или tool_call_id (chat).

Стратегии tool_choice

Подмножества allowed_tools

Когда у вас много tools, но вы хотите раскрыть только некоторые из них в этом ходе, используйте форму allowed_tools для tool_choice, чтобы ограничить доступное для вызова подмножество — это не изменяет сам список tools, поэтому не нарушает стабильный префикс для кэширования:

Вызовы функций в потоковой передаче

Chat Completions: соберите по индексу

Аргументы функции передаются фрагментами. Накапливайте строку arguments для каждого index, затем json.loads после завершения потока:

Responses: отслеживайте семантические события

События response.function_call_arguments.delta содержат приращения аргументов, а response.function_call_arguments.done доставляет полные аргументы — без ручной сборки по индексу.

Лучшие практики и подводные камни

Как писать хорошие определения инструментов:
  • Имена и описания пишутся для модели: явно укажите «когда вызывать меня», например "Get real-time weather; call only when the user explicitly asks about weather"
  • Сужайте параметры с помощью enum: если значения перечислимы, не используйте свободные строки — это устраняет большинство выдуманных аргументов
  • Держите определения инструментов в начале prompt и не меняйте их: tools участвуют в префиксе кэша; стабильные определения означают 90%-ную скидку на входные данные (см. Тарификация кэша)
  • Ограничьте цикл агента: задайте максимальное число раундов, чтобы модель не могла бесконечно сжигать деньги, переходя по циклу call → return → call
Распространенные ошибки:

Поддержка моделей и выбор

Вся серия gpt-5 поддерживает вызов функций. По сценариям:

Связанные ссылки

  • Эта группа: Native Calls · Compatible Mode · Cache Billing
  • Получение / управление tokens: https://api.apiyi.com/token
  • Официальная документация OpenAI: developers.openai.com/api/docs/guides/function-calling