Agent AI, który wdrożyłem, przeszedł 23 testy jednostkowe, ale w ciągu godziny od uruchomienia na produkcji wymyślił nową funkcję produktu i podał cenę trzykrotnie niższą od rzeczywistej. Gdy użytkownik to wytknął, bot nie wycofał się ze swojej odpowiedzi, rozmowa została przerwana, a ja straciłem klienta. Ten błąd udowodnił, że zestaw deterministycznych testów jednostkowych nie może zagwarantować niezawodności agenta.

Dlaczego testy jednostkowe nie wystarczają w przypadku agentów AI

Testy jednostkowe działają w tradycyjnym kodzie, ponieważ ten sam zestaw danych wejściowych zawsze daje ten sam wynik. „2 + 2 = 4” to gwarancja, którą można zweryfikować prostym sprawdzeniem równości. Agent oparty na LLM zmienia jednak swój wynik w zależności od promptu, kontekstu oraz stanu wywoływanych narzędzi zewnętrznych. Test sprawdzający dokładną równość ciągów znaków nie wyłapie halucynacji, zmian tonu czy naruszeń mechanizmów kontrolnych (guardrails). Cicha awaria, która kosztowała mnie klienta, pokazuje, że należy oceniać całą interakcję, a nie tylko odizolowane funkcje.

Budowanie szkieletu ewaluacyjnego przed napisaniem kodu jakiejkolwiek funkcji

Zmieniłem kolejność prac: najpierw zaprojektowałem czterowarstwowy szkielet ewaluacyjny, a dopiero potem napisałem agenta. Szkielet wykonuje 131 testów w jednym przebiegu, kosztuje około trzech centów za uruchomienie i kończy pracę w około jedenaście minut. Każdemu testowi przypisuję najmniejszy model, który jest w stanie go obsłużyć, rezerwując większe i droższe modele na momenty, w których naprawdę wnoszą one wartość.

Warstwa 1 – Funkcjonalność narzędzi

Pierwsza linia obrony sprawdza, czy agent potrafi poprawnie wywoływać swoje narzędzia. Testy obejmują udane wyszukiwania, celowo błędne zapytania oraz symulowane awarie API. Ponieważ użycie narzędzi jest w dużej mierze deterministyczne – zapytanie jest albo sformułowane poprawnie, albo API zwraca błąd – wystarczą proste asercje w Pythonie. Wyłapanie błędnego zapytania na tym etapie zapobiega chaosowi w dalszych etapach procesu.

Warstwa 2 – Przestrzeganie instrukcji

Następnie szkielet weryfikuje, czy agent przestrzega mechanizmów kontrolnych. Mniejszy model LLM pełni rolę ewaluatora, skanując odpowiedź agenta pod kątem zgodności: trzymania się roli, unikania zakazanych tematów i generowania wymaganego schematu JSON. Ta warstwa wyłapuje dryf semantyczny, którego nie zauważą testy jednostkowe, taki jak przybranie niezamierzonej persony lub wyciek wewnętrznych promptów.

Warstwa 3 – Zachowanie ukierunkowane na cel

Trzecia warstwa jest najważniejsza. Odpowiada na pytanie, czy agent faktycznie realizuje swój cel. W przypadku bota do generowania leadów oznacza to potwierdzenie, że zadaje właściwe pytania kwalifikujące i przekazuje rozmowę do człowieka w odpowiednim momencie. Używam tutaj modelu zorientowanego na rozumowanie, ponieważ potrafi on ocenić ogólny przebieg rozmowy bez nadmiernego zwiększania kosztów. Jeśli bot nie osiągnie swojego celu – nawet jeśli przejdzie dwie pierwsze warstwy – zostaje oznaczony do przeprojektowania.

Warstwa 4 – Wydajność

Na koniec szkielet rejestruje opóźnienia (latency) oraz prędkość generowania tokenów. Powolne odpowiedzi obniżają komfort użytkownika, szczególnie w czacie w czasie rzeczywistym. Śledząc te metryki obok poprawności funkcjonalnej, mam pewność, że agent jest zarówno dokładny, jak i responsywny.

Oszczędności kosztowe

Kwota 0,03 USD za przebieg nie jest chwytem marketingowym; wynika ona z dopasowania złożoności testu do wielkości modelu. Deterministyczne sprawdzenia narzędzi działają na najtańszym środowisku uruchomieniowym, zgodność instrukcji wykorzystuje lekki model, a jedynie oceny zorientowane na cel wywołują bardziej zaawansowany, choć droższy model. Takie podejście warstwowe pozwala utrzymać całkowite koszty na poziomie umożliwiającym uruchamianie pełnego zestawu testów przy każdej zmianie w kodzie.

Kompromis: szybkość kontra bezpieczeństwo

Wprowadzenie szkieletu ewaluacyjnego dodało początkowe trudności. Cykle deweloperskie wydłużyły się, a harmonogram wdrożenia uległ przesunięciu.

Na co zwrócić uwagę w przyszłości

  • Ewaluatorzy sterowani modelami: W miarę doskonalenia się modeli LLM, ewaluator w Warstwie 2 może stać się bardziej subtelny, co pozwoli na redukcję wyników fałszywie dodatnich przy jednoczesnym wykrywaniu drobnych naruszeń polityki.

Podsumowanie

Jeśli budujesz agentów AI do użytku produkcyjnego, czterowarstwowy szkielet ewaluacyjny nie jest opcją – jest fundamentem. Przenosząc koszty kompleksowego testowania na wczesny etap – 0,03 USD za przebieg, jedenaście minut na zestaw – chronisz się przed cichymi awariami, których testy jednostkowe po prostu nie są w stanie wykryć.