Содержание
- Что такое function calling простыми словами
- Как LLM выбирает и вызывает функцию: пошаговый процесс
- Чем function calling отличается от tool calling
- Как агент взаимодействует с внешними системами и API
- Формат описания функций и схема параметров
- Как выглядит ответ модели с вызовом функции
- Примеры реализации: Python, JavaScript, Node.js
- Роль REST API и внешних сервисов
- Типичные ошибки и ограничения
- Практические сценарии: когда function calling реально нужен
- Как SDK и agent platform упрощают настройку
- Ключевые выводы: как внедрить function calling в свой проект
- Частые вопросы
Function calling: как LLM вызывает внешние функции
Черновик готовит редакция с помощью ИИ. За стандарт издания отвечает главный редактор — Валерий Курземнек.
Материал редакции Зерокодера. Счёт по выдаче снят собственным прогоном 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 возвращается модели.
- Вы описываете функции. Передаёте модели список доступных инструментов: имя, назначение, параметры.
- Пользователь задаёт вопрос. Модель читает промпт вместе с описаниями функций.
- Модель выбирает. Она решает, нужна ли внешняя функция, и если да — какую именно.
- Модель формирует вызов. Возвращается JSON с именем функции и аргументами.
- Ваш код исполняет. Вы парсите JSON, вызываете реальную функцию, получаете результат.
- Результат возвращается модели. Вы добавляете вывод функции в историю сообщений и снова вызываете модель.
- Модель формулирует финальный ответ. Теперь у неё есть данные, и она отвечает текстом.
В документации 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 в свой проект
Порядок внедрения выглядит так.
- Определите одну функцию. Начните с простого вызова: погода, время, одна запись в базе.
- Опишите схему строго. Имя, назначение, типы параметров, обязательные поля, ограничения.
- Напишите обработчик. Валидация аргументов, вызов внешнего API, нормализация ответа.
- Замкните цикл. Возвращайте результат функции в модель и повторяйте вызов до текстового ответа.
- Ограничьте список. Держите 10–20 активных инструментов, остальные подгружайте по необходимости.
- Добавьте проверки. Аргументы приходят от модели, поэтому валидация обязательна.
- Логируйте вызовы. Имя функции, аргументы, результат — это база для отладки.
Проверьте доступность выбранной модели и 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 функций модель путается и тратит токены на лишние рассуждения. Лишние инструменты лучше подгружать по мере необходимости.
