Kiedy zawodzi węzeł

przez Łukasz | wrz 2, 2026

W pętli awaria narzędzia zatrzymuje przebieg. W grafie zatrzymuje też wszystkich, którzy na ten węzeł czekali — a najgorszy wariant to ten, w którym nikt się o tym nie dowiaduje.

Awaria w pętli jest prosta w tym jednym sensie, że jest widoczna. Narzędzie rzuca wyjątek, pętla musi zdecydować, co z tym zrobić, a jeśli nie zdecyduje, przebieg się kończy i ktoś to zauważy.

W grafie awaria ma inną własność: węzeł ma następników. Coś, co czekało na jego wynik, nie dostanie go — i to, co się wtedy stanie, zależy od decyzji, których większość ludzi nie podejmuje świadomie, tylko odziedzicza po domyślnych ustawieniach narzędzia.

Cztery rodzaje awarii, cztery różne reakcje

Rozróżnienie ma znaczenie, bo reakcja odpowiednia dla jednego rodzaju jest zła dla pozostałych.

Węzeł się wywalił. Wyjątek, timeout, padł proces. Najłatwiejszy przypadek, bo jest jawny. Wiadomo, że coś się stało, i wiadomo gdzie.

Węzeł skończył, ale nie zrobił zadania. Zwrócił wynik, który przeszedł przez wszystkie mechanizmy, a merytorycznie jest pusty albo błędny. To jest odpowiednik syndromu, który u ciebie w Patologii nazywa się „agent kończy, ale zadania nie wykonał” — z tą różnicą, że w grafie ten wynik jedzie dalej i staje się wejściem dla następnika.

Węzeł nie skończył i nie skończy. Utknął w swojej wewnętrznej pętli, czeka na coś, co nie przyjdzie, albo został zabity bez zapisania stanu. Nie ma wyjątku, więc nie ma sygnału.

Węzeł nigdy nie wystartował. Router nie wybrał żadnej krawędzi, złączenie czeka na wejście, którego nikt nie wyprodukował, zadanie zostało zajęte przez wykonawcę, który padł. Najtrudniejszy do wykrycia, bo w logu nie ma nic — dosłownie nie wydarzyło się zdarzenie, którego szukasz.

Ostatni rodzaj jest specyficzny dla grafu. W pętli nie istnieje, bo pętla albo się kręci, albo się skończyła.

Zakleszczenie: cicha awaria grafu

Najgorszy scenariusz nie polega na tym, że coś się wywala. Polega na tym, że graf stoi i wygląda, jakby pracował.

Złączenie czeka na trzy wejścia, dostało dwa. Trzeci węzeł został zajęty przez wykonawcę, który przestał istnieć — zadanie ma status „w toku” i nikt go nie zwolni. Reszta grafu czeka. Żaden monitoring oparty na błędach niczego nie zgłosi, bo błędu nie było.

Trzy mechanizmy, które to rozbrajają, i wszystkie trzeba świadomie włączyć:

Dzierżawa zamiast zajęcia. Wykonawca nie zajmuje zadania na zawsze, tylko na czas — i musi tę dzierżawę odnawiać. Jeśli przestanie, zadanie wraca do kolejki. To jest standardowy mechanizm z systemów kolejkowych i jedyna rzecz, która ratuje przed zadaniami zajętymi przez nieistniejących wykonawców.

Termin na węźle, nie tylko na całości. Limit czasu dla całego zadania nie wystarcza, bo mówi tylko, że coś trwa za długo, i nie mówi gdzie. Osobny termin na węzeł wskazuje miejsce.

Zdarzenie zamiast braku zdarzenia. Monitoring, który patrzy na błędy, nie zobaczy zakleszczenia. Monitoring, który sprawdza, czy zadanie w toku ruszyło się w ostatnich N minutach — zobaczy.

Co zrobić z następnikami

Cztery strategie. Wybór zależy od tego, czy wynik węzła był konieczny, czy tylko przydatny.

Zatrzymać graf. Cała praca staje, zadanie idzie do przeglądu. Właściwe, gdy wynik był konieczny i nie ma sensownego zastępnika. Kosztuje czekanie, ale nie produkuje śmieci.

Iść dalej z brakiem. Następnik dostaje informację, że tego elementu nie ma, i sam decyduje, czy da się bez niego pracować. Wymaga, żeby brak był przekazany jawnie — a nie jako pusta wartość, którą model uzna za odpowiedź.

Objazd. Krawędź awaryjna do węzła zastępczego: prostszego, tańszego, na innym dostawcy. Dobre przy węzłach zależnych od zewnętrznych usług.

Ponowić. Najczęstsza domyślna reakcja i najbardziej ryzykowna w grafie. Powtórzenie węzła po awarii jest bezpieczne tylko wtedy, gdy węzeł nic nie zmienił w świecie zewnętrznym. Jeśli zdążył wysłać, zapisać albo obciążyć — ponowienie robi to drugi raz.

Zasada, która porządkuje wybór: ponawiaj węzły, które tylko czytają. Węzły, które piszą, ponawiaj wyłącznie wtedy, gdy zapis jest idempotentny — czyli gdy wykonanie go dwa razy daje ten sam skutek co jeden.

Brak musi być wartością

To jest rzecz, która wygląda na drobiazg implementacyjny, a jest jedną z częstszych przyczyn cichych błędów w grafach.

Jeśli węzeł zawiódł, a następnik dostaje w stanie puste pole, model potraktuje to jako informację: nic nie znaleziono. Wynik będzie wyglądał poprawnie i będzie nieprawdziwy — bo różnica między „sprawdziliśmy i nie ma” a „nie udało się sprawdzić” jest fundamentalna, a w pustym polu nie widać żadnej z nich.

