developers.openai.com/api/docs/guides/function-calling, по состоянию на июнь 2026 года). Примеры для обоих эндпоинтов готовы к копированию и вставке.
Полный цикл вызова
1
Определите инструменты
Отправьте с запросом имена функций, описания и JSON Schema параметров
2
Модель возвращает вызов
Когда модель решает выполнить вызов, она возвращает имя функции и JSON-аргументы
3
Выполните локально
Ваш код разбирает аргументы и фактически запускает функцию (выполняет запрос к БД, обращается к внешнему API…)
4
Отправьте результат обратно
Отправьте результат вместе с диалогом во втором запросе; модель отвечает на его основе
Ключевые различия формата между двумя эндпоинтами
Одна и та же функция, но разные форматы полей в/v1/chat/completions и /v1/responses — самая частая ловушка при интеграции:
Полный пример: Chat Completions
Поиск погоды через полный цикл define → call → execute → return:Полный пример: Ответы
Обратите внимание на три различия: определения tools имеют плоскую структуру, вызовы возвращаются как элементы верхнего уровняfunction_call, а результаты возвращаются как function_call_output. С previous_response_id второй запрос не требует повторной отправки всей истории:
Строгий режим (структурированные выводы)
strict: true гарантирует, что аргументы модели точно соответствуют вашей JSON Schema — без выдуманных или пропущенных полей. Есть три требования:
- Схема должна включать
"additionalProperties": false - Каждое поле должно присутствовать в
required(необязательность выражайте с помощью"type": ["string", "null"]) - Только поддерживаемое подмножество JSON Schema (примитивные типы, enum, массивы, вложенные объекты, …)
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