Preskočiť na obsah
2.2Pokročilý7 min

Vzor ReAct: Thought, Action, Observation

Blck Alpaca·
Definition

Vzor ReAct (Reasoning and Acting) je návrhový vzor agentov, pri ktorom LLM strieda uvažovanie (Thought), volanie nástroja (Action) a čítanie výsledku (Observation). Tento loop sa opakuje, kým agent nevydá finálnu odpoveď. Predstavili ho Yao et al. (2022).

Key Takeaways

  • ReAct prepletá verbálny reasoning (Thought) s volaniami nástrojov (Action) a ich výsledkami (Observation) v jedinom kontexte - zaviedli ho Yao et al. (arXiv:2210.03629, október 2022, ICLR 2023).
  • Jadrovou silou je kombinácia využitia nástrojov a transparentnosti: úplný Thought/Action/Observation-trace je sledovateľný a tým auditovateľný pre audit a DACH-compliance (DSGVO, EU AI Act).
  • Typickými chybovými režimami sú nekonečné loopy, reasoning drift (zotrvanie na nesprávnom predpoklade) a halucinovanie argumentov nástrojov - najmä pri slabších modeloch.
  • Najdôležitejším protiopatrením sú tvrdé limity iterácií (recursion_limit / max_iterations) a function-calling namiesto voľnotextových JSON-argumentov.
  • Praktická horná hranica leží väčšinou pri 10-25 krokoch, kým začne dominovať strata kontextu a reasoning drift; ReAct je sekvenčný a tým viazaný na latenciu.
  • Odporúčanie z praxe (Anthropic, Cognition): začať s najjednoduchším vzorom - väčšinou ReAct - a eskalovať až vtedy, keď to vynútia namerané chybové režimy.

Vzor ReAct (Reasoning and Acting) je návrhový vzor agentov, pri ktorom LLM strieda uvažovanie (Thought), volanie nástroja (Action) a spätné čítanie výsledku (Observation). Tento loop sa opakuje, kým agent nevydá finálnu odpoveď. Predstavili ho Yao et al. (arXiv:2210.03629, október 2022, ICLR 2023). Reasoning riadi výber nástroja a pozorovania nástrojov korigujú reasoning.

  • Čo to je: Loop z Thought, Action a Observation, v ktorom LLM prepletá myslenie a konanie a využíva nástroje v rovnakom kontexte.
  • Na čo je to dobré: Úlohy podporované nástrojmi, fakticky uzemnené, s nízkou latenciou a úplne sledovateľným priebehom - štandardný východiskový bod pre agentové projekty.
  • Na čo si dať pozor: Nekonečné loopy, reasoning drift a halucinované argumenty nástrojov; zachytávateľné tvrdými limitmi iterácií a function-callingom.

Odkiaľ ReAct pochádza a aký problém rieši

ReAct vznikol ako odpoveď na dve protichodné slabiny skorších prístupov. Čistý Chain-of-Thought (CoT) uvažuje výlučne interne a preto halucinuje fakty, pretože mu chýba akékoľvek uzemnenie vo vonkajšom svete. Čistí action-agenti - napríklad skoré WebGPT- alebo SayCan-prístupy - naopak nevedia abstraktne premýšľať o dlhodobých cieľoch ani sa zotaviť z výnimiek.

ReAct spája oboje: verbálny reasoning stojí v rovnakom kontexte ako akcie. Tým LLM získava pracovnú pamäť o celej trajektórii - a agent sa stáva interpretovateľným. Formálne ReAct rozširuje akčný priestor: okrem externých akcií, ktoré spúšťajú skutočné pozorovania, existujú jazykové „akcie" (Thoughts), ktoré nič nemenia v prostredí, ale len posúvajú interný kontext agenta. Pozoruhodné: vzor funguje už s jedným až dvomi in-context príkladmi - bez fine-tuningu.

Loop detailne: Thought, Action, Observation

Kanonický priebeh znie: User Query → [LLM: Thought] → [LLM: Action] → [Prostredie: Observation] → [LLM: Thought] → … → Finish[odpoveď]. Tieto tri kroky do seba zapadajú nasledovne.

Krok

Význam

Kto ho generuje

Thought

Voľnotextový reasoning: agent uvažuje, čo musí spraviť ako ďalšie a prečo. Aktualizuje len interný kontext, nie prostredie.

LLM

Action

Konkrétne volanie nástroja s argumentmi (napr. vyhľadávanie, API-call, dotaz do databázy) alebo Finish[odpoveď] na ukončenie.

LLM

Observation

Výsledok akcie, ktorý vracia prostredie (výsledky vyhľadávania, odpoveď API, chybová správa). Vteká do nasledujúceho Thought.

Prostredie / nástroj

Tento cyklus beží tak dlho, kým model neemituje Action: Finish[odpoveď]. Praktická horná hranica leží väčšinou pri 10-25 krokoch, kým prevezme vrch strata kontextu alebo reasoning drift.

