Ce este Bucla ReAct a Agenților (Thought-Action-Observation)?

Tiparul din lucrarea ReAct (Yao et al., 2022) în care modelul alternează pași de raționament cu acțiuni asupra unui mediu extern și citește rezultatul fiecărei acțiuni.

Denumire completă

ReAct – Thought (raționament) → Action (unealtă) → Observation (rezultat), repetat până la răspuns sau la o limită de pași

ReAct (Yao et al., ICLR 2023) propune ca modelul să genereze, intercalat, urme de raționament (Thought) și acțiuni specifice sarcinii (Action). Mediul întoarce o observație (Observation), care intră în context înainte de pasul următor. Raționamentul ajută la urmărirea și actualizarea planului; acțiunile aduc informație din surse externe.

Pentru HotpotQA și FEVER, lucrarea a folosit un API Wikipedia simplu cu trei acțiuni: search[entity], lookup[string] și finish[answer], cu PaLM-540B promptat cu câteva exemple. Pe ALFWorld și WebShop, ReAct a depășit metode de imitation learning și reinforcement learning cu 34, respectiv 10 puncte procentuale absolute la rata de succes, cu doar unul sau două exemple în prompt.

Agenții actuali implementează aceeași buclă prin tool calling: modelul întoarce un apel de unealtă, aplicația îl execută și adaugă rezultatul în conversație. Bucla se oprește când modelul dă răspunsul final sau la o condiție de oprire (număr maxim de pași, buget). Pentru varianta de prompt, vezi și ReAct prompting.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
Thought Raționament în limbaj natural; nu modifică mediul.
Action Apel către mediu (în lucrare: search, lookup, finish; azi: orice unealtă).
Observation Rezultatul acțiunii, adăugat în context.
Condiție de oprire Acțiunea finală (finish[answer]) sau o limită de iterații stabilită de aplicație.
Act-only / CoT Variantele comparate în lucrare: doar acțiuni, respectiv doar raționament (chain-of-thought).

Exemple practice și scenarii reale

Exemplul 1: Traiectorie ReAct pe o întrebare cu doi pași

Format după lucrare; X și Y sunt substituenți.

Întrebare: În ce oraș s-a născut autorul romanului X?
Thought 1: Trebuie să aflu cine a scris romanul X.
Action 1: search[X (roman)]
Observation 1: X este un roman scris de Y...
Thought 2: Acum caut locul nașterii lui Y.
Action 2: search[Y]
Observation 2: Y s-a născut în ...
Thought 3: Am găsit răspunsul.
Action 3: finish[...]

Exemplul 2: Bucla în pseudocod, cu limită de pași

for pas in range(MAX_PASI):
    raspuns = llm(mesaje, tools=unelte)
    if not raspuns.apeluri_unelte:
        return raspuns.text              # răspuns final
    for apel in raspuns.apeluri_unelte:
        mesaje.append(executa(apel))     # observația
raise RuntimeError("limita de pași a fost atinsă")

Greșeli frecvente și capcane

  • Să nu pui limită de pași. Analiza erorilor din lucrarea ReAct include cazuri în care modelul repetă aceiași pași fără să-și revină; o limită și detectarea repetițiilor opresc consumul inutil.
  • Să tratezi observațiile ca instrucțiuni. Rezultatul unei unelte (o pagină web, un fișier) este date, nu comenzi; altfel deschizi ușa pentru prompt injection.
  • Să confunzi ReAct cu chain-of-thought. CoT raționează doar din cunoștințele modelului; pe HotpotQA și FEVER, ReAct a redus halucinațiile din CoT interogând Wikipedia.

Noțiuni și module înrudite