Robocikowo>ROBOCIKOWO
Agenci

ReAct

2022AktywnyAktualizacja: 5 maja 2026Opublikowany
Wzorzec promptowania, w którym LLM przeplata kroki rozumowania (Thought) z wywołaniami narzędzi (Action) i obserwacjami (Observation).
Kluczowa innowacja
Połączenie rozumowania w łańcuchu myśli (Chain-of-Thought) z wykonywaniem akcji (wywołań narzędzi) w jednym, przeplatanym strumieniu generowanym przez LLM — co umożliwia modelowi planowanie kroków, pobieranie informacji ze świata zewnętrznego i korygowanie planu na podstawie obserwacji.
Kategoria
Agenci
Poziom abstrakcji
Pattern
Poziom operacji
InferencjaOrkiestracjaŚrodowisko agentowe
Zastosowania
Agenci wyszukujący odpowiedzi w internecie (Perplexity, You.com, ChatGPT search)Multi-hop question answering z bazami wiedzy (HotpotQA, FEVER)Asystenci kodu wykonujący skrypty i czytający output (Cursor, GitHub Copilot Workspace)Agenci wykonujący zadania w przeglądarce (Browser Use, Anthropic Computer Use)Autonomiczni agenci badawczy (The AI Scientist, AutoGPT)Asystenci wykonujący wiele operacji w połączonych aplikacjach (LangChain Agent, OpenAI Assistants)Agenci robotyczni planujący sekwencję manipulacji (PaLM-E, RT-2 z language grounding)Workflow automation — agenci wywołujący API CRM, ERP, Slack (Zapier, n8n agents)

Jak działa