Pseudokód ReAct-loopu

```text
context = system_prompt + tool_descriptions + user_query
krok = 0
MAX_KROKOV = 15 # tvrdý limit proti nekonečným loopom

while krok < MAX_KROKOV:
vystup = LLM(context) # generuje Thought + Action

if vystup.action == "Finish":
return vystup.action.argument # finálna odpoveď

observation = vykonaj_tool(vystup.action) # externý call
context = context + vystup.thought

            • vystup.action
            • observation # pripojenie pozorovania
              krok += 1

return "Limit dosiahnutý - riešenie sa nenašlo." # čisté prerušenie
```

Kľúčový bod: v každej iterácii sa celý doterajší priebeh znova posiela do LLM. To je zdroj sily (úplná pamäť) aj najdôležitejšej slabiny (náklady).

Silné stránky a hranice z výskumu

Pôvodný paper dokladá výhody ReActu na viacerých benchmarkoch - dôležité: čísla pochádzajú z podmienok 2022/2023 (trieda GPT-3 a PaLM) a treba ich čítať ako relatívne hodnoty, nie ako dnešné absolútne hodnoty.

  • ALFWorld (textové domáce úlohy): +34 absolútnych percentuálnych bodov oproti imitation-/RL-baselinom, s jedným až dvomi príkladmi.
  • WebShop (navigácia v e-commerce): +10 absolútnych percentuálnych bodov úspešnosti oproti IL/IL+RL.
  • HotpotQA a Fever: konkurencieschopné až lepšie než čistý CoT, respektíve čistá generácia akcií; najsilnejšou konfiguráciou je hybrid, ktorý prepína medzi interným vedomím a reasoningom podporeným nástrojmi.

Na strane nákladov je ReAct drahý a pomalý. Tokenová náročnosť rastie s O(N · T): N krokov krát kumulovaná dĺžka kontextu - každý krok znova platí prefix (system-prompt, popisy nástrojov, celý priebeh). Latencia je striktne sekvenčná, teda približne N × (čas odpovede LLM + čas odpovede nástroja). Práve toto opakovanie prefixu je slabina, ktorú nasledujúci vzor ReWOO adresuje len dvomi volaniami LLM.

Chybové režimy a protiopatrenia

Tri chybové režimy sa v praxi vyskytujú obzvlášť často:

  • Nekonečné loopy: Bez tvrdého obmedzenia krokov môže agent donekonečna uvažovať v kruhu. Protiopatrenie: explicitné limity - recursion_limit v LangGraph, max_iterations v AutoGen, max_reasoning_attempts v CrewAI. LangGraphov create_react_agent ponúka kanál remaining_steps a preruší sa s upozornením, keď zostávajú menej než dva kroky.
  • Reasoning drift / šírenie chýb: Ak sa model upevnil na nesprávny Thought, interpretuje následné Observations tak, aby k nemu pasovali. Protiopatrenie: kratšie trajektórie, priebežná validácia a - pri overiteľných úlohách - externý reflexný/kontrolný signál (most k vzoru Reflexion).
  • Halucinované argumenty nástrojov a halucinované pozorovania: Pri nejednoznačných popisoch nástrojov si model vymýšľa argumenty; slabšie modely si občas „fantazírujú" aj pozorovania, namiesto toho aby počkali na skutočný výsledok nástroja. Chybne sformované JSON-argumenty nástrojov sú podľa výskumu najčastejšou produkčnou chybou na slabších modeloch. Protiopatrenie: používať štruktúrovaný výstup, respektíve function-calling-režim, kedykoľvek ho poskytovateľ podporuje, a popisy nástrojov formulovať presne.

K tomu pristupuje už spomenuté nafukovanie kontextu: každý krok znova posiela úplný priebeh.

Konkrétny príklad: výskumný agent pre marketingovú agentúru

Predpokladajme, že agentúra stavia agenta, ktorý zisťuje aktuálny počet zamestnancov klientskej firmy. Loop by mohol prebehnúť takto:

  1. Thought: „Nepoznám aktuálne číslo a musím ho dohľadať." → Action: Vyhladaj["počet zamestnancov firma X 2026"]Observation: zásah s tlačovou správou.
  2. Thought: „Správa uvádza rozpätie, potrebujem presné číslo." → Action: Otvor[URL tlačovej správy]Observation: plný text s „približne 1.200 zamestnancov".
  3. Thought: „To odpovedá na otázku." → Action: Finish["cca. 1.200 zamestnancov, stav 2026"].

Tri kroky, tri volania LLM, úplne zaprotokolovaný priebeh. Ak nastavíte MAX_KROKOV = 15, agent je zabezpečený proti nekonečným loopom - ak nič nenájde, čisto sa preruší, namiesto toho aby pálil tokeny. Práve tento sledovateľný priebeh je pre marketingové tímy bez vývojárskeho pozadia reálnou výhodou: napríklad v n8n zobrazuje pohľad na vykonanie každý Thought/Action/Observation-krok ako auditovateľný log.

