Przejdź do treści
2.2Średniozaawansowany7 min

Agent ReAct: wzorzec Thought, Action, Observation

Sebastian KarallZaktualizowano 28 października 2026
Definicja

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 Finish[Antwort] w celu zakończenia.

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

  1. context = systemPrompt + toolDescriptions + userQuery
  2. schritt = 0
  3. MAX_SCHRITTE = 15 # hartes Limit gegen Endlos-Loops
  4. while schritt < MAX_SCHRITTE:
  5. ausgabe = LLM(context) # erzeugt Thought + Action
  6. if ausgabe.action == "Finish":
  7. return ausgabe.action.argument # finale Antwort
  8. observation = führeToolAus(ausgabe.action) # externer Call
  9. context = context + ausgabe.thought + ausgabe.action + observation # Beobachtung anhängen
  10. schritt += 1
  11. return "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_limit w LangGraph, max_tool_iterations w AssistantAgent w AutoGen (alternatywnie warunek zakończenia, np. MaxMessageTermination), max_iter w CrewAI. Funkcja create_react_agent w LangGraph oferuje kanał remaining_steps i 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:

  1. Thought: „Nie znam aktualnej liczby i muszę ją sprawdzić.” → Action: Suche["Mitarbeiterzahl Firma X 2026"] → Observation: wynik z komunikatem prasowym.
  2. Thought: „Komunikat podaje przedział, potrzebuję dokładnej liczby.” → Action: Öffne[URL der Pressemeldung] → Observation: pełny tekst z informacją „około 1200 pracowników”.
  3. 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.

Podsumuj z AIChatGPTClaudePerplexity

Otwiera czat z przygotowanym promptem.

Najczęściej zadawane pytania

Co oznacza ReAct?
ReAct to skrót od Reasoning and Acting. LLM przeplata rozumowanie w wolnym tekście (Thought) z wywołaniami narzędzi (Action) i odczytuje ich wyniki (Observation). Te trzy kroki tworzą pętlę, która działa, dopóki agent nie poda ostatecznej odpowiedzi. Wzorzec wprowadzili Yao i in. w 2022 roku.
Czym ReAct różni się od Chain-of-Thought (CoT)?
Chain-of-Thought rozumuje wyłącznie wewnętrznie, bez dostępu do świata zewnętrznego, i dlatego może halucynować fakty. ReAct osadza rozumowanie w rzeczywistych obserwacjach z narzędzi: rozumowanie steruje wyborem narzędzi, a wyniki narzędzi z kolei korygują rozumowanie. W ten sposób ReAct łączy abstrakcyjne wnioskowanie z ugruntowaniem w faktach.
Jakie są najczęstsze tryby awarii wzorca ReAct?
Najczęstsze problemy to nieskończone pętle przy braku twardego limitu kroków, Reasoning Drift (agent trzyma się błędnego założenia i interpretuje kolejne obserwacje tak, by do niego pasowały), halucynowane argumenty narzędzi przy niejednoznacznych opisach narzędzi oraz rozdęcie kontekstu, ponieważ każdy krok ponownie przesyła całą dotychczasową historię.
Jak zapobiegać nieskończonym pętlom w agentach ReAct?
Za pomocą twardych limitów iteracji: w LangGraph ustawiasz recursion_limit, w CrewAI max_iter, a w AutoGen max_tool_iterations w AssistantAgent albo warunek zakończenia, np. MaxMessageTermination. Funkcja create_react_agent w LangGraph udostępnia kanał remaining_steps i przerywa działanie, gdy zostaje zbyt mało kroków. Każdy agent produkcyjny powinien mieć jawnie ustawiony limit.
W jakich frameworkach dostępny jest ReAct?
ReAct jest dostępny natywnie w LangGraph (create_react_agent), CrewAI (każdy agent jest wewnętrznie agentem ReAct), AutoGen lub Microsoft Agent Framework oraz w n8n, którego węzeł AI Agent od wersji 1.82.0 działa jako Tools Agent z natywnym function calling. Według stanu na 2026 rok create_react_agent z LangChain przenosi się z langgraph.prebuilt do langchain.agents.create_agent.
Czy przy nowoczesnych modelach jawny prompting ReAct jest jeszcze potrzebny?
Zwykle nie. Obecne modele frontier z natywnym function calling same z siebie opanowały pętlę rozumowania i działania. Według relacji praktyków kluczowe są wtedy już nie prompty ReAct, lecz pamięć, limity iteracji i możliwość śledzenia przebiegu (tracing).

Chcesz zgłębić temat?

Otrzymuj nowe analizy prosto na swoją skrzynkę albo zobacz, jak wykorzystujemy tę wiedzę w firmach.