Crearea de Unelte Custom: Decoratorul @tool și BaseTool în CrewAI & Sisteme Multi-Agent

Cele două modalități de a oferi agenților CrewAI unelte proprii în Python: decoratorul rapid @tool pentru funcții simple și subclasa BaseTool cu Pydantic pentru unelte complexe.

Sintaxă & invocare Python
from crewai.tools import tool

@tool("Verificare Curs BNR")
def verifica_curs_bnr(moneda: str) -> str:
    """Returnează cursul oficial BNR pentru moneda specificată (ex: EUR, USD)."""
    # Logică apel API / DB
    return f"Cursul pentru {moneda.upper()} este 4.9765 RON."

Descriere & Utilizare

Un agent fără unelte se poate baza doar pe cunoștințele din antrenamentul modelului. Pentru a interacționa cu lumea exterioară (API-urile firmei, baza de date, calcule financiare), îi atașezi unelte în lista tools=[...] a clasei Agent sau a unui Task specific.

Cea mai rapidă metodă este decoratorul @tool("Nume Unealtă") din crewai.tools: decorezi o funcție Python cu adnotări de tip și un docstring explicativ, iar CrewAI o transformă automat într-o unealtă cu cache inteligent.

Pentru unelte avansate care au nevoie de stare internă, conexiuni refolosibile sau validare strictă cu mai mulți parametri, poți moșteni clasa BaseTool, definind args_schema: Type[BaseModel] și metoda _run().

Cum să o reții ușor

💡 Decoratorul @tool este ca un briceag elvețian pe care îl prinzi la centura agentului în două secunde, iar BaseTool este o trusă profesională cu instrucțiuni de siguranță gravate pe capac (args_schema).

Opțiuni și parametri tehnici

  • @tool("Titlu Unealtă"): numele uneltei și docstring-ul funcției sunt citite direct de LLM pentru a decide când să o apeleze.
  • cache_function: în CrewAI, rezultatele uneltelor sunt memorate în cache implicit (dacă un al doilea agent apelează aceeași unealtă cu aceiași parametri, primește răspunsul instantaneu fără apel redundant).
  • result_as_answer=True: forțează agentul să returneze direct rezultatul uneltei ca răspuns final al task-ului, fără ca LLM-ul să îl mai reformuleze.

Exemple practice și cazuri de utilizare

  • Atașarea uneltei doar pe o sarcină anume: Task(..., tools=[verifica_curs_bnr]) (astfel agentul nu o folosește din greșeală la alte sarcini).
  • Controlul cache-ului pe o unealtă: verifica_curs_bnr.cache_function = lambda args, result: "Eroare" not in result (nu salva în cache răspunsurile eșuate).
  • Subclasarea BaseTool cu Pydantic: definește class CautareInput(BaseModel): interogare: str = Field(..., description="...") și args_schema = CautareInput.

Sfaturi de configurare & capcane

Returnează întotdeauna un str concis și informativ din funcția decorată cu @tool, chiar și atunci când apare o excepție în `try/except` (ex: return f"Eroare API: {e}. Încearcă cu alt parametru.").

Comenzi și ghiduri înrudite

Învață AI • Comunitate & Q&A

Întrebări & Exemple practice: Crearea de Unelte Custom: Decoratorul @tool și BaseTool

Ai o întrebare despre Crearea de Unelte Custom: Decoratorul @tool și BaseTool sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!

🤖

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.

Comunitate AI Adaugă o întrebare sau distribuie un cod / prompt

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.