Prin tool calling (numit și function calling), aplicația trimite modelului o listă de unelte: nume, descriere și o schemă JSON a parametrilor. Modelul decide, pe baza cererii și a descrierilor, dacă apelează o unealtă și cu ce argumente. Modelul nu execută nimic: întoarce un apel structurat, iar codul tău îl rulează.
OpenAI descrie fluxul în cinci pași: cererea cu uneltele disponibile, primirea apelului, executarea codului în aplicație, o a doua cerere cu rezultatul și răspunsul final (sau alte apeluri). În Responses API, apelul vine ca element function_call cu call_id, name și arguments (un șir JSON), iar rezultatul se trimite înapoi ca function_call_output cu același call_id. În Chat Completions, apelurile apar în câmpul tool_calls.
La Claude (Anthropic), răspunsul are stop_reason: "tool_use" și unul sau mai multe blocuri tool_use (cu id, name, input); rezultatul se trimite într-un bloc tool_result cu tool_use_id. Uneltele de server (de exemplu web_search) rulează pe infrastructura Anthropic. Pentru unelte partajate între aplicații există MCP.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
name / description |
Numele și descrierea uneltei; modelul le folosește ca să decidă când o apelează. |
parameters / input_schema |
Schema JSON a argumentelor (OpenAI: parameters; Anthropic: input_schema). |
strict (OpenAI) |
Cu true, apelurile respectă schema în mod garantat, nu doar „cât se poate”. OpenAI recomandă să-l activezi mereu. |
tool_choice |
OpenAI: auto (implicit: zero, unul sau mai multe apeluri), required (cel puțin un apel) sau o funcție anume. |
Apeluri paralele |
Modelul poate cere mai multe apeluri într-un răspuns; la Anthropic, disable_parallel_tool_use le dezactivează. |
Exemple practice și scenarii reale
Exemplul 1: Un apel de funcție în Responses API (OpenAI)
Aplicația execută get_weather și trimite înapoi un element function_call_output cu același call_id.
{
"type": "function_call",
"id": "fc_1234xyz",
"call_id": "call_2345abc",
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
Exemplul 2: Trimiterea rezultatului înapoi (OpenAI, Python)
input_messages.append({
"type": "function_call_output",
"call_id": tool_call.call_id,
"output": json.dumps(result),
})
Greșeli frecvente și capcane
- Să execuți orbește argumentele generate. Validează-le ca pe orice input extern, mai ales la unelte care scriu, șterg sau trimit ceva.
- Să expui zeci de unelte deodată. OpenAI sugerează mai puțin de 20 de funcții disponibile la începutul unui tur și tool search pentru restul.
- Să ceri modelului argumente pe care le ai deja. Dacă știi
order_id, nu-l pune în schemă; transmite-l din cod (recomandare OpenAI).