Содержание
  1. Что такое function calling простыми словами
  2. Как LLM выбирает и вызывает функцию: пошаговый процесс
  3. Чем function calling отличается от tool calling
  4. Как агент взаимодействует с внешними системами и API
  5. Формат описания функций и схема параметров
  6. Как выглядит ответ модели с вызовом функции
  7. Примеры реализации: Python, JavaScript, Node.js
  8. Роль REST API и внешних сервисов
  9. Типичные ошибки и ограничения
  10. Практические сценарии: когда function calling реально нужен
  11. Как SDK и agent platform упрощают настройку
  12. Ключевые выводы: как внедрить function calling в свой проект
  13. Частые вопросы
Справочник

Function calling: как LLM вызывает внешние функции

20 сентября 2026 · 15 минут чтения

Материал редакции Зерокодера. Счёт по выдаче снят собственным прогоном 20 сентября 2026 года; цитаты источников приведены дословно. Обновлено: сентябрь 2026.

Function calling — это способ, которым языковая модель сообщает вашему коду, какую внешнюю функцию нужно выполнить. Модель не запускает код сама: она возвращает JSON с именем функции и аргументами, а исполняет вызов ваша программа. В документации OpenAI этот механизм описан так: модели обучены определять, когда следует вызывать функцию, и возвращать JSON, соответствующий нужной функции.

Мы скачали топ-10 Яндекса по запросу «function calling»: текст отдали 9 из 10. Медиана объёма читаемого текста топа — 3160 слов. Метку 2026 года несут 7 из 9 прочитанных страниц.

Что такое function calling простыми словами

Определение из документации: function calling — механизм, при котором модель на основе входных данных решает, что для ответа ей нужна внешняя функция, и формирует структурированный вызов этой функции. В обзоре на Хабре формулировка такая: «Такие LLM как GPT-4 и GPT-3.5 были дообучены самостоятельно определять, когда необходимо вызвать функцию, а затем генерировать JSON, содержащий имя нужной функции, и аргументы для вызова этой функции».

Ключевое разделение: модель отвечает за выбор функции и подготовку аргументов, ваш код — за само исполнение. Модель не имеет доступа к вашей базе, к вашему API и к файловой системе. Она лишь просит: «вызови вот это с такими параметрами». Дальше начинается обычная серверная логика.

Зачем это нужно. Без function calling модель отвечает текстом и может только рассуждать. С ним она получает возможность инициировать действие: запросить погоду, посчитать сумму, создать событие в календаре, достать строку из базы. В обзоре на ai-manual.ru это названо стандартом: «К 2026 году tool calling стал стандартом де-факто».

Простой пример из документации Gemini: пользователь пишет «Schedule a meeting with Bob and Alice for 03/14/2025 at 10:00 AM about Q3 planning», и модель возвращает вызов функции создания события с разобранными полями — участники, дата, время, тема.

Как LLM выбирает и вызывает функцию: пошаговый процесс

Процесс состоит из фиксированного цикла. В документации Google он разбит на два шага: сначала промпт и объявления функций отправляются модели, затем вывод API возвращается модели.

  1. Вы описываете функции. Передаёте модели список доступных инструментов: имя, назначение, параметры.
  2. Пользователь задаёт вопрос. Модель читает промпт вместе с описаниями функций.
  3. Модель выбирает. Она решает, нужна ли внешняя функция, и если да — какую именно.
  4. Модель формирует вызов. Возвращается JSON с именем функции и аргументами.
  5. Ваш код исполняет. Вы парсите JSON, вызываете реальную функцию, получаете результат.
  6. Результат возвращается модели. Вы добавляете вывод функции в историю сообщений и снова вызываете модель.
  7. Модель формулирует финальный ответ. Теперь у неё есть данные, и она отвечает текстом.

В документации OpenAI этот цикл описан прямо: «We then send all of the tool definition, the original prompt, the model’s tool call, and the tool call output back to the model to finally receive a text response like: The weather in Paris today is 25C». То есть финальный текст появляется только после того, как результат функции вернулся в контекст.

В обзоре на GeeksforGeeks приведён пример с ценой акции: после вызова функции вывод был «price of TCS is 3718.0», а финальный ответ модели — «Based on your statement, **the price of TCS is 3718.0».

Важная деталь: модель может вызвать несколько функций за один ход. В документации Google есть раздел про параллельный вызов функций, а в обзоре на ai-manual.ru указано: «OpenAI поддерживает до 10 инструментов в одном ответе — обрабатывайте их в цикле».

Чем function calling отличается от tool calling

