Tool calling (apelarea uneltelor) în Ollama în Ollama CLI & Ghid Local

Funcții și Integrare API Ollama 0.40 (octombrie 2026)

Modelul poate cere apelarea unor funcții definite de tine, iar aplicația îi trimite înapoi rezultatul pentru răspunsul final.

Sintaxă & invocare
POST /api/chat cu "tools": [...]

Ce face Tool calling (apelarea uneltelor) în Ollama

Tool calling (function calling) permite unui model să invoce unelte și să folosească rezultatele în răspuns. Trimiți în /api/chat câmpul tools, o listă de funcții descrise cu type: function, nume, descriere și o schemă JSON pentru parametri. Dacă modelul decide să folosească o unealtă, răspunsul conține message.tool_calls, cu numele funcției și argumentele.

Aplicația ta execută funcția și adaugă în messages mesajul asistentului cu tool_calls, apoi un mesaj cu role: tool, tool_name și rezultatul în content. A doua cerere produce răspunsul final. Documentația mai descrie apeluri paralele, bucle de agent cu mai multe ture și tool calling cu streaming.

Funcționează doar cu modele care suportă unelte (lista: ollama.com/search?c=tool). SDK-ul Python acceptă direct funcții Python ca unelte, iar /v1/chat/completions acceptă tools pentru clienții OpenAI (fără tool_choice).

Sintaxă și opțiuni

Opțiune / Parametru Descriere
tools Lista uneltelor, în cerere.
message.tool_calls Apelurile cerute de model, în răspuns (function.name, function.arguments).
role: tool Rolul mesajului cu rezultatul uneltei.
tool_name Numele uneltei al cărei rezultat îl trimiți.

Exemple practice

Exemplul 1: Cererea cu o unealtă

curl -s http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
  "model": "qwen3",
  "messages": [{"role": "user", "content": "What is the temperature in New York?"}],
  "stream": false,
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_temperature",
      "description": "Get the current temperature for a city",
      "parameters": {
        "type": "object",
        "required": ["city"],
        "properties": {"city": {"type": "string", "description": "The name of the city"}}
      }
    }
  }]
}'

Exemplul 2: Trimiterea rezultatului înapoi

curl -s http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
  "model": "qwen3",
  "messages": [
    {"role": "user", "content": "What is the temperature in New York?"},
    {"role": "assistant", "tool_calls": [{"type": "function", "function": {"index": 0, "name": "get_temperature", "arguments": {"city": "New York"}}}]},
    {"role": "tool", "tool_name": "get_temperature", "content": "22°C"}
  ],
  "stream": false
}'

Exemplul 3: Cu SDK-ul Python (funcția ca unealtă)

from ollama import chat

def get_temperature(city: str) -> str:
  """Get the current temperature for a city

  Args:
    city: The name of the city
  """
  return {"New York": "22°C"}.get(city, "Unknown")

messages = [{"role": "user", "content": "What is the temperature in New York?"}]
response = chat(model="qwen3", messages=messages, tools=[get_temperature])

messages.append(response.message)
if response.message.tool_calls:
  call = response.message.tool_calls[0]
  result = get_temperature(**call.function.arguments)
  messages.append({"role": "tool", "tool_name": call.function.name, "content": str(result)})
  final = chat(model="qwen3", messages=messages, tools=[get_temperature])
  print(final.message.content)

Greșeli frecvente și bune practici

  • Trimiți rezultatul uneltei fără mesajul asistentului care conține tool_calls. Modelul are nevoie de ambele în istoric.
  • Iei doar primul apel când modelul cere mai multe. Documentația spune că varianta cu primul apel este recomandată doar pentru modele care întorc un singur apel.
  • Folosești un model fără suport pentru unelte. Alege unul din lista de modele cu unelte de pe ollama.com.

Comenzi înrudite