Виклик функцій (Function Calling / Tool Calling)(Function Calling: архітектура, JSON-схеми та взаємодія LLM із зовнішнім світом)
Технічний протокол та стандарт взаємодії 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-серверів та автономних помічників розробника.
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-асистентів до зовнішніх інструментів, баз даних і системного оточення.