Węzeł, krawędź, stan — z czego składa się graf wykonania

przez Łukasz | wrz 2, 2026

Cztery elementy, z których trzeci sprawia najwięcej kłopotu, a czwarty jest pomijany najczęściej.

Odpowiedź „graf składa się z agentów” jest niepełna i prowadzi na manowce. Prowadzi do architektury, w której wszystko, co się dzieje, jest czyimś rozumowaniem — czyli do systemu droższego, wolniejszego i mniej przewidywalnego, niż musiał być.

Graf wykonania ma cztery elementy. Trzy z nich mają odpowiedniki w pętli, więc będą znajome. Czwarty w pętli nie istnieje i dlatego bywa dobudowywany na końcu, gdy jest już za późno.

Węzeł: co istnieje

Węzeł to miejsce, w którym coś się wykonuje. Nie musi być agentem i najczęściej nie powinien.

Agent. Prowadzi własną pętlę, sam decyduje o krokach. Drogi, wolny, niepowtarzalny w wyniku. Używasz go tam, gdzie potrzebny jest osąd.

Funkcja deterministyczna. Zwykły kod. Pobranie danych, przeliczenie, zapis, wysyłka. Tani, szybki, dający ten sam wynik za każdym razem. Większość węzłów w dobrze zaprojektowanym grafie to właśnie ten typ.

Router. Podejmuje jedną decyzję: dokąd dalej. Może być warunkiem w kodzie albo wywołaniem modelu z jednym pytaniem. Rozdzielenie routingu od pracy jest jedną z niewielu rzeczy, które warto zrobić od razu — bo wtedy widać w logu, dlaczego graf poszedł tą, a nie inną ścieżką.

Złączenie. Czeka na kilka wejść i scala je w jedno. Wygląda niewinnie, dopóki nie okaże się, że jedno z wejść nigdy nie przyjdzie.

Punkt zatwierdzenia. Zatrzymuje wykonanie i czeka na człowieka. Jedyny typ węzła, którego niezawodność spada z częstotliwością użycia — o tym jest osobny artykuł w tym torze.

Praktyczna zasada przy projektowaniu: jeśli węzeł da się zrobić funkcją, zrób go funkcją. Agent w miejscu, gdzie wystarczy if, to koszt bez korzyści i jedno miejsce mniej, w którym rozumiesz, co się stało.

Krawędź: co wolno po czym

Krawędź to nie strzałka na diagramie, tylko odpowiedź na pytanie, jakie przejścia są dozwolone i kto komu może przekazać pracę.

Dwie rzeczy warto tu rozdzielić, bo mieszają się notorycznie.

Krawędź dozwolona to część projektu: z węzła A można przejść do B albo do C, nigdzie indziej. To jest granica, którą ustalasz z góry — nawet w grafie, w którym droga powstaje w trakcie.

Krawędź wybrana to rozstrzygnięcie w czasie działania: tym razem poszliśmy do C. To jest to, co odróżnia graf wykonania od grafu przepływu — nie brak reguł, tylko to, że wybór spośród nich zapada w trakcie.

Konsekwencja, którą warto zapisać: graf agentowy nie znaczy „agent robi, co chce”. Znaczy, że wybiera spośród przejść, na które pozwoliłeś. Jeśli twój graf pozwala na wszystko z wszystkiego, nie zbudowałeś grafu — zbudowałeś jedną wielką pętlę z dodatkowymi kosztami.

Stan: co płynie po krawędziach

Tu zaczynają się kłopoty, bo w pętli stan był prosty: historia rosła, wszystko trafiało do kontekstu, model nie pamiętał niczego, a ciągłość utrzymywał kod.

W grafie stan ma trzy właściwości, których w pętli nie miał.

Jest współdzielony. Kilka węzłów czyta i zapisuje to samo. Powstaje pytanie, którego wcześniej nie było: co się dzieje, gdy dwa zapisy dotyczą tego samego pola.

Przeżywa węzeł. Węzeł się kończy, stan zostaje. To dobrze — na tym polega ciągłość między przebiegami. Ale znaczy też, że stan musi mieszkać poza procesem wykonawczym, czyli w bazie albo kolejce, a nie w pamięci.

Nie jest tym samym co kontekst. To jest rozróżnienie, które warto wbić na stałe. Stan grafu to prawda o zadaniu. Kontekst węzła to to, co dostał model przy konkretnym wywołaniu. Węzeł zwykle dostaje wycinek stanu, nie całość — i decyzja o tym, który wycinek, jest osobną decyzją projektową o dokładnie takich samych konsekwencjach kosztowych jak w pętli.