Это два названия одной механики с разной широтой. Function calling исторически означает вызов конкретной функции с аргументами. Tool calling — более общий термин: инструментом может быть функция, встроенный поиск, работа с файлами, компьютерные действия.

Признак Function calling Tool calling
Что вызывается Функция в вашем коде Любой инструмент: функция, поиск, код, файлы
Кто исполняет Ваш сервер Ваш сервер или платформа
Формат ответа JSON с именем и аргументами Тот же JSON, плюс встроенные типы
Типичный контекст Классический API-вызов Агентские платформы и SDK
Когда выбирать Нужен один понятный вызов Нужен набор разнородных действий

Практический вывод: если вы пишете интеграцию с одним внешним сервисом, вам достаточно function calling. Если строите агента с поиском, кодом и файлами, смотрите в сторону tool calling и агентских SDK. В документации OpenAI раздел про инструменты включает и функции, и встроенные возможности вроде поиска.

Как агент взаимодействует с внешними системами и API

Агент — это цикл, в котором модель многократно получает результаты вызовов и решает, что делать дальше. Внешняя система подключается через обычный HTTP-запрос внутри вашей функции.

Схема такая: модель просит вызвать get_weather с городом → ваш код делает GET-запрос к погодному API → ответ парсится → результат уходит обратно в модель → модель либо отвечает, либо просит следующий вызов.

В документации Google приведён пример с погодой: после получения данных модель отвечает «It is currently 38 degrees Fahrenheit in Boston, MA with partly cloudy skies». В другом примере оттуда же: «The temperature in Boston is 30.5C and the temperature in San Francisco is 20C» — то есть один ход закрыл два города.

Что это даёт агенту. Он перестаёт быть генератором текста и становится исполнителем: может создать задачу, отправить письмо, обновить запись. В обзоре на ai-manual.ru есть жёсткая формулировка: «Если ваш AI-агент до сих пор только болтает, вы теряете 90% его потенциала». О том, как устроен такой цикл целиком, мы разбирали в статье Как сделать своего AI-агента: 77 строк кода и прогон.

Формат описания функций и схема параметров

Функция описывается декларацией: имя, текстовое описание, схема параметров. Схема — это JSON Schema с типами, обязательными полями и ограничениями.

В документации Google перечислены требования к именам: «Function names should start with a letter or an underscore and contain only characters a-z, A-Z, 0-9, underscores, dots or dashes with a maximum length of 64». Там же указано ограничение на вложенность: «The maximum depth of nested schema is 32».

Рекомендации из документации Hugging Face: «Keep function names clear and specific», «Use detailed descriptions for functions and parameters», «Include parameter constraints (min/max values, enums, etc.)». Пример вывода оттуда же: {"temperature": 70, "condition": "sunny"}.

Ограничения по количеству. В документации OpenAI: «Aim for fewer than 20 functions available at the start of a turn at any one time, though this is just a soft suggestion». В документации Google: «ideally keeping the active set to a maximum of 10-20». В обзоре на ai-manual.ru описан эффект перегрузки: «Когда в списке 50 функций, модель начинает путаться и тратить токены на лишние «думы»».

Отдельная деталь про строгий режим. В документации Google: «Starting with Gemini 3, this mode also enforces the presence of required parameters». Если включаете строгую схему, обязательные поля действительно становятся обязательными.

Как выглядит ответ модели с вызовом функции

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

