Skip to main content

Вызов Функций (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

  1. Строгая валидация аргументов (Pydantic / Zod): Никогда слепо не доверяйте аргументам из JSON модели. Всегда парсите их через схему валидации перед выполнением SQL-запроса или списанием средств.
  2. Контрольный шлюз для разрушительных действий (Human-in-the-Loop): Если функция выполняет необратимую операцию (delete_database, transfer_funds), бэкенд должен остановить выполнение и запросить подтверждение живого человека.
  3. Ограничение контекста инструментов: Не передавайте модели сотни функций одновременно. Это размывает внимание (Attention Saturation) и увеличивает вероятность ошибочного вызова. Используйте динамическую фильтрацию или MCP.
  4. Защита от бесконечного цикла (Infinite Tool Loop): Всегда устанавливайте жесткий лимит на количество последовательных вызовов функций (например, не более 5 итераций на один запрос).

4. Практические инженерные сценарии в продакшене

Function Calling — это мост, который соединил мир статистического моделирования языка с детерминированным миром программирования. Именно этот механизм является ядром всех современных AI-агентов, MCP-серверов и автономных помощников разработчика.

01. Блокировка банковской карты

02. Получение баланса пользователя

03. Запрос погоды в нескольких городах

/ Частые вопросыSchema.org FAQPage

FAQ: Вызов Функций (Function Calling / Tool Calling)

Категорически нет! Модель — это изолированный текстово-математический процессор. Она не имеет прямого доступа к вашей базе данных или сети. Она лишь генерирует токены в формате JSON с запросом к вашему серверу: 'Выполни get_user_balance(user_id=42)'. Реальный код всегда выполняет ваш хостинг-бэкенд.
/ Внутренняя перелинковка
Все термины
Агенты и MCP

Схемы инструментов (Tools & JSON Schema)

Стандарт формализованного описания интерфейсов инструментов (Tools) для больших языковых моделей с использованием стандарта JSON Schema. Включает название функции, детальное текстовое описание ее назначения, список обязательных параметров и типы значений.

Читать термин
Агенты и MCP

AI-агенты (Автономные агенты)

Автономная система на основе большой языковой модели, которая не просто отвечает на сообщения, а самостоятельно планирует последовательность действий, использует внешние инструменты (браузер, терминал, базы данных) и выполняет комплексные задачи без постоянного надзора человека.

Читать термин
Агенты и MCP

Цикл Действий Агента (Thought ➔ Action ➔ Observation / ReAct)

Фундаментальный алгоритмический паттерн работы автономных агентов (известный как ReAct: Reasoning + Acting). Состоит из бесконечного цикла трех шагов: 1) Мысль (Thought) — анализ ситуации; 2) Действие (Action) — вызов инструмента; 3) Наблюдение (Observation) — анализ результата и корректировка плана.

Читать термин
Агенты и MCP

MCP (Model Context Protocol)

Открытый стандарт от Anthropic на основе JSON-RPC 2.0 для унифицированного двустороннего подключения AI-ассистентов к внешним инструментам, базам данных и системной среде.

Читать термин