Agent ReAct: wzorzec Thought, Action, Observation
Wzorzec ReAct (Reasoning and Acting) to wzorzec projektowy agentów, w którym LLM na przemian rozumuje (Thought), wywołuje narzędzie (Action) i odczytuje wynik (Observation). Ta pętla powtarza się, dopóki agent nie poda ostatecznej odpowiedzi. Wzorzec przedstawili Yao i in. (2022).
W skrócie
- ReAct przeplata werbalne rozumowanie (Thought) z wywołaniami narzędzi (Action) i ich wynikami (Observation) w jednym kontekście. Wprowadzili go Yao i in. (arXiv:2210.03629, październik 2022, ICLR 2023).
- Jego główną siłą jest połączenie korzystania z narzędzi z przejrzystością: pełny ślad Thought/Action/Observation da się prześledzić krok po kroku, co ułatwia debugowanie i wykazywanie zgodności, na przykład z RODO.
- Typowe tryby awarii to nieskończone pętle, Reasoning Drift (trzymanie się błędnego założenia) oraz halucynowanie argumentów narzędzi, szczególnie w przypadku słabszych modeli.
- Najważniejszy środek zaradczy: twarde limity iteracji (np. recursion_limit w LangGraph, max_iter w CrewAI) oraz function calling zamiast argumentów JSON w wolnym tekście.
- Praktyczny górny limit to zwykle 10-25 kroków, zanim zaczną dominować utrata kontekstu i Reasoning Drift; ReAct działa sekwencyjnie, więc ogranicza go latencja.
- Rekomendacja z praktyki (Anthropic, Cognition): zaczynać od najprostszego wzorca, zwykle ReAct, i eskalować dopiero wtedy, gdy wymuszą to zmierzone tryby awarii.
Wzorzec ReAct (Reasoning and Acting) to wzorzec projektowy agentów, w którym LLM na przemian rozumuje (Thought), wywołuje narzędzie (Action) i odczytuje wynik (Observation). Ta pętla powtarza się, dopóki agent nie poda ostatecznej odpowiedzi. Wzorzec przedstawili Yao i in. (arXiv:2210.03629, październik 2022, ICLR 2023). Rozumowanie steruje wyborem narzędzi, a obserwacje z narzędzi korygują rozumowanie.
- Czym jest: pętlą Thought, Action i Observation, w której LLM przeplata myślenie z działaniem i korzysta z narzędzi w tym samym kontekście.
- Do czego się nadaje: do zadań wspieranych narzędziami, opartych na faktach, z w pełni możliwym do prześledzenia przebiegiem. ReAct to standardowy punkt wyjścia dla projektów agentowych.
- Na co uważać: nieskończone pętle, Reasoning Drift i halucynowane argumenty narzędzi; można je opanować twardymi limitami iteracji i function calling.
Skąd pochodzi ReAct i jaki problem rozwiązuje
ReAct powstał jako odpowiedź na dwie przeciwstawne słabości wcześniejszych podejść. Czysty Chain-of-Thought (CoT) rozumuje wyłącznie wewnętrznie i dlatego halucynuje fakty, bo brakuje mu jakiegokolwiek ugruntowania w świecie zewnętrznym. Z kolei agenci nastawieni wyłącznie na działanie, np. wczesne podejścia WebGPT czy SayCan, nie potrafią abstrakcyjnie rozumować o długoterminowych celach ani wychodzić z sytuacji wyjątkowych.
ReAct łączy jedno i drugie: werbalne rozumowanie znajduje się w tym samym kontekście co akcje. Dzięki temu LLM zyskuje pamięć roboczą obejmującą całą trajektorię, a agent staje się interpretowalny. Formalnie ReAct rozszerza przestrzeń akcji: obok akcji zewnętrznych, które wywołują rzeczywiste obserwacje, istnieją językowe „akcje” (Thoughts), które niczego nie zmieniają w otoczeniu, a jedynie uzupełniają wewnętrzny kontekst agenta. Co ciekawe, wzorzec działa już z jednym lub dwoma przykładami w kontekście, bez fine-tuningu.
Pętla w szczegółach: Thought, Action, Observation
Kanoniczny przebieg wygląda tak: User Query → [LLM: Thought] → [LLM: Action] → [Umgebung: Observation] → [LLM: Thought] → … → Finish[Antwort]. Trzy kroki zazębiają się w następujący sposób.
Krok | Znaczenie | Kto go generuje |
|---|---|---|
Thought | Rozumowanie w wolnym tekście: agent zastanawia się, co musi zrobić w następnej kolejności i dlaczego. Aktualizuje tylko wewnętrzny kontekst, nie otoczenie. | LLM |
Action | Konkretne wywołanie narzędzia z argumentami (np. wyszukiwanie, wywołanie API, zapytanie do bazy danych) lub | LLM |
Observation | Wynik akcji zwracany przez otoczenie (wyniki wyszukiwania, odpowiedź API, komunikat o błędzie). Trafia do kolejnego Thought. | Otoczenie / narzędzie |
Ten cykl trwa, dopóki model nie wyemituje Action: Finish[Antwort]. Praktyczny górny limit to zwykle 10-25 kroków, zanim przewagę zyskają utrata kontekstu lub Reasoning Drift.
Pseudokod pętli ReAct
context = systemPrompt + toolDescriptions + userQueryschritt = 0MAX_SCHRITTE = 15 # hartes Limit gegen Endlos-Loopswhile schritt < MAX_SCHRITTE:ausgabe = LLM(context) # erzeugt Thought + Actionif ausgabe.action == "Finish":return ausgabe.action.argument # finale Antwortobservation = führeToolAus(ausgabe.action) # externer Callcontext = context + ausgabe.thought + ausgabe.action + observation # Beobachtung anhängenschritt += 1return "Limit erreicht, keine Lösung gefunden." # sauberer Abbruch
Kluczowa kwestia: w każdej iteracji cała dotychczasowa historia jest ponownie wysyłana do LLM. To źródło zarówno siły (pełna pamięć), jak i najważniejszej słabości (koszty).
Mocne strony i ograniczenia w świetle badań
Oryginalna publikacja dokumentuje zalety ReAct w kilku benchmarkach. Ważne: liczby pochodzą z warunków z lat 2022/2023 (modele klasy GPT-3 i PaLM) i należy je czytać jako wartości względne, a nie jako dzisiejsze wartości bezwzględne.
- ALFWorld (tekstowe zadania domowe): +34 punkty procentowe w ujęciu bezwzględnym w porównaniu z metodami bazowymi opartymi na imitacji/RL, przy jednym lub dwóch przykładach.
- WebShop (nawigacja w e-commerce): +10 punktów procentowych wskaźnika sukcesu w ujęciu bezwzględnym w porównaniu z IL/IL+RL.
- HotpotQA i Fever: wyniki porównywalne lub lepsze niż czysty CoT bądź samo generowanie akcji; najsilniejszą konfiguracją jest hybryda, która przełącza się między wiedzą wewnętrzną a rozumowaniem wspieranym narzędziami.
Po stronie kosztów ReAct jest drogi i wolny. Zużycie tokenów rośnie zgodnie z O(N · T): N kroków razy skumulowana długość kontekstu, ponieważ każdy krok ponownie płaci za prefiks (prompt systemowy, opisy narzędzi, cała historia). Latencja jest ściśle sekwencyjna, czyli wynosi mniej więcej N × (czas odpowiedzi LLM + czas odpowiedzi narzędzia). Właśnie to powtarzanie prefiksu jest słabością, którą następczy wzorzec ReWOO rozwiązuje za pomocą zaledwie dwóch wywołań LLM.
Tryby awarii i środki zaradcze
W praktyce szczególnie często występują trzy tryby awarii:
- Nieskończone pętle: bez twardego limitu kroków agent może bez końca kręcić się w kółko. Środek zaradczy: jawne limity, np.
recursion_limitw LangGraph,max_tool_iterationsw AssistantAgent w AutoGen (alternatywnie warunek zakończenia, np. MaxMessageTermination),max_iterw CrewAI. Funkcjacreate_react_agentw LangGraph oferuje kanałremaining_stepsi przerywa działanie z komunikatem, gdy zostaje mniej niż dwa kroki. - Reasoning Drift / propagacja błędów: jeśli model przywiązał się do błędnego Thought, interpretuje kolejne Observations tak, by do niego pasowały. Środek zaradczy: krótsze trajektorie, walidacja pośrednia oraz, przy zadaniach weryfikowalnych, zewnętrzny sygnał refleksji/weryfikacji (pomost do wzorca Reflexion).
- Halucynowane argumenty narzędzi i halucynowane obserwacje: przy niejednoznacznych opisach narzędzi model wymyśla argumenty; słabsze modele czasem „fantazjują” także obserwacje, zamiast czekać na rzeczywisty wynik narzędzia. Według badań źle sformatowane argumenty narzędzi w JSON to najczęstszy błąd produkcyjny na słabszych modelach. Środek zaradczy: korzystać z ustrukturyzowanego wyjścia lub trybu function calling, gdy tylko dostawca go obsługuje, oraz precyzyjnie formułować opisy narzędzi.
Do tego dochodzi wspomniane już rozdęcie kontekstu: każdy krok ponownie przesyła całą historię.
Konkretny przykład: agent wyszukujący informacje dla agencji marketingowej
Załóżmy, że agencja buduje agenta, który ustala aktualną liczbę pracowników firmy klienta. Pętla mogłaby przebiegać tak:
- Thought: „Nie znam aktualnej liczby i muszę ją sprawdzić.” → Action:
Suche["Mitarbeiterzahl Firma X 2026"]→ Observation: wynik z komunikatem prasowym. - Thought: „Komunikat podaje przedział, potrzebuję dokładnej liczby.” → Action:
Öffne[URL der Pressemeldung]→ Observation: pełny tekst z informacją „około 1200 pracowników”. - Thought: „To odpowiada na pytanie.” → Action:
Finish["ca. 1.200 Mitarbeiter, Stand 2026"].
Trzy kroki, trzy wywołania LLM, w pełni zaprotokołowany przebieg. Jeśli ustawisz MAX_SCHRITTE = 15, agent jest zabezpieczony przed nieskończonymi pętlami. Jeśli niczego nie znajdzie, kończy działanie w uporządkowany sposób, zamiast spalać tokeny. Właśnie ten przejrzysty przebieg jest realną korzyścią dla zespołów marketingowych bez zaplecza programistycznego: w n8n na przykład widok wykonania pokazuje każde wywołanie LLM i narzędzia jako log, który można audytować.
Frameworki i rekomendacje z praktyki (stan na 2026 rok)
ReAct jest dostępny natywnie we wszystkich popularnych stackach: LangGraph (create_react_agent), CrewAI (każdy agent jest wewnętrznie agentem ReAct), AutoGen lub Microsoft Agent Framework (według stanu na 2026 rok AutoGen jest w trybie utrzymania; Microsoft kieruje nowe projekty do Agent Framework) oraz n8n. Tam węzeł AI Agent od n8n 1.82.0 realizuje pętlę rozumowania i działania jako Tools Agent z natywnym function calling; wybór osobnego typu agenta ReAct jest oznaczony jako przestarzały. W LangChain, według stanu na 2026 rok, create_react_agent przenosi się z langgraph.prebuilt do langchain.agents.create_agent z dekoratorami middleware.
Najważniejszy wniosek z praktyki pochodzi od Anthropic („Building Effective Agents”, grudzień 2024) i Cognition: zaczynać od najprostszego wzorca, zwykle ReAct, i eskalować dopiero wtedy, gdy wymuszą to zmierzone tryby awarii. Nowoczesne modele frontier natywnie opanowały pętlę rozumowania i działania dzięki function calling; jawny prompting ReAct często jest zbędny. Kluczowe stają się wtedy pamięć, limity iteracji i tracing. Narzędzia do obserwowalności (LangSmith, Arize Phoenix, Langfuse) są w produkcji praktycznie obowiązkowe. Unijny AI Act wymaga automatycznego rejestrowania zdarzeń w systemach AI wysokiego ryzyka (art. 12 AI Act), a typowi agenci marketingowi i agenci do wyszukiwania informacji z reguły nie należą do tej kategorii. Mimo to warto trwale zapisywać ślad wykonania na potrzeby debugowania i możliwości prześledzenia przebiegu. Jeśli zawiera on dane osobowe, obowiązują zasady minimalizacji danych i ograniczenia przechowywania zgodnie z art. 5 RODO: należy oczyścić ślad z PII i określić termin jego usunięcia.
Dla agencji i decydentów B2B
ReAct to pragmatyczny punkt wyjścia dla niemal każdego projektu agentowego: chatbotów dla klientów zintegrowanych z CRM i bazą wiedzy, triażu zgłoszeń w supporcie czy zadań polegających na wyszukiwaniu informacji. Szybko się go wdraża i jest w pełni audytowalny, a oba te aspekty liczą się w środowisku B2B w Europie. Koszty i latencja rosną jednak z każdym krokiem. Dlatego od początku ustaw twarde limity iteracji, używaj function calling zamiast argumentów w wolnym tekście i zapisuj ślad wykonania na potrzeby audytu i debugowania. Jeśli jako agencja chcesz zaprojektować agenta albo zlecić sprawdzenie stabilności istniejącego workflow, odezwij się do nas. Wspieramy Cię w wyborze, architekturze i wdrożeniu zgodnym z wymogami compliance.
Otwiera czat z przygotowanym promptem.
Najczęściej zadawane pytania
Co oznacza ReAct?
Czym ReAct różni się od Chain-of-Thought (CoT)?
Jakie są najczęstsze tryby awarii wzorca ReAct?
Jak zapobiegać nieskończonym pętlom w agentach ReAct?
W jakich frameworkach dostępny jest ReAct?
Czy przy nowoczesnych modelach jawny prompting ReAct jest jeszcze potrzebny?
Chcesz zgłębić temat?
Otrzymuj nowe analizy prosto na swoją skrzynkę albo zobacz, jak wykorzystujemy tę wiedzę w firmach.