Anatomia unui agent: model, tool-uri, memorie

Subiect din roadmap-ul AI Agents și LLM în producție · parte din „Introducere în agenți AI”

Înțelegerea anatomiei unui agent AI este fundamentală pentru orice inginer care dorește să construiască sisteme robuste, deoarece un agent nu este doar un chatbot, ci o entitate autonomă capabilă să planifice și să execute acțiuni. În practică, separarea clară a modelului, a instrumentelor și a memoriei permite scalabilitatea și depanarea eficientă a aplicațiilor complexe. Fără această structură modulară, devine aproape imposibil să controlezi comportamentul agentului sau să gestionezi contextul în conversații lungi.

Concepte cheie

  • Modelul de limbaj (LLM): Este "creierul" agentului, responsabil pentru raționament, generare de text și luarea deciziilor logice, dar nu are acces nativ la date externe sau funcții.
  • Tool-uri (Instrumente): Funcții externe (API-uri, baze de date, calculatoare) pe care agentul le poate invoca pentru a obține informații actualizate sau a executa acțiuni concrete în lumea reală.
  • Memorie pe termen scurt: Stocarea conversației curente (istoricul mesajelor) pentru a menține coerența dialogului în cadrul unei sesiuni active.
  • Memorie pe termen lung: Mecanisme de persistență (vector databases, SQLite) care permit agentului să își amintească preferințele utilizatorului sau fapte importante între sesiuni diferite.
  • Planificare (Planning): Capacitatea agentului de a descompune o cerere complexă în pași mai mici, secvențiali sau paraleli, înainte de a executa fiecare pas individual.
  • Orchestrator: Componenta software care coordonează fluxul dintre model, memorie și tool-uri, gestionând buclele de reflecție și corectare a erorilor.

Exemplu practic

Să presupunem că vrem un agent care să ne spună vremea și să ne sugereze ce să purtăm. Anatomia arată astfel:

  1. Modelul: Primește promptul "Ce vreme e în București și ce haine să pun?".
  2. Memorie: Salvează că acest utilizator locuiește în București (dacă nu era deja cunoscut).
  3. Tool: Agentul identifică nevoia de date externe și apelează funcția get_weather(city="București").
  4. Răspuns final: Modelul primește rezultatul JSON de la API și generează un răspuns natural: "În București sunt 20°C și însorit. Poți purta o cămașă ușoară."
# Pseudocod simplificat pentru orchestrare
def run_agent(user_query):
    context = load_short_term_memory() # Istoric conversație
    tools = [get_weather, calculate_tip] # Instrumente disponibile
    
    # LLM decide ce tool să folosească
    action = llm.decide_action(user_query, context, tools)
    
    if action.type == "tool_call":
        result = action.tool.execute(**action.params)
        context.append({"role": "tool_output", "content": result})
        
    return llm.generate_final_response(context)

Greșeli frecvente

  • Ignorarea limitelor de context: Trimiterea tuturor datelor istorice la fiecare apel LLM duce la costuri mari și erori de "lost in the middle".
  • Tool-uri prea generice: Definirea unor instrumente vagi (ex: search_web) fără parametri stricti face ca modelul să ezite sau să facă apeluri inutile.
  • Memorie neconsolidată: Salvarea brută a tuturor mesajelor fără extragerea faptelor cheie duce la o memorie ineficientă și costisitoare.
  • Lipsa verificării erorilor: Dacă un tool eșuează (ex: API down), agentul trebuie să aibă un mecanism de fallback sau să informeze utilizatorul, nu să se blocheze.

Întrebări de interviu

1. Cum diferențiezi între un chatbot tradițional și un agent AI? Un chatbot răspunde bazat pe antrenament sau RAG static, în timp ce un agent are capacitatea de a interacționa cu mediul extern prin tool-uri și de a-și modifica starea internă (memorie) pentru a atinge un obiectiv autonom.

2. De ce este importantă separarea memoriei de model? Separarea permite reutilizarea modelului (care este costisitor) cu diverse tipuri de memorie (pe termen scurt/lung) și facilitează actualizarea datelor utilizatorului fără a reantrena modelul.

3. Ce se întâmplă dacă un tool returnează o eroare? Orchestratorul trebuie să intercepteze eroarea, să o transmită înapoi modelului ca input și să îl instruiască să încerce o altă abordare sau să informeze utilizatorul despre problemă.

Exercițiu

Construiește un prototip simplu folosind un framework precum LangChain sau LlamaIndex. Creează un agent care:

  1. Are acces la un tool simplu de calcul matematic (sau un API public gratuit).
  2. Folosește o memorie pe termen scurt pentru a ține minte ultimile 3 întrebări.
  3. Testează cazul în care tool-ul returnează o valoare neașteptată și observă cum reacționează modelul. Documentează pașii de debug.

Resurse gratuite

Alte subiecte din „Introducere în agenți AI”