Ваш ШІ-агент здійснить подвійне списання коштів у разі втрати відповіді
Якщо ваш ШІ-агент викликає інструмент для списання коштів з картки, а мережа перериває відповідь, ваш агент зазнає невдачі. Він двічі списує кошти з клієнта, навіть не знаючи про це.
Гроші вже переказані. Агент так і не отримав «ok». Він робить те саме, що й будь-який цикл повторних спроб: намагається знову. Він використовує той самий промпт і ті самі аргументи. Це призводить до повторного списання.
Повторна спроба — це не мережева подія. Це рішення щодо побічного ефекту, який, можливо, вже відбувся.
Стандартні інструменти повторних спроб, такі як backoff та jitter, роблять повтори «ввічливими». Вони ніяк не запобігають подвійним списанням.
Вам потрібен реєстр ідемпотентності (idempotency ledger). Він використовує унікальний ключ, щоб гарантувати, що дія відбудеться не більше одного разу.
Виклик інструменту може завершитися невдачею двома способами:
- Запит було втрачено. Дія не відбулася. Повторна спроба є безпечною.
- Відповідь було втрачено. Дія вже відбулася. Повторна спроба призводить до дублювання.
Для агента вони виглядають однаково. Обидва випадки схожі на таймаут або розрив з'єднання.
Якщо інструмент має побічний ефект, такий як платіж, електронний лист або повернення коштів, ви не можете покладатися на прості повторні спроби. Ви повинні використовувати ключ ідемпотентності (idempotency key).
Як це виправити:
- Тегуйте свої інструменти. Визначте, які інструменти мають незворотні побічні ефекти.
- Використовуйте детерміновані ключі. Створюйте стабільний ключ на основі ID робочого процесу (workflow ID), кроку та аргументів. Робіть це до того, як LLM зможе змінити аргументи.
- Використовуйте ключі провайдерів. Якщо ви використовуєте Stripe, передавайте їхній ключ ідемпотентності. Провайдер має розпізнати повтор, щоб зупинити списання.
- Створіть реєстр для власних інструментів. Для побічних ефектів, за які відповідаєте ви, використовуйте таблицю бази даних з унікальним обмеженням (unique constraint). Це гарантує, що ваша система зафіксує результат перед тим, як спробувати знову.
Не плутайте «at-least-once» (щонайменше один раз) з «exactly-once» (рівно один раз). У розподілених системах «exactly-once» досягається шляхом поєднання доставки «at-most-once» (не більше одного разу) з повторними спробами «at-least-once» та реєстром дедуплікації.
Припиніть ставитися до операцій запису так само, як до операцій читання. Повторна спроба читання безкоштовна. Повторна спроба запису коштує грошей.
Джерело: https://dev.to/0012303/your-ai-agent-will-double-charge-on-a-lost-response-5eed
Додаткова спільнота для навчання: https://t.me/GyaanSetuAi