Frameworky a odporúčania z praxe (stav 2026)

ReAct je natívne dostupný vo všetkých bežných stackoch: LangGraph (create_react_agent), CrewAI (každý agent je interne ReAct-agent), AutoGen, respektíve Microsoft Agent Framework (AutoGen je stav 2026 v maintenance-režime; Microsoft odkazuje nové projekty na Agent Framework) a n8n (ReAct AI Agent, ako aj novší Tools Agent odporúčaný pre moderné function-calling modely). Pri LangChaine sa create_react_agent stav 2026 presúva z langgraph.prebuilt do langchain.agents.create_agent s middleware-dekorátormi.

Najdôležitejšie poznanie z praxe pochádza od Anthropic („Building Effective Agents", december 2024) a Cognition: Začať s najjednoduchším vzorom - väčšinou ReAct - a eskalovať až vtedy, keď to vynútia namerané chybové režimy. Moderné frontier modely ovládajú reasoning-action-loop natívne cez function-calling; explicitný ReAct-prompting je často zbytočný. Rozhodujúce sú potom pamäť, horné hranice iterácií a tracing. Observability-nástroje (LangSmith, Arize Phoenix, Langfuse) sa fakticky považujú za povinnosť - pre DACH-compliance (DSGVO, EU AI Act) sa musí úplný trace persistovať a očistiť od PII.

Pre agentúry a B2B-rozhodovateľov

ReAct je pragmatický vstup takmer pre každý agentový projekt: zákaznícke chatboty s napojením na CRM a vedomostnú databázu, support-triage alebo výskumné tasky. Je lacný na začatie, má nízku latenciu a je úplne auditovateľný - tri vlastnosti, ktoré v DACH-B2B-prostredí rozhodujú. Nastavte od začiatku tvrdé limity iterácií, používajte function-calling namiesto voľnotextových argumentov a persistujte trace pre audit a debugging. Ak ako agentúra chcete navrhnúť agenta alebo dať preveriť stabilitu existujúceho workflowu, kontaktujte nás - sprevádzame výber, architektúru a compliance-konformnú realizáciu.

Často kladené otázky

Čo znamená ReAct?
ReAct znamená Reasoning and Acting. LLM prepletá voľnotextový reasoning (Thought) s volaniami nástrojov (Action) a číta späť ich výsledky (Observation). Tieto tri kroky tvoria loop, ktorý beží, kým agent nevydá finálnu odpoveď. Vzor zaviedli Yao et al. v roku 2022.
V čom sa ReAct líši od Chain-of-Thought (CoT)?
Chain-of-Thought uvažuje čisto interne, bez prístupu k vonkajšiemu svetu, a preto môže halucinovať fakty. ReAct uzemňuje reasoning prostredníctvom skutočných pozorovaní nástrojov: reasoning riadi výber nástroja a výsledky nástroja zase korigujú reasoning. ReAct tým spája abstraktné uvažovanie s faktickým uzemnením.
Aké sú najčastejšie chybové režimy vzoru ReAct?
Najčastejšími problémami sú nekonečné loopy bez tvrdého obmedzenia krokov, reasoning drift (agent zotrváva na nesprávnom predpoklade a interpretuje neskoršie pozorovania tak, aby k nemu pasovali), halucinované argumenty nástrojov pri nejednoznačných popisoch nástrojov, ako aj nafukovanie kontextu, keďže každý krok znova posiela celý doterajší priebeh.
Ako sa zabráni nekonečným loopom pri ReAct-agentoch?
Prostredníctvom tvrdých limitov iterácií: v LangGraph sa nastavuje recursion_limit, v AutoGen a CrewAI max_iterations, respektíve max_reasoning_attempts. LangGraphov create_react_agent poskytuje kanál remaining_steps a preruší sa, keď zostáva príliš málo krokov. Každý produkčný agent by mal mať explicitný limit.
V ktorých frameworkoch je ReAct dostupný?
ReAct je natívne dostupný v LangGraph (create_react_agent), CrewAI (každý agent je interne ReAct-agent), AutoGen, respektíve Microsoft Agent Framework, ako aj v n8n (ReAct AI Agent a novší Tools Agent). Stav 2026: LangChainov create_react_agent sa presúva z langgraph.prebuilt do langchain.agents.create_agent.
Je explicitný ReAct-prompting s modernými modelmi ešte potrebný?
Väčšinou nie. Aktuálne frontier modely s natívnym function-callingom ovládajú reasoning-action-loop už od základu. Podľa správ z praxe potom nie sú rozhodujúce ReAct-prompty, ale pamäť, horné hranice iterácií a sledovateľnosť (tracing).

Ísť hlbšie?

Získajte nové analýzy priamo do schránky – alebo sa pozrite, ako tieto poznatky nasadzujeme pre firmy.