Вызов Функций (Function Calling / Tool Calling)
Технический протокол и стандарт взаимодействия LLM с внешним программным обеспечением. Вместо свободного текста модель возвращает валидный JSON с названием функции и типизированными аргументами по схеме JSON Schema, позволяя бэкенду детерминированно выполнять действия в реальных API.
1. Обзор концепции и системная проблема
Языковая модель замкнута в собственном контексте: она не знает текущего точного времени, не может списать средства со счета или проверить состояние контейнера в Docker.
Без механизма взаимодействия с кодом чат-бот мог лишь имитировать действия, возвращая размытый текст: «Я проверил ваш баланс, там $50» (даже если баланс $0).
Function Calling (Вызов функций или Tool Calling) превращает генератор текста в оркестратора систем. Модель анализирует промпт, понимает, что ей не хватает данных, и вместо текста генерирует машинночитаемый JSON:
{
"name": "fetch_user_balance",
"arguments": "{\"account_id\": \"ACC-9481\"}"
}
Ментальная модель: если LLM — это мозг, то Function Calling — это нервные импульсы, которые посылают команды к мышцам (вашему коду и API) для выполнения физического действия.
┌─────────────────────────────────────────────────────────────┐
│ АРХИТЕКТУРА FUNCTION CALLING │
├─────────────────────────────────────────────────────────────┤
│ 1. ЗАПРОС ПОЛЬЗОВАТЕЛЯ: │
│ «Какая погода во Львове?» │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Запрос к LLM (вместе со схемой) │
├─────────────────────────────────────────────────────────────┤
│ 2. ОТВЕТ LLM (finish_reason: "tool_calls"): │
│ { "name": "get_weather", "args": { "city": "Lviv" } } │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Бэкенд выполняет реальный API-запрос│
├─────────────────────────────────────────────────────────────┤
│ 3. ВАШ СЕРВЕР ➔ OpenWeatherMap ➔ Получает { temp: 18, rain: 0}│
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Отправка результата обратно в LLM │
├─────────────────────────────────────────────────────────────┤
│ 4. ФИНАЛЬНЫЙ ОТВЕТ ЧЕЛОВЕКУ: │
│ «Во Львове сейчас +18°C, без осадков, хорошего дня!» │
└─────────────────────────────────────────────────────────────┘
2. Практический пример: описание схемы и вызов через cURL
Вот как выглядит регистрация инструмента в стандарте OpenAI / Anthropic Tool Calling:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "Заблокируй карту пользователя 5501"}
],
"tools": [
{
"type": "function",
"function": {
"name": "block_payment_card",
"description": "Безопасное блокирование банковской карты пользователя в случае потери",
"parameters": {
"type": "object",
"properties": {
"card_id": {
"type": "integer",
"description": "Уникальный идентификатор карты в системе"
},
"reason": {
"type": "string",
"enum": ["lost", "stolen", "fraud"],
"description": "Причина блокировки"
}
},
"required": ["card_id", "reason"]
}
}
}
],
"tool_choice": "auto"
}'
Что возвращает модель:
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "block_payment_card",
"arguments": "{\"card_id\": 5501, \"reason\": \"lost\"}"
}
}
]
}
3. Четыре правила безопасности при работе с Function Calling
- Строгая валидация аргументов (Pydantic / Zod): Никогда слепо не доверяйте аргументам из JSON модели. Всегда парсите их через схему валидации перед выполнением SQL-запроса или списанием средств.
- Контрольный шлюз для разрушительных действий (Human-in-the-Loop): Если функция выполняет необратимую операцию (
delete_database,transfer_funds), бэкенд должен остановить выполнение и запросить подтверждение живого человека. - Ограничение контекста инструментов: Не передавайте модели сотни функций одновременно. Это размывает внимание (Attention Saturation) и увеличивает вероятность ошибочного вызова. Используйте динамическую фильтрацию или MCP.
- Защита от бесконечного цикла (Infinite Tool Loop): Всегда устанавливайте жесткий лимит на количество последовательных вызовов функций (например, не более 5 итераций на один запрос).
4. Практические инженерные сценарии в продакшене
Function Calling — это мост, который соединил мир статистического моделирования языка с детерминированным миром программирования. Именно этот механизм является ядром всех современных AI-агентов, MCP-серверов и автономных помощников разработчика.
01. Блокировка банковской карты
02. Получение баланса пользователя
03. Запрос погоды в нескольких городах
FAQ: Вызов Функций (Function Calling / Tool Calling)
Связанные термины
Схемы инструментов (Tools & JSON Schema)
Стандарт формализованного описания интерфейсов инструментов (Tools) для больших языковых моделей с использованием стандарта JSON Schema. Включает название функции, детальное текстовое описание ее назначения, список обязательных параметров и типы значений.
AI-агенты (Автономные агенты)
Автономная система на основе большой языковой модели, которая не просто отвечает на сообщения, а самостоятельно планирует последовательность действий, использует внешние инструменты (браузер, терминал, базы данных) и выполняет комплексные задачи без постоянного надзора человека.
Цикл Действий Агента (Thought ➔ Action ➔ Observation / ReAct)
Фундаментальный алгоритмический паттерн работы автономных агентов (известный как ReAct: Reasoning + Acting). Состоит из бесконечного цикла трех шагов: 1) Мысль (Thought) — анализ ситуации; 2) Действие (Action) — вызов инструмента; 3) Наблюдение (Observation) — анализ результата и корректировка плана.
MCP (Model Context Protocol)
Открытый стандарт от Anthropic на основе JSON-RPC 2.0 для унифицированного двустороннего подключения AI-ассистентов к внешним инструментам, базам данных и системной среде.