Il pattern PRG per gli agenti AI
Gli agenti AI si stanno imbattuti in un vecchio problema. È lo stesso bug che mandava in tilt i moduli web negli anni '90.
Nei vecchi tempi del web, un utente inviava un modulo. Se premeva aggiorna, il browser reinviava i dati. Ciò significava due ordini, due addebiti o due email.
La soluzione fu il pattern Post/Redirect/Get (PRG).
La logica è semplice:
- L'utente invia una richiesta POST.
- Il server elabora il lavoro.
- Il server invia un redirect 302 a un nuovo URL.
- Il browser segue il redirect con una richiesta GET.
Un aggiornamento ora ricarica solo la pagina dei risultati. Non ripete l'azione.
Gli agenti AI hanno riportato questo bug a un nuovo livello.
Quando un agente chiama uno strumento per addebitare una carta o creare un record, le cose vanno male. Si verifica una caduta di rete. Un container si riavvia. Scatta un rate limit. L'agente non sa se l'ultima chiamata ha avuto successo. Quindi, riprova.
Senza una soluzione, l'agente crea ordini duplicati e addebita costi a clienti arrabbiati.
Devi applicare il pattern PRG alle tue pipeline agentiche utilizzando chiavi di idempotenza.
La chiave di idempotenza è il tuo redirect. Separa l'azione dal risultato.
Come implementarlo:
- Ogni strumento che modifica lo stato deve accettare una chiave di idempotenza.
- Genera la chiave prima del primo tentativo.
- Deriva la chiave dall'intento dell'utente, non da un timestamp.
- Il server deve controllare se ha già visto la chiave in precedenza.
- Se la chiave esiste, restituisci il risultato memorizzato invece di eseguire nuovamente il task.
Per i task lunghi, hai bisogno di qualcosa di più di una semplice chiave. Hai bisogno del checkpointing.
Il checkpointing salva lo stato ad ogni passaggio. Se l'agente crasha a metà di un task di venti minuti, riprende da dove si era interrotto. Non ricomincia da capo.
Se puoi fare solo una cosa, rendi ogni chiamata agli strumenti sicura da eseguire due volte.
Costruisci i tuoi agenti con questi cinque controlli:
- Ogni strumento accetta una chiave di idempotenza?
- La chiave si basa sull'intento piuttosto che sul tempo?
- La chiave viene riutilizzata ad ogni tentativo?
- Il server restituisce i risultati memorizzati per chiavi duplicate?
- Gli step intermedi sono salvati per i task lunghi?
Il pattern è lo stesso. Solo il livello è cambiato.
