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). Táto slučka sa opakuje, kým agent nevydá finálnu odpoveď. Predstavili ho Yao et al. (2022).
Na prvý pohľad
- ReAct prepája verbálne uvažovanie (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).
- Hlavnou silnou stránkou je kombinácia využívania nástrojov a transparentnosti: úplný trace Thought/Action/Observation je sledovateľný a uľahčuje debugging aj preukazovanie súladu, napríklad s GDPR.
- Typickými druhmi zlyhaní sú nekonečné slučky, reasoning drift (zotrvávanie na nesprávnom predpoklade) a halucinovanie argumentov nástrojov, najmä pri slabších modeloch.
- Najdôležitejšie protiopatrenie: tvrdé limity iterácií (napríklad recursion_limit v LangGraph, max_iter v CrewAI) a function calling namiesto JSON argumentov vo voľnom texte.
- Praktická horná hranica je väčšinou 10-25 krokov, potom začne prevládať strata kontextu a reasoning drift; ReAct je sekvenčný, a preto obmedzený latenciou.
- Odporúčanie z praxe (Anthropic, Cognition): začať s najjednoduchším vzorom, väčšinou s ReAct, a eskalovať až vtedy, keď si to vynútia namerané zlyhania.
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). Táto slučka sa opakuje, kým agent nevydá finálnu odpoveď. Predstavili ho Yao et al. (arXiv:2210.03629, október 2022, ICLR 2023). Uvažovanie riadi výber nástroja a pozorovania z nástrojov uvažovanie korigujú.
- Čo to je: Slučka z krokov Thought, Action a Observation, v ktorej LLM prepája myslenie a konanie a využíva nástroje v tom istom kontexte.
- Na čo je dobrý: Úlohy podporené nástrojmi a ukotvené vo faktoch, s úplne sledovateľným priebehom. ReAct je štandardný východiskový bod pre projekty s agentmi.
- Na čo si dať pozor: Nekonečné slučky, reasoning drift a halucinované argumenty nástrojov; zachytíš ich 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: chýba mu akékoľvek ukotvenie vo vonkajšom svete. Agenti založení čisto na akciách, napríklad skoré prístupy WebGPT alebo SayCan, naopak nedokážu abstraktne uvažovať o dlhodobých cieľoch ani sa zotaviť z výnimiek.
ReAct spája oboje: verbálne uvažovanie je v tom istom kontexte ako akcie. LLM tak získa pracovnú pamäť pre celú trajektóriu a agent sa stane interpretovateľným. Formálne ReAct rozširuje priestor akcií: okrem externých akcií, ktoré vyvolávajú skutočné pozorovania, existujú jazykové „akcie“ (Thoughts), ktoré v prostredí nič nemenia, iba dopĺňajú interný kontext agenta. Pozoruhodné je, že vzor funguje už s jedným až dvoma príkladmi v kontexte (in-context), bez fine-tuningu.
Slučka podrobne: Thought, Action, Observation
Kanonický priebeh: User Query → [LLM: Thought] → [LLM: Action] → [Prostredie: Observation] → [LLM: Thought] → … → Finish[odpoveď]. Tri kroky do seba zapadajú takto:
Krok | Význam | Kto ho vytvára |
|---|---|---|
Thought | Uvažovanie vo voľnom texte: agent zvažuje, čo musí urobiť ďalej a prečo. Aktualizuje iba interný kontext, nie prostredie. | LLM |
Action | Konkrétne volanie nástroja s argumentmi (napr. vyhľadávanie, volanie API, databázový dopyt) alebo | LLM |
Observation | Výsledok akcie, ktorý vráti prostredie (výsledky vyhľadávania, odpoveď API, chybové hlásenie). Vstupuje do ďalšieho Thought. | Prostredie / nástroj |
Tento cyklus beží, kým model nevygeneruje Action: Finish[odpoveď]. Praktická horná hranica je väčšinou 10-25 krokov, potom prevládne strata kontextu alebo reasoning drift.
Pseudokód slučky ReAct
context = systemPrompt + toolDescriptions + userQuerykrok = 0MAX_KROKOV = 15 # tvrdý limit proti nekonečným slučkámwhile krok < MAX_KROKOV:-
vystup = LLM(context) # vytvorí Thought + Action -
if vystup.action == "Finish": -
return vystup.action.argument # finálna odpoveď -
observation = vykonajNastroj(vystup.action) # externé volanie -
context = context + vystup.thought + vystup.action + observation # pripojenie pozorovania -
krok += 1 return "Limit dosiahnutý, riešenie sa nenašlo." # riadené ukončenie
Kľúčový bod: v každej iterácii sa celý doterajší priebeh posiela do LLM znova. To je zdroj silnej stránky (úplná pamäť) aj hlavnej slabiny (náklady).
Silné stránky a hranice podľa výskumu
Pôvodná štúdia preukazuje výhody ReAct na viacerých benchmarkoch. Dôležité: čísla pochádzajú z podmienok rokov 2022/2023 (modely triedy GPT-3 a PaLM) a treba ich čítať ako relatívne hodnoty, nie ako dnešné absolútne hodnoty.
- ALFWorld (textové úlohy v domácnosti): +34 absolútnych percentuálnych bodov oproti referenčným metódam založeným na imitačnom učení alebo RL, s jedným až dvoma príkladmi.
- WebShop (navigácia v e-shope): +10 absolútnych percentuálnych bodov úspešnosti oproti IL/IL+RL.
- HotpotQA a Fever: konkurencieschopné až lepšie ako čistý CoT, resp. čisté generovanie akcií; najsilnejšou konfiguráciou je hybrid, ktorý prepína medzi internými znalosťami modelu a uvažovaním podporeným nástrojmi.
Z hľadiska nákladov je ReAct drahý a pomalý. Spotreba tokenov rastie ako O(N · T): N krokov krát kumulovaná dĺžka kontextu, pretože každý krok znova platí za prefix (systémový 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ú nástupnícky vzor ReWOO rieši iba dvoma volaniami LLM.
Druhy zlyhaní a protiopatrenia
Tri druhy zlyhaní sa v praxi vyskytujú obzvlášť často:
- Nekonečné slučky: Bez tvrdého obmedzenia počtu krokov môže agent donekonečna uvažovať v kruhu. Protiopatrenie: explicitné limity, napríklad
recursion_limitv LangGraph,max_tool_iterationspri AssistantAgent v AutoGen (alternatívne podmienka ukončenia ako MaxMessageTermination),max_iterv CrewAI. V LangGraph poskytujecreate_react_agentkanálremaining_stepsa ukončí beh s upozornením, keď zostáva menej ako dva kroky. - Reasoning drift / šírenie chýb: Keď sa model upne na nesprávny Thought, interpretuje nasledujúce Observations tak, aby s ním boli v súlade. Protiopatrenie: kratšie trajektórie, priebežná validácia a pri overiteľných úlohách externý reflexný alebo kontrolný signál (prepojenie na vzor Reflexion).
- Halucinované argumenty nástrojov a halucinované pozorovania: Pri nejednoznačných popisoch nástrojov si model argumenty vymýšľa; slabšie modely si občas „domyslia“ 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 pri slabších modeloch. Protiopatrenie: používať štruktúrovaný výstup, resp. režim function calling, kedykoľvek ho poskytovateľ podporuje, a formulovať popisy nástrojov presne.
K tomu sa pridáva už spomínané nafukovanie kontextu: každý krok znova posiela celý priebeh.
Konkrétny príklad: rešeršný agent pre marketingovú agentúru
Predpokladajme, že agentúra stavia agenta, ktorý zisťuje aktuálny počet zamestnancov klientskej firmy. Slučka by mohla prebehnúť takto:
- Thought: „Aktuálne číslo nepoznám a musím ho vyhľadať.“ → Action:
Vyhľadaj["počet zamestnancov firma X 2026"]→ Observation: výsledok 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 údajom „približne 1 200 zamestnancov“. - Thought: „Tým je otázka zodpovedaná.“ → Action:
Finish["cca 1 200 zamestnancov, stav 2026"].
Tri kroky, tri volania LLM, úplne zaznamenaný priebeh. Ak nastavíš MAX_KROKOV = 15, agent je chránený pred nekonečnými slučkami. Ak nič nenájde, korektne skončí namiesto toho, aby zbytočne míňal tokeny. Práve tento sledovateľný priebeh je pre marketingové tímy bez vývojárskeho zázemia skutočnou výhodou: napríklad v n8n zobrazí detail vykonania každé volanie LLM a nástroja 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, resp. Microsoft Agent Framework (AutoGen je k roku 2026 v režime údržby; Microsoft odkazuje nové projekty na Agent Framework) a n8n. Tam uzol AI Agent od verzie n8n 1.82.0 realizuje slučku uvažovania a akcií ako Tools Agent cez natívny function calling; výber samostatného typu agenta ReAct bol zrušený. V LangChain sa create_react_agent k roku 2026 presúva z langgraph.prebuilt do langchain.agents.create_agent s middleware dekorátormi.
Najdôležitejší poznatok z praxe pochádza od spoločností Anthropic („Building Effective Agents“, december 2024) a Cognition: začať s najjednoduchším vzorom, väčšinou s ReAct, a eskalovať až vtedy, keď si to vynútia namerané zlyhania. Moderné špičkové modely ovládajú slučku uvažovania a akcií natívne cez function calling; explicitný ReAct prompting je často zbytočný. Rozhodujúce sú potom pamäť, horné hranice iterácií a tracing. Nástroje na observability (LangSmith, Arize Phoenix, Langfuse) v produkcii prakticky patria k základu. Automatické zaznamenávanie udalostí predpisuje EU AI Act pre vysokorizikové systémy AI (čl. 12 AI Act), typickí marketingoví a rešeršní agenti však pod ne spravidla nespadajú. Trvalo uložený trace sa napriek tomu oplatí pre debugging a sledovateľnosť. Ak obsahuje osobné údaje, platí minimalizácia údajov a minimalizácia uchovávania podľa čl. 5 GDPR: odstrániť PII a stanoviť lehotu na vymazanie.
Pre agentúry a manažérov v B2B
ReAct je pragmatický začiatok pre takmer každý projekt s agentmi: zákaznícke chatboty napojené na CRM a znalostnú databázu, triedenie požiadaviek podpory alebo rešeršné úlohy. Rýchlo ho nastavíš a je úplne auditovateľný. V B2B prostredí regiónu DACH záleží na oboch. Náklady a latencia však rastú s každým krokom. Preto od začiatku nastav tvrdé limity iterácií, používaj function calling namiesto argumentov vo voľnom texte a ukladaj trace pre audit a debugging. Ak ako agentúra chceš navrhnúť agenta alebo dať preveriť stabilitu existujúceho workflowu, ozvi sa nám. Pomôžeme ti s výberom, architektúrou a realizáciou v súlade s predpismi.
Otvorí chat s pripraveným promptom.
Často kladené otázky
Čo znamená ReAct?
V čom sa ReAct líši od Chain-of-Thought (CoT)?
Aké sú najčastejšie druhy zlyhaní vzoru ReAct?
Ako zabrániť nekonečným slučkám pri ReAct agentoch?
V ktorých frameworkoch je ReAct dostupný?
Je explicitný ReAct prompting pri moderných modeloch ešte potrebný?
Ísť hlbšie?
Získajte nové analýzy priamo do schránky, alebo sa pozrite, ako tieto poznatky nasadzujeme pre firmy.