Tu agente de IA realizará un doble cargo ante una respuesta perdida
Si tu agente de IA llama a una herramienta para cobrar una tarjeta y la red pierde la respuesta, tu agente fallará de forma deficiente. Realizará un doble cargo al cliente sin saberlo.
El dinero ya se movió. El agente nunca escuchó un "ok". Hace lo que hace cualquier bucle de reintento: lo intenta de nuevo. Utiliza el mismo prompt y los mismos argumentos. Esto provoca un segundo cargo.
Un reintento no es un evento de red. Es una decisión sobre un efecto secundario que puede haber ocurrido ya.
Las herramientas de reintento estándar, como el backoff y el jitter, hacen que los reintentos sean educados. No hacen nada para evitar los dobles cargos.
Necesitas un registro de idempotencia (idempotency ledger). Este utiliza una clave única para garantizar que una acción ocurra como máximo una vez.
Hay dos formas en las que falla la llamada a una herramienta:
- La solicitud se perdió. La acción nunca ocurrió. Reintentar es seguro.
- La respuesta se perdió. La acción ya ocurrió. Reintentar provoca un duplicado.
Para un agente, ambos parecen idénticos. Ambos parecen un timeout o una conexión perdida.
Si una herramienta tiene un efecto secundario como un pago, un correo electrónico o un reembolso, no puedes confiar en reintentos simples. Debes usar una clave de idempotencia (idempotency key).
Cómo solucionar esto:
- Etiqueta tus herramientas. Identifica qué herramientas tienen efectos secundarios irreversibles.
- Usa claves deterministas. Crea una clave estable basada en el ID del flujo de trabajo (workflow ID), el paso y los argumentos. Haz esto antes de que el LLM pueda cambiar los argumentos.
- Usa claves del proveedor. Si usas Stripe, pasa su clave de idempotencia. El proveedor debe reconocer la repetición para detener el cargo.
- Construye un registro para tus propias herramientas. Para los efectos secundarios que tú controlas, utiliza una tabla de base de datos con una restricción de unicidad (unique constraint). Esto garantiza que tu sistema registre el resultado antes de volver a intentarlo.
No confundas "al menos una vez" (at-least-once) con "exactamente una vez" (exactly-once). En sistemas distribuidos, obtienes "exactamente una vez" combinando la entrega "como máximo una vez" (at-most-once) con reintentos "al menos una vez" y un registro de deduplicación.
Deja de tratar las escrituras como lecturas. Reintentar una lectura es gratis. Reintentar una escritura cuesta dinero.
Fuente: https://dev.to/0012303/your-ai-agent-will-double-charge-on-a-lost-response-5eed
Comunidad de aprendizaje opcional: https://t.me/GyaanSetuAi