Awaria musi być zapisana jako stan, nie jako brak stanu. Pole z informacją, że węzeł nie dostarczył wyniku, wraz z powodem. Wtedy następnik ma na czym oprzeć decyzję, a ty masz co znaleźć w logu.

To jest ta sama zasada, która w pętli dotyczy wyniku zawodzącego narzędzia — tylko konsekwencje są większe, bo w grafie ten pusty stan jedzie dalej i mnoży się przez następników.

Jak to sprawdzić u siebie

Test, który nie wymaga czekania na awarię: wyłącz jeden węzeł celowo i zobacz, co się stanie.

Weź graf, który już działa, i zrób trzy przebiegi:

Węzeł rzuca wyjątek. Czy graf się zatrzymał, czy poszedł dalej? Czy dowiedziałeś się o tym, czy zauważyłeś przypadkiem?

Węzeł zwraca pusty wynik bez błędu. Co dostał następnik i jak się zachował? Czy w wyniku końcowym widać, że czegoś brakowało?

Węzeł nie odpowiada w ogóle — zasymuluj to opóźnieniem dłuższym niż jakikolwiek limit. Czy cokolwiek zgłosiło, że zadanie stoi? Po jakim czasie?

Trzeci przebieg jest zwykle najbardziej pouczający, bo w większości grafów zbudowanych bez świadomej decyzji odpowiedź brzmi: nic nie zgłosiło i stoi do dziś.

Co dalej

Wiadomo już, co robić, gdy węzeł zawiedzie. Zostaje pytanie, którego ten artykuł dotknął tylko przy ponowieniach: co węzłowi wolno zrobić, zanim zawiedzie.

Bo część awarii nie polega na tym, że coś się nie udało — tylko na tym, że udało się coś, czego udać się nie powinno.

O tym jest artykuł siódmy: Granice, których nie egzekwuje agent.


Stan na sierpień 2026. Mechanizmy opisane wyżej — dzierżawa zadania, terminy per węzeł, idempotentność zapisu — pochodzą z systemów rozproszonych i kolejkowych. W narzędziach agentowych bywają dostępne, ale rzadko domyślnie włączone.

Agent kończy, ale zadania nie wykonał

Agent kończy, ale zadania nie wykonał

Objawy Agent odpowiada: „Przygotowałem i wysłałem potwierdzenie do klienta." Potwierdzenie nie zostało wysłane. Albo: „Zaktualizowałem wszystkie rekordy" — zaktualizował trzy z dwunastu. Albo: „Nie znalazłem żadnych zamówień" — bo narzędzie zwróciło błąd, którego nikt...

Agent zrobił coś, o co nikt nie prosił

Agent zrobił coś, o co nikt nie prosił

Objawy Operacja, której nikt nie zlecił. Dane wysłane pod adres, którego nie ma w żadnej konfiguracji. Rekord zmieniony poza zakresem zadania. Odpowiedź, z której wynika, że agent dostał instrukcje od kogoś innego niż ty. Cecha wspólna: technicznie wszystko zadziałało...

Agent zrobił to samo dwa razy

Agent zrobił to samo dwa razy

Objawy Ten syndrom różni się od pozostałych jedną rzeczą: objaw widzi klient, nie ty. Trzy identyczne wiadomości w skrzynce. Dwa zamówienia zamiast jednego. Podwójne obciążenie. Duplikaty rekordów, które ktoś zauważa tydzień później. W twoim dzienniku wszystko wygląda...

Agent gubi wątek w długim zadaniu

Agent gubi wątek w długim zadaniu

Objawy Pierwsze kroki idą wzorowo. Po kilkunastu agent zaczyna się rozjeżdżać. Przestaje przestrzegać reguły z promptu systemowego, której trzymał się na początku. Zmienia format odpowiedzi w połowie zadania. Wraca do czegoś, co już ustalił, i ustala to inaczej....

Agent podaje dane, których nie ma

Agent podaje dane, których nie ma

Objawy Numer zamówienia w idealnym formacie, którego nie ma w bazie. Kwota, której w dokumencie nie ma. Nazwa pola API, które nigdy nie istniało. Cytat z regulaminu, brzmiący dokładnie jak reszta regulaminu i w nim nieobecny. Cecha wspólna wszystkich tych przypadków:...

Działał wczoraj, dziś nie działa

Działał wczoraj, dziś nie działa

Objawy Nic się nie wywala. Nie ma wyjątków, nie ma timeoutów, dziennik wygląda tak samo jak zawsze. Po prostu odpowiedzi są gorsze. Postacie, w jakich to się objawia: Jakość. Agent zaczyna pomijać kroki, które wcześniej wykonywał, albo odpowiada ogólniej. Format....

Agent wybiera złe narzędzie

Agent wybiera złe narzędzie

Objawy Agent odpowiada nie na to pytanie. Pobiera listę zamówień, gdy pytano o jedno konkretne. Odpowiada z pamięci, choć miał sprawdzić w bazie. Albo sięga po właściwe narzędzie i wpisuje w argumenty coś, czego nie da się użyć. Sygnał, który odróżnia ten syndrom od...

Agent kręci się w kółko

Agent kręci się w kółko

Objawy Agent wykonuje kolejne obroty pętli, nie zbliżając się do zakończenia zadania. W dzienniku widać jedną z trzech postaci. Powtórzenie. To samo narzędzie, te same argumenty, raz za razem — czasem dziesiątki razy pod rząd. Oscylacja. Agent wywołuje na przemian dwa...