Ce este Tool Calling (Function Calling)?

Mecanismul prin care modelul cere apelarea unei funcții definite de tine, cu argumente JSON, iar aplicația execută funcția și îi trimite rezultatul.

Denumire completă

Tool Calling – modelul primește definiții de unelte (nume, descriere, schemă JSON) și întoarce un apel structurat pe care aplicația îl execută

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).

Noțiuni și module înrudite