Narzędzia zawodzą. API nie odpowiada, limit zapytań zostaje przekroczony, model zwraca niedomknięty JSON. Sposób, w jaki pętla na to reaguje, decyduje o tym, czy agent jest odporny, czy tylko drogi.
Dwa różne rodzaje ponowień
Ponowienie techniczne dotyczy wywołania, które nie doszło do skutku: przekroczony czas oczekiwania, błąd sieci, ograniczenie liczby zapytań. Tu ponowienie ma sens, bo warunki mogą się zmienić.
Ponowienie modelowe dotyczy sytuacji, w której model zwrócił coś niepoprawnego — złą nazwę funkcji, brakujący argument, niepoprawną strukturę. Tu ponowienie oznacza kolejne pełne wywołanie modelu, czyli realny koszt, i ma sens tylko wtedy, gdy do kontekstu wróci informacja, co dokładnie było nie tak.
Backoff
Ponawianie natychmiast po błędzie zwykle pogarsza sytuację, zwłaszcza przy przekroczonych limitach zapytań. Odczekanie rosnącego odstępu przed każdą kolejną próbą, z niewielkim losowym rozrzutem, jest standardową praktyką i zapobiega nakładaniu się prób z wielu równoległych sesji.
Błąd przekazany modelowi też jest kontekstem
Kiedy narzędzie zawodzi ostatecznie, pętla musi zdecydować, co powiedzieć modelowi. Komunikat zrozumiały i konkretny — czego nie udało się zrobić i dlaczego — pozwala modelowi wybrać inną drogę. Pusty wynik albo surowy ślad wyjątku najczęściej prowadzi do zapętlenia, bo model nie odróżnia awarii od braku danych.
Ukryty koszt
Większość frameworków ponawia po cichu. Nieudane wywołania modelu bywają rozliczane, a nie pojawiają się w żadnym logu aplikacji — przy diagnozowaniu nieoczekiwanych rachunków warto zacząć właśnie tutaj.