Praktycznie: jeśli każdy węzeł dostaje cały stan, płacisz kwadratowy rachunek pomnożony przez liczbę węzłów. To jest najczęstszy sposób, w jaki graf robi się nieprzyzwoicie drogi.

Granice uprawnień: czego nie wolno, niezależnie od decyzji

Czwarty element, w pętli nieobecny, bo pętla ma jeden zestaw uprawnień i nie ma czego rozdzielać.

W grafie każdy węzeł może mieć własne: inny model, innego dostawcę, inny katalog roboczy, inną politykę sieciową, inny zestaw narzędzi. I to nie jest funkcja, którą ktoś dobudował — przy architekturze, w której każdy węzeł jest osobnym procesem, heterogeniczność jest konsekwencją, nie dodatkiem.

Scenariusz, który to unaocznia: większość węzłów działa na modelu lokalnym, w kontenerze bez wyjścia do sieci, na plikach. Jeden ma dostęp do internetu i zapisuje wyniki do współdzielonego katalogu. Węzeł analizujący czyta ten katalog i nie ma jak niczego wysłać, bo jego kontener nie ma ścieżki na zewnątrz.

Kluczowe jest to, gdzie mieszka ograniczenie. Instrukcja w prompcie to życzenie — agent poproszony o dane, których nie ma, będzie ich szukał każdą dostępną drogą. Odcięty ruch wychodzący to fakt.

Ta sama zasada dotyczy budżetu. Sprawdzenie limitu przed uruchomieniem węzła jest granicą. Raport o przekroczeniu po fakcie jest sprawozdaniem.

Z jednym zastrzeżeniem, którego nie wolno pominąć: hamulec zewnętrzny jest wart tyle, ile zabezpieczenie panelu, który nim steruje. Opisywaliśmy na cyberflux.pl łańcuch wywołań dający nieuwierzytelnionemu atakującemu kontrolę nad instancją orkiestratora — a więc również nad wszystkimi budżetami, które w niej ustawiono.

Jak to sprawdzić u siebie

Weź proces, o którym myślisz, i wypisz go w czterech kolumnach, zanim cokolwiek zaimplementujesz. Kartka wystarczy.

Węzły — wypisz je i przy każdym dopisz typ. Policz, ile z nich to agenty. Jeśli więcej niż połowa, wróć i sprawdź, które dałoby się zamienić na funkcję.

Krawędzie — dla każdego węzła wypisz, dokąd wolno przejść. Jeśli przy którymś napiszesz „wszędzie”, masz tam problem projektowy, nie elastyczność.

Stan — wypisz pola, które przeżywają pojedynczy węzeł. Przy każdym zaznacz, kto zapisuje. Jeśli zapisujących jest więcej niż jeden, to jest miejsce na konflikt.

Granice — przy każdym węźle dopisz, czego mu nie wolno. Jeśli przy którymś nie umiesz nic wpisać, to znaczy, że wolno mu wszystko.

Ostatnia kolumna jest zwykle najbardziej pusta i zwykle najbardziej potrzebna.

Co dalej

Cztery elementy opisują graf statycznie. Zostaje pytanie, które w tym artykule pojawiło się przy krawędziach i zostało odłożone: kto właściwie rozstrzyga, którą krawędzią pójdzie wykonanie — i co się zmienia, gdy decyzja zapada z góry, a co, gdy w trakcie.

To jest jedyna różnica, która naprawdę dzieli dwa podejścia do orkiestracji, i od niej zależy koszt, przewidywalność i sposób debugowania całości.

O tym jest artykuł czwarty: Kto rysuje krawędź — z góry czy w trakcie.


Stan na sierpień 2026. Podział na cztery elementy jest uogólnieniem z dokumentacji narzędzi orkiestrujących i z opracowań branżowych — poszczególne frameworki nazywają je różnie i nie wszystkie wyodrębniają granice uprawnień jako osobną warstwę.

Model nie pamięta — pamięta produkt

Model nie pamięta — pamięta produkt

Model nie pamięta ani jednego słowa z waszej poprzedniej wymiany. Wagi są zamrożone, między turami nie zapisuje się nic, a wrażenie ciągłości powstaje przez mechanizm tak prosty, że po jego poznaniu przestaje dziwić połowa rzeczy z tej serii — łącznie z rachunkiem za...

Czego nie widzisz w oknie czatu

Czego nie widzisz w oknie czatu

Okno czatu wygląda jak najkrótsza możliwa droga do modelu, a jest najdłuższą. Między twoim zdaniem a wagami stoi więcej warstw niż w wywołaniu API — i żadnej z nich nie widzisz, nie ustawiasz i nie możesz wyłączyć. W poprzednim torze rozkładaliśmy to, co dzieje się na...