Wywoływanie funkcji (Function Calling / Tool Calling)
Protokół techniczny i standard interakcji LLM z zewnętrznym oprogramowaniem. Zamiast swobodnego tekstu model zwraca poprawny JSON zawierający nazwę funkcji oraz argumenty typowane zgodnie ze schemą JSON Schema, co umożliwia backendowi deterministyczne wykonywanie operacji w rzeczywistych API.
1. Przegląd koncepcji i problem systemowy
Model językowy jest zamknięty we własnym kontekście: nie zna aktualnego, dokładnego czasu, nie może obciążyć konta ani sprawdzić stanu kontenera w Dockerze.
Bez mechanizmu interakcji z kodem chatbot mógł jedynie imitować działania, zwracając mglisty tekst: „Sprawdziłem Twoje saldo, wynosi $50” (nawet jeśli realne saldo to $0).
Function Calling (Wywołanie funkcji lub Tool Calling) przekształca generator tekstu w orkiestratora systemów. Model analizuje prompt, rozumie brakujące dane i zamiast generować tekst, tworzy maszynowo czytelny JSON:
{
"name": "fetch_user_balance",
"arguments": "{\"account_id\": \"ACC-9481\"}"
}
Mentalna model: jeśli LLM to mózg, to Function Calling to impulsy nerwowe wysyłające komendy do mięśni (Twojego kodu i API) w celu wykonania fizycznej akcji.
┌─────────────────────────────────────────────────────────────┐
│ ARCHITEKTURA FUNCTION CALLING │
├─────────────────────────────────────────────────────────────┤
│ 1. ZAPYT UŻYTKOWNIKA: │
│ „Jaka jest pogoda we Lwowie?” │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Zapytanie do LLM (ze schematem) │
├─────────────────────────────────────────────────────────────┤
│ 2. ODPOWIEDŹ LLM (finish_reason: "tool_calls"): │
│ { "name": "get_weather", "args": { "city": "Lviv" } } │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Backend wykonuje rzeczywiste │
│ zapytanie API │
├─────────────────────────────────────────────────────────────┤
│ 3. TWÓJ SERWER ➔ OpenWeatherMap ➔ Otrzymuje { temp: 18, rain: 0}│
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Przesłanie wyniku z powrotem do LLM│
├─────────────────────────────────────────────────────────────┤
│ 4. FINALNA ODPOWIEDŹ DLA CZŁOWIEKA: │
│ „We Lwowie jest teraz +18°C, bez opadów, miłego dnia!” │
└─────────────────────────────────────────────────────────────┘
2. Praktyczny przykład: opis schematu i wywołanie przez cURL
Oto jak wygląda rejestracja narzędzia w standardzie 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"
}'
Co zwraca model:
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "block_payment_card",
"arguments": "{\"card_id\": 5501, \"reason\": \"lost\"}"
}
}
]
}
3. Cztery zasady bezpieczeństwa przy pracy z Function Calling
- Ścisła walidacja argumentów (Pydantic / Zod): Nigdy nie ufaj ślepo argumentom pochodzącym z JSON-a modelu. Zawsze parsuj je przez schemat walidacji przed wykonaniem zapytania SQL lub obciążeniem konta.
- Bramka kontrolna dla destrukcyjnych działań (Human-in-the-Loop): Jeśli funkcja wykonuje operację nieodwracalną (
delete_database,transfer_funds), backend musi zatrzymać wykonanie i poprosić o potwierdzenie żywego człowieka. - Ograniczenie kontekstu narzędzi: Nie przekazuj modelowi setek funkcji jednocześnie. Rozmywa to uwagę (Attention Saturation) i zwiększa prawdopodobieństwo błędnego wywołania. Stosuj dynamiczną filtrację lub MCP.
- Ochrona przed nieskończoną pętlą (Infinite Tool Loop): Zawsze ustawiaj sztywny limit liczby sekwencyjnych wywołań funkcji (np. maksymalnie 5 iteracji na jedno zapytanie).
4. Podsumowanie
Function Calling to most łączący świat statystycznego modelowania języka z deterministycznym światem programowania. To właśnie ten mechanizm stanowi rdzeń wszystkich współczesnych agentów AI, serwerów MCP oraz autonomicznych asystentów deweloperskich.
FAQ: Wywoływanie funkcji (Function Calling / Tool Calling)
Powiązane pojęcia
Schematy narzędzi (Tools & JSON Schema)
Standard formalnego opisu interfejsów narzędzi (Tools) dla dużych modeli językowych przy użyciu standardu JSON Schema. Obejmuje nazwę funkcji, szczegółowy opis tekstowy jej przeznaczenia, listę wymaganych parametrów oraz typy wartości.
Agenci AI (agenci autonomiczni)
Autonomiczny system oparty na dużym modelu językowym, który nie tylko odpowiada na wiadomości, ale samodzielnie planuje sekwencję działań, wykorzystuje zewnętrzne narzędzia (przeglądarka, terminal, bazy danych) i wykonuje złożone zadania bez ciągłego nadzoru człowieka.
Cykl działania agenta (Myśl ➔ Działanie ➔ Obserwacja / ReAct)
Fundamentalny wzorzec algorytmiczny pracy autonomicznych agentów (znany jako ReAct: Reasoning + Acting). Składa się z nieskończonej pętli trzech kroków: 1) Myśl (Thought) – analiza sytuacji; 2) Działanie (Action) – wywołanie narzędzia; 3) Obserwacja (Observation) – analiza wyniku i korekta planu.
MCP (Model Context Protocol)
Otwarty standard firmy Anthropic oparty na JSON-RPC 2.0, służący do ujednolicenia dwukierunkowego połączenia asystentów AI z narzędziami zewnętrznymi, bazami danych i środowiskiem systemowym.