Bucla agentului, cunoscută și sub numele de „Thought-Action-Observation” (TAO), reprezintă nucleul funcțional al agenților autonomi bazati pe LLM. Spre deosebire de chatbot-urile simple care generează un singur răspuns, un agent poate rula o secvență de pași iterativi pentru a rezolva probleme complexe. În practică, acest mecanism permite sistemului să planifice, să execute acțiuni (cum ar fi apelarea unei API-uri) și să interpreteze rezultatul înainte de a finaliza sarcina. Înțelegerea acestei bucle este esențială pentru a construi soluții robuste care nu se bazează doar pe norocul generării textului, ci pe logică structurată și verificare continuă.
Concepte cheie
- Raționament (Thought): Procesul intern prin care modelul analizează contextul actual și decide care este următorul pas logic necesar pentru a atinge obiectivul final.
- Acțiune (Action): Executarea unui instrument specific, cum ar fi un search engine, o bază de date SQL sau o API REST, pentru a colecta informații externe.
- Observație (Observation): Rezultatul brut returnat de instrumentul executat, care servește ca nou context de intrare pentru următoarea iterație a raționamentului.
- Finalizare (Finish): Starea în care agentul consideră că a acumulat suficiente informații și generează răspunsul final către utilizator.
- Instrumente (Tools): Funcțiile sau serviciile externe pe care agentul le poate invoca, definite printr-o schemă clară de input/output.
- Memorie de lucru: Contextul temporar care stochează istoricul acțiunilor și observațiilor anterioare pentru a menține coerența pe parcursul mai multor iterații.
- Controler (Orchestrator): Componenta software care gestionează ciclul TAO, asigurând trecerea fluidă dintre raționament, execuție și interpretare.
Exemplu practic
Să presupunem că un agent trebuie să găsească prețul actual al unui produs și să verifice stocul. Iată cum ar arăta o iterație simplificată a buclei:
- Thought: „Trebuie să găsesc ID-ul produsului după nume.”
- Action:
search_product(name="Laptop X") - Observation:
{"id": 123, "name": "Laptop X"} - Thought: „Am ID-ul. Acum trebuie să verific stocul folosind ID-ul 123.”
- Action:
get_stock(product_id=123) - Observation:
{"stock": 5} - Thought: „Am toate informațiile. Răspunsul final este că sunt 5 bucăti disponibile.”
- Finish:
return "Stoc disponibil: 5 bucăți"
Acest exemplu ilustrează cum agentul descompune o cerință complexă în pași mici, validând progresul la fiecare etapă.
Greșeli frecvente
- Bucle infinite: Agentul se blochează dacă nu are un număr maxim de iterații sau o condiție clară de terminare, epuizând token-urile.
- Ignorarea observațiilor: Modelul generează o acțiune fără a ține cont de eroarea sau rezultatul anterior, ducând la repetarea aceleiași greșeli.
- Definirea slabă a instrumentelor: Dacă descrierea tool-urilor este vagă, LLM-ul va apela parametrii incorect sau va refuza să le folosească.
- Context overload: Adăugarea prea multor istorice în prompt poate depăși capacitatea de context a modelului, degradând calitatea raționamentului.
Întrebări de interviu
Cum gestionezi erorile returnate de un tool în interiorul buclei agentului? Agentul trebuie să primească instrucțiuni clare de tratare a erorilor. De obicei, observația de eroare este reintrodusă în prompt, iar agentul este încurajat să ajusteze parametrii acțiunii sau să încerce un alt tool, până la atingerea limitei maxime de încercări.
Care este diferența dintre un agent și un pipeline tradițional? Un pipeline este liniar și determinist (pasul A duce la B), în timp ce un agent este iterativ și non-determinist, putând reveni la pași anteriori sau să ia decizii dinamice bazate pe observații neașteptate.
Exercițiu
Implementează o buclă simplă de raționament și acțiune în Python. Creează o funcție care primește o întrebare despre vreme. Folosește o funcție mock get_weather(city) care returnează un dicționar cu temperatura. Bucla trebuie să continue până când agentul decide că are suficientă informație pentru a răspunde, afișând fiecare pas (Thought, Action, Observation). Limită execuția la maxim 3 iterații pentru a preveni buclele infinite.