1. Konstrukcja promptu: instrukcja systemowa opisująca dostępne narzędzia (z nazwą, opisem i schematem argumentów) + kilka demonstracji w formacie ReAct (Thought/Action/Observation/Finish) + zapytanie użytkownika. 2. Pętla agenta: a. Model generuje token „Thought:" + rozumowanie po wszystkim, co dotychczas widział (zapytanie + historia akcji/obserwacji). b. Model generuje „Action:" + nazwę narzędzia i argumenty (zazwyczaj w formacie JSON lub function-call). c. Generacja jest zatrzymywana na separatorze (np. „Observation:"). Orkiestrator parsuje akcję, wykonuje narzędzie i wkleja wynik jako „Observation: <wynik>". d. Pętla wraca do (a) — model widzi nową obserwację i decyduje o kolejnym kroku. 3. Warunek stopu: model generuje „Action: Finish[<answer>]" lub przekroczy limit kroków (typowo 5–15). 4. Walidacja: orkiestrator może parsować odpowiedź końcową, sprawdzać format i ewentualnie wymusić ponowną iterację. 5. Wariant function calling: w nowoczesnych API (OpenAI, Anthropic) Action jest tokenem strukturalnym (function call), nie tekstem — model API zwraca obiekt, którego nie trzeba parsować z tekstu.

Rozwiązany problem

Czysty Chain-of-Thought halucynuje fakty, których nie ma w wagach modelu — szczególnie na zadaniach wymagających aktualnej wiedzy lub multi-hop reasoning. Czyste tool-using LLM bez jawnego rozumowania wybiera akcje impulsywnie, bez planu, i nie potrafi się skorygować po nieoczekiwanej obserwacji. ReAct adresuje oba problemy jednocześnie: rozumowanie zapewnia plan i kontekst, akcje weryfikują fakty w świecie, obserwacje korygują plan.

Komponenty

Thought (krok rozumowania)Planowanie i kontrola pętli agenta

Token w języku naturalnym poprzedzający akcję; służy do planowania, dekompozycji problemu, oceny obserwacji i decyzji o kolejnym kroku. Mechanicznie jest to fragment Chain-of-Thought reasoning generowany w pętli agenta.

OUTTekst w języku naturalnym, kończący się tokenem oddzielającym (np. nową linią + 'Action:').
Action (wywołanie narzędzia)Interakcja ze światem zewnętrznym

Token zawierający nazwę narzędzia i jego argumenty. W oryginalnym ReAct format tekstowy: 'Action: search[Apple Remote]'. W nowoczesnych implementacjach format strukturalny (function call JSON). Specjalna akcja 'Finish[<answer>]' kończy pętlę.

Tekstowy format ReAct'Action: tool_name[args]' — oryginalna forma z papera Yao i in.
JSON function callStrukturalny obiekt {name, arguments}, używany w OpenAI/Anthropic API.
MCP (Model Context Protocol)Standard Anthropic dla integracji narzędzi z agentami; akcje są wywołaniami serwera MCP.

Oficjalna

Observation (wynik narzędzia)Aktualizacja stanu rozumowania faktami ze świata

Wynik wykonania akcji wstrzyknięty z powrotem do kontekstu modelu. Może być fragmentem strony Wikipedia, wynikiem zapytania SQL, JSON-em z API, treścią pliku itp. Format zależy od narzędzia.

INTekst (lub JSON serializowany do tekstu), wstawiany w kontekst po tokenie 'Observation:'.
Orkiestrator pętli (agent executor)Wykonywanie pętli Thought→Action→Observation

Komponent zewnętrzny względem LLM, który: (1) parsuje wygenerowane Action, (2) wywołuje fizyczne narzędzia, (3) wstrzykuje Observation do kontekstu, (4) wykrywa Finish lub limit kroków. Implementowany przez frameworki: LangChain AgentExecutor, LlamaIndex ReActAgent, OpenAI Assistants Runner.

Oficjalna

Zbiór dostępnych narzędziDefiniuje, co agent może zrobić w świecie

Zdefiniowana z góry przestrzeń akcji: lista narzędzi z opisem i schematem argumentów. W oryginalnym ReAct dla HotpotQA: search[entity], lookup[keyword], finish[answer]. W nowoczesnych agentach: dziesiątki/setki narzędzi z function calling.

Oficjalna

Implementacja

Pułapki implementacyjne
Nieskończone pętle i niemożność zakończeniaKrytyczna

Bez twardego limitu kroków agent może wywoływać narzędzia w nieskończoność (np. powtarzać tę samą akcję, oczekując innego wyniku). To jeden z najczęstszych trybów awarii ReAct.

Rozwiązanie:Zawsze definiuj max_steps (typowo 10–30). Dodaj detekcję powtarzających się akcji i wymuszenie Finish.
Halucynacje wyników narzędzi (hallucinated observations)Wysoka

Model może generować fragment Observation jako część własnej generacji zamiast czekać na rzeczywisty wynik. Skutkiem są decyzje oparte na fałszywych „faktach".

Rozwiązanie:Stosuj stop tokens (np. zatrzymanie generacji na 'Observation:'). W function calling problem nie występuje, bo Action jest tokenem strukturalnym.
Błędy parsowania akcji w formacie tekstowymWysoka

W oryginalnym tekstowym ReAct model może wygenerować źle sformułowane Action (np. brak nawiasów, nieznane narzędzie, niepoprawne argumenty). Każdy taki błąd przerywa pętlę lub wymaga retry.

Rozwiązanie:Preferuj structured function calling, gdy dostępne. Jeśli używasz formatu tekstowego, dodaj walidację z czytelnym komunikatem zwracanym jako Observation, by model mógł się skorygować.
Eksplozja kontekstu w długich trajektoriachWysoka

Każda Observation (zwłaszcza wyniki wyszukiwania, treść stron) dokłada setki/tysiące tokenów. Po kilku iteracjach kontekst może przekroczyć okno modelu lub powodować eksplozję kosztu.

Rozwiązanie:Stosuj kompresję obserwacji (sumaryzacja, ekstrakcja istotnych fragmentów). Używaj sliding-window memory lub zewnętrznej pamięci wektorowej dla starszych kroków.
Wybór niepasującego narzędzia (tool misuse)Średnia

Przy dużym zbiorze narzędzi (≥30) model często wybiera nie najlepsze narzędzie do zadania, mylony przez podobne nazwy lub niejednoznaczne opisy.

Rozwiązanie:Pisz precyzyjne, niesprzeczne opisy narzędzi z przykładami użycia. Dla bardzo dużych zbiorów stosuj tool retrieval (np. Toolshed, Gorilla).
Brak strategii odzyskiwania po błędzie narzędziaŚrednia

Gdy narzędzie zwraca błąd (timeout, 500, nieoczekiwany format), agent może wpaść w pętlę powtarzania tej samej akcji lub poddać się.

Rozwiązanie:Zwracaj błędy jako czytelną Observation z propozycją alternatywy. Implementuj retry z backoff i fallback na inne narzędzie.

Ewolucja

Oryginalny paper · 2022 · ICLR 2023 · Shunyu Yao
ReAct: Synergizing Reasoning and Acting in Language Models
Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, Yuan Cao
2022
Chain-of-Thought Prompting (Wei i in.)

Wei i in. wykazują, że jawne kroki rozumowania w prompcie poprawiają zdolność LLM do rozwiązywania złożonych zadań. ReAct buduje na CoT, dodając akcje i obserwacje.

2022
WebGPT i Toolformer — narzędzia bez jawnego rozumowania

WebGPT (OpenAI 2022) i Toolformer (Schick i in. 2023) pokazują, że LLM mogą wywoływać narzędzia, ale bez przeplatanego rozumowania. ReAct adresuje brakującą warstwę planowania.

2022
Publikacja ReAct (Yao i in.)
Punkt przełomowy

Yao i in. (Princeton + Google Brain) wprowadzają wzorzec Thought/Action/Observation, demonstrując poprawę nad CoT i tool-only baseline na HotpotQA, FEVER, ALFWorld i WebShop.

2023
LangChain implementuje ReAct jako AgentExecutor

LangChain (uruchomiony w październiku 2022) populeryzuje ReAct jako standardowy wzorzec agenta. Wzorzec staje się de facto standardem dla aplikacji agentowych w 2023 roku.

2023
Reflexion — pamięć epizodyczna i samokrytyka (Shinn i in.)

Reflexion rozszerza ReAct o pętlę zewnętrzną: po nieudanym epizodzie agent generuje samokrytykę zapisywaną w pamięci, która warunkuje kolejną próbę. Poprawia HumanEval z 80% (GPT-4 + ReAct) do 91%.

2023
OpenAI Function Calling — internalizacja akcji w API
Punkt przełomowy

OpenAI wprowadza function calling w czerwcu 2023, przekształcając Action z tekstu w strukturalny obiekt JSON. Eliminuje potrzebę parsowania tekstu Action — Anthropic i Google idą tą samą drogą.

2024
Model Context Protocol (Anthropic) — standaryzacja narzędzi

Anthropic publikuje MCP w listopadzie 2024 — otwarty standard komunikacji LLM↔narzędzia, uogólniający warstwę Action z ReAct na cały ekosystem dostawców.

2024
Native reasoning models — internalizacja rozumowania (OpenAI o1)
Punkt przełomowy

Modele rozumujące (o1, o3, DeepSeek-R1) generują rozszerzone wewnętrzne rozumowanie wytrenowane przez RL. ReAct ewoluuje: warstwa Thought zostaje wchłonięta przez sam model, zewnętrzny orkiestrator skupia się na akcjach i pamięci.

Szczegóły techniczne

Hiperparametry (konfigurowalne osie)

Maksymalna liczba kroków pętliKrytyczna

Limit iteracji Thought→Action→Observation, który chroni przed nieskończonymi pętlami. Po jego przekroczeniu agent jest wymuszany do udzielenia odpowiedzi lub kończy z błędem.

5–10Standardowy zakres dla większości zadań QA i tool-use.
30–50Złożone zadania badawcze (AutoGPT, The AI Scientist).
Liczba dostępnych narzędziWysoka

Wielkość przestrzeni akcji. Większa liczba narzędzi zwiększa elastyczność, ale obciąża okno kontekstowe i utrudnia poprawny wybór akcji.

3Oryginalny ReAct (HotpotQA): search/lookup/finish.
10–50Typowy agent produkcyjny.
1000+Tool retrieval — dynamiczne podsuwanie istotnych narzędzi (Toolshed, Gorilla).
Format akcjiWysoka

Sposób kodowania wywołań narzędzi: tekstowy (oryginalny ReAct) vs strukturalny (JSON function call) vs MCP.

text 'Action: tool[args]'Oryginalny format Yao i in.
JSON function callStandard OpenAI / Anthropic API.
Liczba przykładów ReAct w prompcieŚrednia

Few-shot demonstracje pełnych trajektorii Thought/Action/Observation/Finish. Krytyczne dla mniejszych modeli; dla GPT-4/Claude często wystarcza 0–2.

6Standard z papera Yao i in.
0Native function calling w nowoczesnych modelach instruction-tuned.

Złożoność obliczeniowa

Złożoność czasowa: O(N · (L_ctx · d + T_tool)). Złożoność przestrzenna: O(N · L_step + N_tools · L_tool_def).

Wąskie gardło obliczeniowe

Sekwencyjne forward passes z rosnącym kontekstem

Każdy krok pętli wymaga pełnego prefill LLM nad całą dotychczasową historią + autoregresywnej generacji nowego Thought i Action. Przy braku KV-cache koszt kwadratowy w liczbie kroków.

Zależy od
Liczba kroków pętli NLatencja narzędzi

Paradygmat wykonania

Tryb główny
dense

Sam LLM działa w trybie dense (każdy forward pass aktywuje wszystkie parametry), ale cała aplikacja ReAct ma charakter conditional/stage-dependent: każdy etap pętli ma inny stan kontekstu i inny cel generacji.

Wzorzec aktywacji
stage_dependent
Mechanizm routingu

Orkiestrator (agent executor) decyduje o ponownym wywołaniu modelu po wstrzyknięciu obserwacji. To nie routing wewnątrz modelu, lecz zewnętrzna pętla sterująca.

Równoległość

Poziom równoległości
sequential

Wiele niezależnych trajektorii ReAct (np. dla różnych zapytań lub w drzewiastym przeszukiwaniu Tree of Thoughts) można uruchamiać równolegle batch-em. Sama pojedyncza trajektoria pozostaje sekwencyjna.

Zakres
inference
Ograniczenia
!Każda akcja zależy od historii obserwacji — pętla jest z natury sekwencyjna.
!Wykonanie narzędzia wprowadza opóźnienie sieciowe / I/O, którego nie można równolegle „przykryć" generacją.

Wymagania sprzętowe

Podstawowe

ReAct to wzorzec stosowany do standardowego LLM, który działa najefektywniej na GPU z tensor cores. Wymagania sprzętowe pochodzą wyłącznie od bazowego modelu.

Dobry fit

Sam wzorzec ReAct nie ma specyficznych wymagań sprzętowych — może być realizowany przez dowolny LLM, lokalnie (Ollama, vLLM) lub przez API.