O Padrão PRG para Agentes de IA
Agentes de IA estão enfrentando um problema antigo. É o mesmo bug que quebrava formulários web nos anos 90.
Nos velhos tempos da web, um usuário enviava um formulário. Se ele atualizasse a página, o navegador reenviaria os dados. Isso significava dois pedidos, duas cobranças ou dois e-mails.
A solução foi o padrão Post/Redirect/Get (PRG).
A lógica é simples:
- O usuário envia uma requisição POST.
- O servidor processa o trabalho.
- O servidor envia um redirecionamento 302 para uma nova URL.
- O navegador segue o redirecionamento com uma requisição GET.
Uma atualização agora apenas recarrega a página de resultado. Ela não repete a ação.
Agentes de IA trouxeram esse bug de volta para uma nova camada.
Quando um agente chama uma ferramenta para cobrar um cartão ou criar um registro, as coisas dão errado. Ocorre uma queda de rede. Um contêiner reinicia. Um limite de taxa é atingido. O agente não sabe se a última chamada funcionou. Então, ele tenta novamente.
Sem uma correção, o agente cria pedidos duplicados e cobra clientes irritados.
Você deve aplicar o padrão PRG aos seus pipelines de agentes usando chaves de idempotência.
A chave de idempotência é o seu redirecionamento. Ela separa a ação do resultado.
Como implementar:
- Toda ferramenta de mutação deve aceitar uma chave de idempotência.
- Gere a chave antes da primeira tentativa.
- Derive a chave da intenção do usuário, não de um timestamp.
- O servidor deve verificar se já viu a chave antes.
- Se a chave existir, retorne o resultado armazenado em vez de executar a tarefa novamente.
Para tarefas longas, você precisa de mais do que apenas uma chave. Você precisa de checkpointing.
O checkpointing salva o estado em cada etapa. Se o agente falhar no meio de uma tarefa de vinte minutos, ele retoma de onde parou. Ele não começa do zero.
Se você puder fazer apenas uma coisa, torne cada chamada de ferramenta segura para ser executada duas vezes.
Construa seus agentes com estas cinco verificações:
- Toda ferramenta aceita uma chave de idempotência?
- A chave é baseada na intenção em vez do tempo?
- A chave é reutilizada em cada tentativa?
- O servidor retorna resultados armazenados para chaves duplicadas?
- As etapas intermediárias são salvas para tarefas longas?
O padrão é o mesmo. Apenas a camada mudou.