В примерах документации Google идентификатор вызова извлекается отдельно: FC_ID = $( echo " $RESPONSE1 " | jq -r '. — то есть это самостоятельное поле в ответе.

Аргументы — всегда JSON, даже если значения выглядят как числа. В документации Google есть пометка про перечисления: "enum": ["10", "20", "30"], # Provide integer (or any other type) values as strings. Числа могут прийти строками, и ваш код должен это учитывать.

Обработка результата. Вы формируете ответ функции и отправляете его обратно. В документации OpenAI показан формат: {"temperature": "25", "unit": "C"} — текущая температура 25 градусов. В документации Google есть пример с частичным ответом: «The weather in Boston is cold and cloudy with a temperature of 38 degrees Fahrenheit».

Отдельный случай — многошаговые ответы. В документации Google указано: «All model-generated steps returned in Turn 1 (including thought and function_call steps) exactly as received» — шаги нужно возвращать в модель целиком, включая промежуточные рассуждения.

Примеры реализации: Python, JavaScript, Node.js

Все три стека работают по одной схеме: объявить функцию, отправить её модели, обработать вызов, вернуть результат.

Python. В документации OpenAI пример строится вокруг списка сообщений: response = client.chat.completions.create( с аргументами через равенство — model = "gpt-5.6", tools = tools, Результат вызова добавляется в историю: input_messages += response.output В документации Google на Python показан финальный вывод: print ( f " \n Final model response: { response_2 .

JavaScript. В документации OpenAI вызов асинхронный: const completion = await openai. и const response = await openai. Ответ читается из ответа модели: console.log(response.choices

Node.js. В документации Google для Node.js приведены те же шаги, что и для Python: объявление функции, вызов модели, передача вывода API обратно. Отдельно указано ограничение: «Streaming function call arguments is not supported in Gemini 3.1 Flash-Lite» — потоковая передача аргументов доступна не везде.

REST. Если SDK не подходит, работает прямой HTTP. В документации Google показан запрос через curl: RESPONSE1 = $( curl -s -X POST "https://generativelanguage. Разбор ответа идёт через jq: MODEL_STEPS = $( echo " $RESPONSE1 " | jq '.

Стек Как объявляется функция Как обрабатывается вызов
Python Словарь или Pydantic-модель Добавление ответа в список сообщений
JavaScript Объект-схема в массиве tools Асинхронный вызов и добавление в input
Node.js Та же схема, что в JS Возврат вывода API в модель
REST JSON в теле запроса Разбор ответа через jq и повторный POST

Роль REST API и внешних сервисов

Function calling почти всегда заканчивается HTTP-запросом. Модель формирует аргументы, ваша функция превращает их в вызов REST API, ответ возвращается в модель.

Что это меняет для архитектуры. Появляется слой-посредник: он принимает JSON от модели, валидирует аргументы, делает запрос, нормализует ответ. Этот слой — единственное место, где модель касается внешнего мира, и именно здесь ставятся проверки.

Пример из практики, описанный в обзоре на DEV Community: бот собирает новости через newsapi. В логе видно «Processing 1 articles from newsapi» и «Processing 1000 articles from newsapi» — то есть количество записей управляется аргументом функции, который сформировала модель.

Внешний сервис может быть любым: погодный API, календарь, CRM, внутренняя база. Модель не знает, как он устроен, — она видит только описание функции. Это и есть точка расширения агента.

Типичные ошибки и ограничения

Ошибки делятся на три группы: модель выбирает не то, аргументы неверны, результат теряется.

В обзоре на ai-manual.ru перечислены основные грабли: «Модель вызывает не ту функцию», «Галлюцинации в аргументах», «Забыли передать результаты обратно», «Слишком много инструментов». Каждая из них ломает цикл целиком.

Ограничения по моделям. В документации OpenAI: «Only gpt-5.4 and later models support tool_search» и «GPT-6 Astra requires the Responses API for tool calling». То есть часть возможностей привязана к конкретным версиям и конкретному API.

Открытые модели. В обзоре на ai-manual.ru: «Да, многие модели (Llama 3, Mistral, Qwen) поддерживают function calling, но качество ниже, чем у проприетарных». Там же рекомендация: «Для критичных сценариев лучше использовать GPT-5 или Claude 4 Sonnet».

Локальные варианты тоже существуют. В обзоре на Хабре упомянуты Gorilla OpenFunctions-v2 — «модель примерно с 7 миллиардами параметров, дообученная на основе Deepseek-Coder-7B-Instruct-v1.5 6.91B», NexusRaven-V2-13B на базе CodeLlama-13B и Functionary, которая «может интерпретировать и выполнять функции/плагины».

Ошибка Причина Что делать
Выбрана не та функция Похожие описания Уточнить описания и имена
Неверные аргументы Модель додумала значения Валидировать схему на своей стороне
Потерян результат Ответ не вернули в модель Добавлять вывод функции в историю
Перегрузка инструментов Слишком длинный список Держать 10–20 активных функций
Строки вместо чисел Особенность сериализации Приводить типы в коде

Практические сценарии: когда function calling реально нужен

Механизм нужен там, где ответ требует данных извне или действия во внешней системе.

Календарь и встречи. Пример из документации Google: «Schedule a meeting with Bob and Alice for 03/27/2025 at 10:00 AM about Q3 planning». Модель разбирает естественную фразу в структурированные поля.

Погода и справочные данные. В документации Google: «The weather in New Delhi is hot and humid with a temperature of 42 degrees Celsius». Модель получает факт и пересказывает его.

Графики и визуализация. Пример оттуда же: «Create a bar chart titled ‘Quarterly Sales’ with Q1: 50000, Q2: 75000, Q3: 60000». Аргументы становятся данными для построения диаграммы.

Работа с документами и новостями. В обзоре на DEV Community бот обрабатывает статьи и оценивает их: score_article = true. Модель решает, какие материалы релевантны.

Определение намерения. В документации Microsoft function calling используется для «Determining intent» — модель определяет, что хочет пользователь, и выбирает соответствующее действие.

Когда механизм не нужен: если ответ целиком помещается в знания модели и не требует свежих данных или действий. Тогда достаточно обычного промпта.

Как SDK и agent platform упрощают настройку

SDK убирают ручную сборку JSON и повторные вызовы. Вы объявляете функцию в привычном синтаксисе, платформа сама формирует декларацию и обрабатывает ответ.

В документации Google перечислены варианты: REST, Google Gen AI SDK for Python, Agent Platform SDK, Node.js и Java. Для каждого шага — свой пример. В документации OpenAI упоминаются Agents API, Agents SDK и ChatKit как отдельные слои для построения агентов.

Что берёт на себя платформа: сериализацию схемы, разбор ответа модели, сопоставление идентификаторов вызовов, повторную отправку результата. Вам остаётся описать саму функцию и её логику.

В документации Microsoft показан пример настройки: «The example shows how to set the temperature to 0 for a fixed JSON output, add a tool, set the tool choice to the added tool, mock user input, call generate, and process the output». Температура 0 здесь — способ получить предсказуемый JSON.

Про выбор платформы для проекта мы писали в материале Разработка ботов: Microsoft Bot Framework vs OpenAI GPT — что выбрать бизнесу.

Ключевые выводы: как внедрить function calling в свой проект

Порядок внедрения выглядит так.

  1. Определите одну функцию. Начните с простого вызова: погода, время, одна запись в базе.
  2. Опишите схему строго. Имя, назначение, типы параметров, обязательные поля, ограничения.
  3. Напишите обработчик. Валидация аргументов, вызов внешнего API, нормализация ответа.
  4. Замкните цикл. Возвращайте результат функции в модель и повторяйте вызов до текстового ответа.
  5. Ограничьте список. Держите 10–20 активных инструментов, остальные подгружайте по необходимости.
  6. Добавьте проверки. Аргументы приходят от модели, поэтому валидация обязательна.
  7. Логируйте вызовы. Имя функции, аргументы, результат — это база для отладки.

Проверьте доступность выбранной модели и API из вашего региона: в приведённых источниках этот вопрос не раскрывается, а часть возможностей привязана к конкретным версиям моделей. Если строите агента целиком, начните с материала Кто такой ИИ-агент и как он работает, а про платформенный контекст — Как развиваются российские ИИ‑платформы в 2026 году.

Частые вопросы

Что такое function calling простыми словами?
Это механизм, при котором языковая модель возвращает не текст, а структурированный запрос на вызов функции: её имя и аргументы. Саму функцию исполняет ваш код, потому что у модели нет доступа к вашим системам. После исполнения результат возвращается модели, и она формулирует обычный текстовый ответ. В обзоре на Хабре это описано как дообучение моделей генерировать JSON с именем функции и аргументами.

В чём разница между function calling и tool calling?
Function calling — вызов конкретной функции с аргументами, tool calling — более широкое понятие, где инструментом может быть функция, поиск, работа с файлами или кодом. Формат ответа у них общий: JSON с именем и параметрами. В документации OpenAI раздел про инструменты объединяет и функции, и встроенные возможности. Для интеграции с одним сервисом разницы на практике нет.

Как происходит взаимодействие агента с внешними системами через function calling?
Агент работает циклом: модель просит вызвать функцию, ваш код делает HTTP-запрос к внешнему API, ответ парсится и уходит обратно в модель. Модель либо отвечает текстом, либо запрашивает следующий вызов. В документации Google показан пример, где один ход закрыл два города: температура в Бостоне и Сан-Франциско. Внешний сервис может быть любым — погода, календарь, CRM, внутренняя база.

Можно ли сделать tool calling для open-source моделей?
Да, многие открытые модели поддерживают этот механизм, но качество выбора функций у них ниже, чем у проприетарных. В обзоре на Хабре упомянуты Gorilla OpenFunctions-v2 примерно с 7 миллиардами параметров, NexusRaven-V2-13B на базе CodeLlama-13B и Functionary. Для критичных сценариев в обзоре на ai-manual.ru рекомендуют проприетарные модели. Локальный вариант имеет смысл, когда данные не должны покидать ваш контур.

Сколько функций можно передать модели за один раз?
В документации OpenAI советуют держать меньше 20 функций в начале хода, называя это мягкой рекомендацией. В документации Google ориентир — максимум 10–20 активных инструментов. В обзоре на ai-manual.ru описан эффект перегрузки: при списке из 50 функций модель путается и тратит токены на лишние рассуждения. Лишние инструменты лучше подгружать по мере необходимости.

Читайте также

3 материала