Function Calling
function calling — вызов внешних функций моделью с типизацией
Function Calling — механизм, при котором LLM решает, какую внешнюю функцию вызвать и с какими аргументами. Модель сама не выполняет функцию: она возвращает имя функции + JSON-аргументы, а ваш код выполняет и возвращает результат. Главный путь дать модели «руки»: проверить погоду, отправить email, найти товар в базе. Появилось в OpenAI в июне 2023, к 2026-му — стандарт всех больших LLM.
Коротко
Коротко. Function Calling — это способ дать LLM возможность вызывать ваши Python/JS-функции по необходимости. Вы описываете функции с их параметрами, модель сама решает: «для ответа надо вызвать
get_weather(city='Москва')». Модель функцию не выполняет — возвращает запрос, ваш код запускает реальный API погоды и шлёт результат обратно. Это базовый механизм для AI-агентов и ассистентов с внешними возможностями.
Что это такое
Пользователь спрашивает ChatGPT: «Что лучше надеть в Москве сегодня?». Чтобы ответить, нужна актуальная погода. У модели её нет — knowledge cutoff давно закончился.
Без Function Calling: модель отвечает что-то общее: «обычно в Москве в это время года…». Бесполезно для конкретного дня.
С Function Calling:
- Программист описал модели функцию
get_current_weather(city)с её сигнатурой. - Модель видит вопрос → понимает: нужна погода → отправляет в ответ:
get_current_weather("Moscow"). - Код приложения выполняет функцию (зовёт OpenWeather API), получает:
+12°C, дождь, ветер 8 м/с. - Этот результат отправляется обратно модели.
- Модель отвечает: «В Москве сейчас +12°C и дождь, ветер 8 м/с. Рекомендую куртку с капюшоном и непромокаемую обувь».
Модель сама не вызывала API погоды. Она только запросила вызов, ваш код выполнил, она использовала результат для финального ответа.
Это и есть Function Calling — мост между LLM и реальным миром через ваш код.
К 2026-му это базовый механизм:
- AI-агентов (Cursor, Claude Code, Auto-GPT).
- Чат-ботов с подключённой базой данных.
- Голосовых ассистентов (Alexa Plus, Siri 2, Google Assistant).
- Корпоративных Copilot'ов (поиск по документам, action items).
- Calendar / email automation.
Как это работает
Двусторонний процесс:
- Описание функций в схеме (JSON Schema). Имя, параметры, типы.
- Запрос к модели с обычным prompt + список доступных функций.
- Модель решает. Может ответить текстом ИЛИ запросить вызов функции.
- Если запрошен вызов: код выполняет функцию, отправляет результат обратно.
- Модель использует результат для финального ответа.
Пример полного цикла OpenAI:
tools = [{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Получить текущую погоду в городе",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Название города"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
}]
# Шаг 1: спрашиваем модель
resp1 = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Что надеть в Москве?"}],
tools=tools
)
# Модель решила вызвать функцию
tool_call = resp1.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
# args = {"city": "Москва", "unit": "celsius"}
# Шаг 2: наш код вызывает реальный API
weather = call_real_weather_api(args["city"])
# weather = "+12°C, дождь"
# Шаг 3: возвращаем результат модели
resp2 = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Что надеть в Москве?"},
resp1.choices[0].message,
{"role": "tool", "tool_call_id": tool_call.id, "content": weather}
],
tools=tools
)
print(resp2.choices[0].message.content)
# "В Москве +12°C и дождь. Лучше надеть куртку с капюшоном..."
К 2026-му в OpenAI, Anthropic, Gemini, Mistral, Llama-моделях — везде есть Function Calling. Реализация чуть отличается, идея одна.
Пример на практике
Команда строит AI-ассистента для интернет-магазина. Доступные функции:
search_products(query, category)— поиск товаров.get_product_details(id)— детали товара.add_to_cart(product_id, quantity)— добавить в корзину.get_order_status(order_id)— статус заказа.
Пользователь пишет: «Найди беспроводные наушники до 5000 рублей».
- Модель: вызывает
search_products(query="беспроводные наушники", price_max=5000). - Код выполняет SQL-запрос, возвращает 5 товаров.
- Модель отвечает: «Нашёл 5 моделей, лучшие три: Sony WH-CH520 (3990 руб), Marshall Major IV (4500 руб), JBL Tune 510BT (2790 руб). Какие интересны?».
Пользователь: «Расскажи про Sony».
- Модель вызывает
get_product_details(id=12345). - Получает характеристики, отзывы.
- Отвечает с описанием.
Пользователь: «Добавь в корзину».
- Модель вызывает
add_to_cart(product_id=12345, quantity=1). - Подтверждает: «Добавил Sony WH-CH520 в корзину».
Полный диалог с логичной цепочкой действий — модель сама ориентируется, какую функцию когда вызвать.
В ComfyUI есть отдельные ноды для Function Calling с локальными LLM (Ollama, LM Studio) — можно строить пайплайны, где LLM управляет workflow генерации картинок.
С чем часто путают
- Function Calling и Tool Calling — это синонимы. OpenAI начал с «functions», в 2024 переименовали в «tools». Anthropic с самого начала использовал «tools».
- Function Calling и Plugin — Plugin (старый ChatGPT Plugins) был интеграцией с внешними API через ChatGPT-интерфейс. Function Calling — чистый API-механизм для разработчиков.
- Function Calling и MCP — MCP это протокол для подключения tools (включая function calling) от разных провайдеров. Function Calling — конкретная фича внутри одного API.
- Function Calling и Code Interpreter — Code Interpreter выполняет код в песочнице. Function Calling — модель просит выполнить ваш существующий код.
- Function Calling и Structured Output — Function Calling построен на Structured Output (аргументы с фиксированной схемой). SO без вызова — ответ в схеме без действий.
Частые ошибки и заблуждения
- «Модель сама выполняет функции». Не выполняет. Только просит. Ваш код решает, выполнять или нет.
- «Function Calling гарантированно безопасен». Зависит от вас. Если функция
execute_sql(query)доступна — модель может попросить опасный запрос. Валидируйте. - «Чем больше функций, тем лучше». До 10–15 норма. Дальше модель путается. Для большего — иерархические агенты (одна функция «выбирает контекст»).
- «Function Calling работает только в OpenAI». Работает у всех больших — OpenAI, Claude, Gemini, Llama 3.1+. Различается синтаксис.
- «Модель всегда вызывает функцию». Не всегда. Модель сама решает, нужна ли функция. Если не нужна — отвечает текстом.
Связанные термины
- Tool Calling — современное название Function Calling.
- AI Agent — построен на цикле function calling.
- Structured Output — основа для типизации аргументов.
- MCP — протокол стандартизации tools между провайдерами.
- Code Interpreter — другая фича, выполнение кода в песочнице.
- JSON Schema — формат описания параметров функций.
- API — главное место применения.
Частые вопросы
Какую модель выбрать для Function Calling? GPT-4o, Claude 3.5 Sonnet+, Gemini 2 — отлично. GPT-3.5 — слабее, путается на сложных функциях. Для production нужна большая модель.
Сколько функций можно описать? Технически — до контекстного окна. Практически — 10–15 для надёжной работы. Дальше начинаются ошибки выбора.
Что делать, если модель вызывает не ту функцию?
Улучшить description у функций (более чёткое объяснение, когда какая нужна). Добавить few-shot примеры. Использовать tool_choice для принудительного вызова конкретной функции.
Можно ли вызвать несколько функций одновременно? Да, parallel function calling — модель возвращает несколько вызовов в одном ответе. Полезно для независимых запросов (например, погода в 3 городах сразу).
Function Calling работает в локальных моделях? Да: Llama 3.1+, Qwen 2.5, Mistral поддерживают. Но качество ниже фронтиров (GPT-4, Claude 3.5).
Что такое tool_choice?
Параметр, заставляющий модель вызвать конкретную функцию или любую функцию (но не текст). Полезно для гарантированных действий.
Главное
Function Calling — мост между LLM и реальным миром через ваш код. Модель решает, какую функцию нужно вызвать (get_weather, search_products, send_email), возвращает её имя + аргументы; ваш код выполняет реальную работу; модель использует результат в финальном ответе. Это базовый механизм для AI-агентов, чат-ботов с действиями, корпоративных Copilot'ов. Главное правило — не больше 10–15 функций за раз, всегда валидировать аргументы перед выполнением (модель не сделает «плохое» намеренно, но и хорошо отфильтровать неправильное не сможет). К 2026-му это стандарт всех больших LLM, синтаксис чуть отличается между OpenAI, Anthropic и Gemini, но идея одна.