Suportul Nativ de Tool Calling în Ollama în Ollama CLI & Ghid Local

Execuția de funcții externe și unelte Python direct prin modele open-source capabile (Llama 3.3, Qwen 2.5, Mistral) rulate local.

Sintaxă & invocare
ollama run /api/chat cu parametrul 'tools'

Până de curând, rularea agenților capabili de Tool Calling (Function Calling) necesita exclusiv modele comerciale găzduite în cloud (OpenAI, Anthropic). Introducerea suportului nativ pentru unelte în Ollama a adus această capabilitate direct pe stațiile locale de lucru, permițând construirea de agenți autonomi complet confidențiali.

Ollama expune un format compatibil 1:1 cu schema OpenAI: trimiteți o listă de funcții descrise în format JSON (`type: function`), iar modelul local (cum ar fi Qwen 2.5 sau Llama 3.3) evaluează cererea utilizatorului și returnează un apel structurat `tool_calls` cu argumentele parsate corect.

După ce aplicația dumneavoastră execută funcția locală (de exemplu, o interogare în baza de date SQL internă sau o citire de fișier), trimiteți rezultatul înapoi către Ollama cu rolul `tool`, iar modelul sintetizează răspunsul final în limbaj natural pentru utilizator.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
tools Array de obiecte JSON ce descriu funcțiile apelabile, parametrii necesari și tipurile de date.
tool_calls Structura returnată de model când decide să invoce una dintre uneltele disponibile.
Role: 'tool' Rolul de mesaj prin care rezultatul execuției locale este returnat modelului pentru sinteză.
Model Compatibility Modele optimizate special pentru funcții: `llama3.1`, `llama3.3`, `qwen2.5`, `mistral-nemo`.

Exemple practice și comenzi

Exemplul 1: Apel de Tool Calling în Python folosind biblioteca oficială ollama

Cum se definește o unealtă locală de calcul și se transmite către un model Llama local.

import ollama

def aduna(a: int, b: int) -> int:
    return a + b

# Definim schema funcției
unelte = [{
    'type': 'function',
    'function': {
        'name': 'aduna',
        'description': 'Adună două numere întregi',
        'parameters': {
            'type': 'object',
            'properties': {
                'a': {'type': 'integer', 'description': 'Primul număr'},
                'b': {'type': 'integer', 'description': 'Al doilea număr'}
            },
            'required': ['a', 'b']
        }
    }
}]

r = ollama.chat(
    model='qwen2.5:14b',
    messages=[{'role': 'user', 'content': 'Cât fac 1243 + 9876?'}],
    tools=unelte
)

print(r['message']['tool_calls'])
# Ieșire: [{'function': {'name': 'aduna', 'arguments': {'a': 1243, 'b': 9876}}}]

Rezultat & Impact

Modelul local returnează apelul de funcție precis fără a greși calculul matematic.

Greșeli frecvente și bune practici

  • Folosirea de modele vechi care nu au fost finisate pentru tool calling (de ex. Llama 2), ceea ce produce răspunsuri text halucinate în loc de apeluri structurate JSON.
  • Descrierea vagă a parametrilor în schemă, împiedicând modelul să înțeleagă când este oportun să apeleze unealta.

Ghiduri și noțiuni înrudite