skutek uboczny

Trwała zmiana stanu poza agentem — wysłany mail, zapis w bazie, płatność, usunięcie danych. Podział narzędzi na odczytujące i wywołujące skutki uboczne jest podstawą wszystkich zabezpieczeń pętli, bo model tego rozróżnienia nie widzi. Występuje w trzech stopniach: odwracalny, odwracalny kosztownie i nieodwracalny.

W Polsce nazywane też:

efekt ubocznyoperacja zapisunarzędzie modyfikującedziałanie w świecie

Podział narzędzi na te, które czytają, i te, które zmieniają świat, jest najważniejszym podziałem w całej architekturze agenta. Wszystkie zabezpieczenia zaczynają się od niego.

Czym jest skutek uboczny

Skutek uboczny to trwała zmiana stanu poza agentem: wysłany mail, zapis w bazie, obciążenie karty, utworzone zamówienie, usunięty plik, opublikowana treść. Narzędzie odczytujące zwraca informację i nie zostawia śladu. Narzędzie ze skutkiem ubocznym zostawia ślad, który istnieje niezależnie od tego, czy przebieg agenta się powiódł.

Dlaczego rozdzielenie jest konieczne

Model nie odróżnia jednego od drugiego — dla niego oba są prośbą o wywołanie funkcji, złożoną z nazwy i argumentów. Rozróżnienie musi istnieć w pętli i pociąga za sobą inne traktowanie: inne uprawnienia, inną walidację, inne reguły ponawiania, inne wymagania wobec zgody użytkownika i inne podejście do zrównoleglania.

Trzy stopnie

Odwracalny: zapis, który da się cofnąć, na przykład zmiana statusu w wewnętrznym systemie.

Odwracalny kosztownie: operacja, którą technicznie da się wycofać, ale która zdążyła wywołać skutki u innych — na przykład opublikowana i zauważona treść.

Nieodwracalny: wysłany mail, wykonany przelew, trwale usunięte dane. Tu jedynym zabezpieczeniem jest niedopuszczenie do wykonania.

Praktyka

Narzędzia warto oznaczać w kodzie w sposób jawny — deklarowanie, czy narzędzie ma skutki uboczne i jakiego stopnia, pozwala pętli podejmować decyzje automatycznie, zamiast polegać na tym, że ktoś pamiętał o dodatkowym sprawdzeniu przy każdym nowym narzędziu.