Vzor ReAct: Thought, Action, Observation
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 | 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_limitv LangGraph,max_iterationsv AutoGen,max_reasoning_attemptsv CrewAI. LangGraphovcreate_react_agentponúka kanálremaining_stepsa 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:
- 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. - 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". - 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?
V čom sa ReAct líši od Chain-of-Thought (CoT)?
Aké sú najčastejšie chybové režimy vzoru ReAct?
Ako sa zabráni nekonečným loopom pri ReAct-agentoch?
V ktorých frameworkoch je ReAct dostupný?
Je explicitný ReAct-prompting s modernými modelmi ešte potrebný?
Ísť hlbšie?
Získajte nové analýzy priamo do schránky – alebo sa pozrite, ako tieto poznatky nasadzujeme pre firmy.