Mariusz Tober

Lokalny agent w przeglądarce: pierwsze sito na błędy

3 min czytania#testy#agenci#eksploracja

Chciałem sprawdzić, czy agent działający na lokalnym modelu może być pierwszym, tanim sitem przed pracą testera. Miał sam przejść nieznaną aplikację webową i znaleźć prawdziwe błędy. Zależało mi jednak na wyniku, którego nie da się uzyskać przez strojenie promptów pod znane usterki.

Najpierw sprawdziłem model wizyjny. Potrafił zauważyć biały tekst na białym tle, ale podobny problem zgłaszał również wtedy, gdy błędu nie było. Do tego zmyślał treść strony, a jako sterownik nie wykonał żadnego kroku w przeglądarce.

Zrezygnowałem więc z tego podejścia. Agent działa przez Playwrighta, czyta strukturę DOM i tekst strony, a akcje wykonuje narzędziami przeglądarki. Zrzuty ekranu zbiera wyłącznie jako materiał dowodowy.

Pomiar bez poprawiania zasad po fakcie

Do pomiaru wykorzystałem aplikacje przygotowane przez niezależnych autorów. Nie widziałem ich kodu, scenariuszy, katalogu błędów ani wyników cząstkowych. Każdą sprawdzałem wielokrotnie, zarówno z zasianymi usterkami, jak i bez nich. Pojedyncze trafienie nie wystarczało: zgłoszenie musiało powtórzyć się w większości biegów z zasiewem. Osobno liczyłem fałszywe alarmy na czystych wersjach.

Na tej puli lokalna Gemma 4 31B wykryła 30% błędów, a mocny model chmurowy około 87%. W tych próbach różniły się również klienty agentów, więc porównanie obejmowało więcej niż sam model.

Lokalny wariant zgłaszał niewiele fałszywych alarmów i domknął wszystkie biegi. Mimo to nie spełnił podstawowego kryterium: przed startem ustaliłem, że ma znajdować co najmniej połowę zasianych błędów. Nie obniżyłem tej poprzeczki po zobaczeniu wyniku.

Znajdował między innymi błędy obliczeń i trwałości danych. Pozostały jednak całe kategorie bez trafień. Szczególnie wyraźna była luka w autoryzacji: takich błędów nie znalazł żaden badany model, również chmurowy.

Spróbowałem też własnej pętli sterowania, która wymuszała jedną akcję JSON na turę i weryfikowała cytaty. Wykrywalność spadła. Na jednej z aplikacji model niemal cały budżet zużył na ponawianie tej samej zablokowanej akcji. Biegi kończyły się technicznie poprawnie, ale agent wykonywał bardzo mało rzeczywistej pracy. Tę wersję odrzuciłem.

Co udało się oddać

Ten sam silnik przeglądarkowy oddałem w trybie wykonywania planu testów z arkusza XLSX. Agent dostawał instrukcję kroku i oczekiwany wynik.

W niewielkiej próbie na realnych stronach lokalna Gemma wykryła wszystkie sprawdzane błędy bez fałszywych alarmów. Były to jednak wielokrotne próby na tym samym małym zestawie usterek. W pierwszej prawdziwej aplikacji, systemie ERP, pełny scenariusz zamówienia udało mi się wykonać dopiero po kilku podejściach.

Większość wcześniejszych porażek wynikała z braków mojego adaptera: nie radził sobie z niektórymi elementami formularzy, brakowało też etykiet. Swoje dokładał model. Potrafił odpowiedzieć „krok gotowy”, choć na stronie nadal był widoczny błąd walidacji.

W innym przypadku model wystawił PASS, a rozbieżność znalazła deterministyczna formuła w kodzie. To dobrze pokazało, dlaczego sam werdykt modelu mi nie wystarcza.

Dowody sprawdza kod

Każde zgłoszenie musi zawierać cytat. Kod sprawdza, czy rzeczywiście występuje on w zapisanym DOM danego kroku, i odrzuca znaleziska bez dowodu. Obliczenia również wykonuje kod. Awaria modelu otrzymuje status błędu testera, zamiast obciążać wyniki testowanej aplikacji.

Dostęp do aplikacji ograniczyłem bramką kontrolującą dozwolone ścieżki i zapisującą zamiar przed wykonaniem akcji. Model nie dostaje haseł. Musiałem jednak zadbać również o logi błędów, bo gotowy agent potrafił wypisywać argumenty funkcji wypełniającej formularz.

Błędy samego testera potrafiły też zniekształcić pomiar. Niedopasowane limity kontekstu ucinały bieg tuż przed raportem. Źle zamknięty cudzysłów sprawiał, że parser odrzucał wszystkie zgłoszenia. Te problemy usunąłem. Ścisłe porównanie tekstu potrafiło też odrzucić poprawny wynik, gdy strona zawierała dodatkowy opis. Tego nie poprawiałem już po pomiarze zamkniętej puli, żeby nie naginać reguł.

Widzę sens w lokalnym agencie jako pierwszym etapie eksploracji, pod warunkiem uczciwego pomiaru i sprawdzania dowodów w kodzie. Nadal brakuje mi części porównań modeli. Nie zmierzyłem też wydajności Gemmy, bo działała na wynajętej, współdzielonej karcie GPU. Nie wiem, czy osobna faza sprawdzania uprawnień w prompcie poprawi wykrywanie błędów autoryzacji.

Eksploracja pozostała eksperymentem i nie weszła do oddanego produktu. Cały projekt nadal oceniam jako niegotowy do produkcji: kryteria akceptacji nie zostały spełnione.

← Wszystkie wpisy