Plan-and-Execute: gdy planowanie jest oddzielone od wykonania
Plan-and-Execute to architektura agentowa, w której Planner najpierw tworzy pełny, wieloetapowy plan, a Executor realizuje go krok po kroku. Replanner w razie potrzeby dostosowuje plan. Oddzielenie planowania od wykonania pozwala wykonywać poszczególne kroki mniejszym modelem i daje lepszą kontrolę nad długimi zadaniami niż czysty ReAct.
W skrócie
- Plan-and-Execute oddziela ciężkie zadanie rozumowania (planowanie) od taniego wykonania krok po kroku. Umożliwia to warstwowanie modeli: mocny model jako Planner, tani model jako Executor.
- W porównaniu z czystym ReAct ta architektura może obniżyć koszty, bo kroki z użyciem narzędzi wykonuje mniejszy model, a duży model tylko planuje i po każdym kroku sprawdza plan.
- Po każdym kroku Replanner decyduje: zakończyć albo dostosować resztę planu. Daje to odporność przy długich zadaniach, którą ReAct traci przez dryf rozumowania.
- Architekturę spopularyzował LangChain jako agentową adaptację promptingu Plan-and-Solve (Wang et al. 2023, arXiv:2305.04091), inspirowaną BabyAGI.
- Słabości: kruche plany marnują wywołania na beznadziejne kroki, brakuje prawdziwej równoległości (kroki wykonują się sekwencyjnie), a częste ponowne planowanie zjada przewagę kosztową.
- Stosuj, gdy zadania da się rozłożyć na więcej niż trzy niezależne kroki, poprawność planu można jasno sprawdzić, a opóźnienie nie jest bezpośrednio widoczne dla użytkownika. W silnie stochastycznych środowiskach lepszym wyborem jest ReAct.
Plan-and-Execute to architektura agentowa, w której Planner najpierw tworzy pełny, wieloetapowy plan, a Executor realizuje go krok po kroku. Replanner w razie potrzeby dostosowuje plan. Oddzielenie planowania od wykonania pozwala wykonywać poszczególne kroki mniejszym modelem i daje lepszą kontrolę nad długimi zadaniami niż czysty ReAct.
Najpierw szybkie odpowiedzi:
- Co rozwiązuje: rozumowaniu krok po kroku w ReAct brakuje globalnego obrazu: przy długich zadaniach agent zapomina pierwotny cel. Plan-and-Execute wymusza trzymanie się celu dzięki jawnemu planowi przygotowanemu z góry.
- Dlaczego może być taniej: poszczególne kroki wykonuje mniejszy, tańszy model. Duży model tylko planuje i po każdym kroku sprawdza, czy plan nadal się trzyma (warstwowanie modeli).
- Główny kompromis: lepsza kontrola i audytowalne plany kontra kruchość planów i brak prawdziwej równoległości. W silnie stochastycznych środowiskach ReAct jest zdecydowanie lepszy.
Pochodzenie: Plan-and-Solve, BabyAGI i adaptacja w LangChain
Precyzyjne umiejscowienie jest tu ważne, bo atrybucja często bywa uproszczona. Bazowy wzorzec promptingu pochodzi z pracy Plan-and-Solve Prompting (Wang et al., arXiv:2305.04091, ACL 2023). Praca zaproponowała dwuetapowy prompt zero-shot, w przybliżeniu „Najpierw opracujmy plan / Wykonajmy plan”, i przewyższyła nim Zero-Shot-CoT w rozumowaniu matematycznym.
Nazwa agenta „Plan-and-Execute” pochodzi jednak z adaptacji w LangChain, a nie z oryginalnej pracy. Architekturę zainspirowało dodatkowo BabyAGI (Yohei Nakajima, 2023). Poprawne sformułowanie brzmi więc: spopularyzowana przez LangChain architektura agentowa Plan-and-Execute, oparta na promptingu Plan-and-Solve.
Blisko spokrewniony wzorzec Anthropic opisuje w Building Effective Agents (grudzień 2024): w workflow Orchestrator-Workers centralny LLM dynamicznie dzieli zadanie, deleguje części do LLM-ów workerów i łączy ich wyniki.
Trzy komponenty
Wariant w LangGraph składa się z trzech węzłów:
- Planner: jednorazowo generuje ponumerowany, wieloetapowy plan (
Plan: List[str]). - Executor: zazwyczaj subagent ReAct, który realizuje kolejne kroki planu jeden po drugim.
- Replanner: po każdym wykonaniu decyduje, czy zwrócić końcową
Response(zakończenie), czy wygenerować nowy, w razie potrzeby zmieniony plan dla pozostałej pracy.
Przebieg:
Input → Planner → [Plan: Schritt_1, Schritt_2, …] → Executor(Schritt_1) → Replanner → (Executor(Schritt_2) → Replanner → …) → Response
Kluczowa innowacja: Plan-and-Execute oddziela planowanie (ciężkie zadanie rozumowania, przy którym opłaca się duży model) od wykonania (korzystanie z narzędzi w każdym kroku, do którego wystarcza mniejszy, tańszy model).
Zalety w porównaniu z czystym ReAct
- Szybsze wykonanie wieloetapowe: Executor sam realizuje krok planu wraz z jego wywołaniami narzędzi. Duży model wraca do gry dopiero potem, a nie po każdej pojedynczej akcji.
- Oszczędność dzięki warstwowaniu modeli: duży model klasy frontier planuje, a mały, tani model wykonuje kroki. LangChain opisuje tę przewagę kosztową nad ReAct tylko jakościowo. Łączna liczba wywołań wcale nie musi przy tym spaść: w 2023 roku LangChain wprost wskazał więcej wywołań LLM jako cenę tego wzorca i przyznał, że wielu zalet nie sprawdzono w benchmarkach.
- Jawne, audytowalne plany: mocny argument w zastosowaniach korporacyjnych i compliance, bo plan jest dostępny do wglądu przed wykonaniem.
- Globalny obraz: cel nadrzędny pozostaje zachowany na długich trajektoriach, zamiast ginąć przez „dryf rozumowania” ReAct.
Słabości i tryby awarii
Plan-and-Execute nie jest panaceum. Najważniejsze ograniczenia:
- Kruchość planu: jeśli plan przygotowany z góry jest błędny, Executor marnuje wywołania na beznadziejne kroki, dopóki Replanner tego nie zauważy. Sama praca o Plan-and-Solve dokumentuje błędy obliczeniowe, brakujące kroki i nieporozumienia semantyczne.
- Brak prawdziwej równoległości: plany są listami; Executor przetwarza je sekwencyjnie. Właśnie to rozwiązuje LLMCompiler (Kim et al., arXiv:2312.04511), który zamiast listy emituje DAG.
- Koszty ponownego planowania: jeśli Replanner musi często zmieniać plan, dochodzą kolejne kroki, a każdy dodatkowy krok kosztuje kolejny przebieg Executora i Replannera. W zaszumionych środowiskach dzieje się to niemal przy każdym kroku i zjada przewagę kosztową.
- Wybór modelu jest kluczowy: jeśli model Executora jest za słaby na dane kroki, więcej kroków kończy się niepowodzeniem, Replanner musi częściej zmieniać plan, a przewaga kosztowa maleje.
ReAct vs. Plan-and-Execute: bezpośrednie porównanie
Kryterium | ReAct | Plan-and-Execute |
|---|---|---|
Planowanie | Niejawne, krok po kroku (reaktywne) | Jawne, pełny plan z góry |
Wywołania LLM | Jedno wywołanie na krok | Jedno wywołanie planujące, wykonanie małym modelem, wywołanie Replannera po każdym kroku |
Zużycie tokenów | Rośnie z każdym krokiem, duży model przy każdej akcji | Zależy od częstotliwości ponownego planowania, wykonanie mniejszym modelem |
Opóźnienie (N kroków z narzędziami) | N x sekwencyjnie | 1 wywołanie planujące + N wykonań + N wywołań Replannera, sekwencyjnie |
Warstwowanie modeli | Trudne (jedna pętla, jeden model) | Naturalne (duży Planner, mały Executor) |
Odporność przy długoterminowych celach | Słaba (dryf rozumowania) | Silna (cel pozostaje utrwalony w planie) |
Odporność na stochastyczność | Silna (reaktywność) | Słaba (plan może się zdezaktualizować) |
Audytowalność | Ślad wykonania dla każdego kroku | Jawny plan z góry, przyjazny dla compliance |
Złożoność implementacji | Niska (jedna linijka w LangGraph) | Średnia |
Wiersz dotyczący tokenów opisuje tendencje, a nie wyniki pomiarów. Sprawdź to na własnym obciążeniu.
Pseudokod: pętla Plan-and-Execute
W uproszczeniu, na wzór logiki schematu stanu w LangGraph:
```
State: input, plan (lista), past_steps (wykonane), response
def planner(state):
# duży model JEDEN RAZ tworzy kompletny plan
state.plan = big_model.plan(state.input) # np. ["1. ...", "2. ...", "3. ..."]
return state
def executor(state):
krok = state.plan[0] # następny otwarty krok
wynik = small_model.run_react(krok) # tani subagent ReAct + narzędzia
state.past_steps.append((krok, wynik))
return state
def replanner(state):
# albo gotowe -> Response, albo nowy plan na resztę pracy
if big_model.is_done(state):
state.response = big_model.final_answer(state)
return state, "END"
state.plan = big_model.replan(state.input, state.past_steps)
return state, "executor"
Graf: planner -> executor -> replanner -> (executor | END)
```
Kluczowa kwestia: big_model (drogi) działa tylko w planner i replanner, a small_model (tani) dźwiga właściwe obciążenie wykonawcze.
Konkretny przykład: codzienny raport marketingowy
Agencja buduje agenta, który każdego ranka przygotowuje raport o konkurencji. Zadanie: „Zbadaj trzech najważniejszych konkurentów, zbierz ich nowe treści z ostatnich 24 godzin, podsumuj je i wyślij e-mailem”.
W czystym ReAct agent po każdej pojedynczej akcji (wyszukiwanie, scraping, podsumowanie) ponownie wywoływałby pełny model, łącznie z całym dotychczasowym oknem kontekstu. Przy 12 krokach to 12 drogich wywołań plus rosnący prefiks.
W Plan-and-Execute Planner raz tworzy plan (1 drogie wywołanie):
```
Plan:
- Zidentyfikować konkurentów A, B, C
- Dla każdego: zebrać scraperem nowe wpisy blogowe i posty w social mediach z ostatnich 24h
- Krótko podsumować każdego konkurenta
- Sformatować zbiorczy raport
- Wysłać e-mailem do zespołu
```
Kroki 2-5 realizuje potem tani Executor. Duży model po każdym kroku sprawdza tylko, czy plan nadal się trzyma, i planuje od nowa, gdy np. źródło jest niedostępne. Jeśli to pozostaje wyjątkiem, to zadanie wsadowe obniża koszty, bo właściwa praca spoczywa na tanim modelu. Jednocześnie agencja ma plan udokumentowany w przejrzysty sposób.
Zastosowanie we frameworkach (stan na 2026 rok)
- LangGraph: natywnie, z oficjalnym tutorialem. Kanoniczny schemat stanu z
input,plan: List[str],past_stepsiresponse; węzłyplanner,agent(Executor) ireplan. Krawędź warunkowashould_endprowadzi z powrotem do Executora albo doEND. - CrewAI: bezpośrednie dopasowanie przez
Crew(planning=True). Aktywuje toAgentPlanner, który przed każdą iteracją crew tworzy plan krok po kroku i wstrzykuje go do opisu każdego zadania. ZProcess.hierarchicalorazmanager_agent/manager_llmdochodzi zarządzająca warstwa ponownego planowania. - AutoGen / Microsoft Agent Framework: odwzorowanie przez group chat z dedykowanym agentem
Planneroraz agentami workerami (RoundRobinGroupChatlubSelectorGroupChat). W Microsoft Agent Framework najbliżej tego wzorca jest orkiestracja Magentic: agent menedżer tworzy plan zadań, rozdziela kroki między wyspecjalizowanych agentów i planuje od nowa, gdy postęp stoi w miejscu. Na życzenie człowiek zatwierdza plan przed wykonaniem. Według stanu na 2026 rok AutoGen jest w trybie utrzymaniowym; Microsoft kieruje nowe projekty do MS Agent Framework. - n8n: brak natywnego węzła Plan-and-Execute, ale da się to realnie zbudować z dwóch węzłów AI Agent (Planner + Executor), połączonych pętlą SplitInBatches po punktach planu. Ograniczenie: bez zewnętrznej pamięci pętle n8n nie zachowują stanu między wykonaniami. To wystarcza do zadań wsadowych (codzienne raporty, potoki treści), ale nie do agentów czasu rzeczywistego o wysokiej częstotliwości.
Kiedy stosować, a kiedy nie
Stosuj Plan-and-Execute, gdy (a) zadania da się rozłożyć na więcej niż trzy niezależne kroki, (b) masz jasną instancję kontrolną weryfikującą poprawność planu i (c) opóźnienie nie jest bezpośrednio widoczne dla użytkownika.
Zrezygnuj z niego, gdy środowisko jest silnie stochastyczne. Jeśli każda obserwacja może unieważnić plan (np. przy interaktywnej nawigacji w sieci), reaktywna pętla ReAct jest zdecydowanie lepsza. W przypadku workflow krytycznych pod kątem compliance w UE (RODO, AI Act) sprawdza się Plan-and-Execute z human-in-the-loop: audytowalny plan i przejrzyste wykonanie krok po kroku.
Dla agencji i decydentów B2B
Plan-and-Execute to naturalny wzorzec dla przewidywalnych, powtarzalnych procesów wieloetapowych, które w agencjach są codziennością: potoki raportowe, workflow badawcze, produkcja treści. Wzorzec daje dwie rzeczy: możliwe obniżenie kosztów dzięki warstwowaniu modeli oraz plan dostępny z góry do wglądu i weryfikacji. Jedno i drugie trafia dokładnie w wymagania compliance i kontroli budżetu w środowisku B2B w Europie. Pragmatyczna rada z doświadczeń produkcyjnych obowiązuje jednak i tutaj: zacznij od najprostszego wzorca, który działa (zwykle ReAct), i przejdź na Plan-and-Execute dopiero wtedy, gdy uzasadniają to zmierzone tryby awarii, takie jak dryf rozumowania, koszty czy brak globalnego obrazu. Jeśli oceniasz, która architektura agentowa pasuje do Twojego konkretnego przypadku użycia, Blck Alpaca pomoże Ci w wyborze, warstwowaniu modeli i audytowalnym wdrożeniu.
Otwiera czat z przygotowanym promptem.
Najczęściej zadawane pytania
Czym różni się Plan-and-Execute od ReAct?
Za co odpowiada Replanner w Plan-and-Execute?
O ile tańszy jest Plan-and-Execute od ReAct?
Kiedy NIE stosować Plan-and-Execute?
Czy Plan-and-Execute to to samo co wzorzec Orchestrator-Workers od Anthropic?
Chcesz zgłębić temat?
Otrzymuj nowe analizy prosto na swoją skrzynkę albo zobacz, jak wykorzystujemy tę wiedzę w firmach.