The PRG Pattern for AI Agents
Agenci AI powtarzają błąd sprzed 25 lat.
W latach 90. formularze internetowe miały poważny błąd. Użytkownik składał zamówienie, odświeżał stronę, a przeglądarka wysyłała zamówienie ponownie. Prowadziło to do podwójnego obciążenia i jednego wściekłego klienta.
Rozwiązaniem był wzorzec Post/Redirect/Get (PRG). Działa on w następujący sposób:
- Użytkownik wysyła żądanie POST, aby przesłać dane.
- Serwer przetwarza dane.
- Serwer wysyła przekierowanie pod nowy adres URL.
- Przeglądarka wykonuje żądanie GET, aby wyświetlić wynik.
Jeśli użytkownik odświeży stronę, powtórzy jedynie żądanie GET. Niebezpieczne żądanie POST znika.
Agenci AI przywrócili ten błąd.
Gdy agent wywołuje narzędzie, aby obciążyć kartę lub utworzyć rekord, połączenie sieciowe może zostać przerwane. Agent nie wie, czy akcja się powiodła, więc próbuje ponownie. W efekcie klient zostaje obciążony dwukrotnie.
Można to naprawić, stosując klucze idempotencji. Klucz idempotencji działa jak przekierowanie. Oddziela on „wykonanie czynności” od „wyświetlenia wyniku”.
Wzorzec dla agentów powinien wyglądać następująco:
- Agent generuje unikalny klucz przed pierwszą próbą.
- Używa on stabilnej wartości, takiej jak ID użytkownika i ID koszyka.
- Przesyła ten klucz przy każdym wywołaniu narzędzia.
- Serwer sprawdza klucz. Jeśli ponownie zobaczy ten sam klucz, zwróci poprzedni wynik zamiast wykonywać akcję dwukrotnie.
W przypadku długotrwałych zadań potrzebujesz czegoś więcej niż tylko klucza. Potrzebujesz punktów kontrolnych (checkpointing). Musisz zapisywać stan na każdym etapie. Zapewnia to, że po ponownym uruchomieniu proces będzie kontynuowany od miejsca, w którym został przerwany.
Stosuj te zasady dla każdego narzędzia agenta, które zmienia dane:
- Każde narzędzie zmieniające stan musi przyjmować klucz idempotencji.
- Klucz należy wyprowadzać z intencji użytkownika, a nie z sygnatury czasowej.
- Generuj klucz przed pierwszą próbą.
- Przy każdej ponownej próbie używaj tego samego klucza.
- W przypadku długich zadań twórz punkty kontrolne po każdym kroku pośrednim.
Warstwa się zmienia, ale logika pozostaje ta sama.
Optional learning community: https://t.me/GyaanSetuAi
