Патерн PRG для ШІ-агентів
ШІ-агенти повторюють 25-річну помилку.
У 90-х вебформи мали серйозну помилку. Користувач оформлював замовлення, натискав оновити, і браузер надсилав замовлення знову. Це призводило до подвійного списання коштів і одного розгніваного клієнта.
Виправленням став патерн Post/Redirect/Get (PRG). Він працює так:
- Користувач надсилає POST-запит для подання даних.
- Сервер обробляє дані.
- Сервер надсилає редирект на нову URL-адресу.
- Браузер виконує GET-запит, щоб показати результат.
Якщо користувач натискає оновити, він лише повторює GET-запит. Небезпечний POST-запит зникає.
ШІ-агенти повернули цю помилку.
Коли агент викликає інструмент для списання коштів з картки або створення запису, мережа може зникнути. Агент не знає, чи спрацювала дія. Він намагається знову. Тепер у клієнта два списання.
Це можна виправити за допомогою ключів ідемпотентності. Ключ ідемпотентності діє як редирект. Він відокремлює «виконання дії» від «показу результату».
Патерн для агентів має виглядати так:
- Агент генерує унікальний ключ перед першою спробою.
- Він використовує стабільне значення, наприклад, ID користувача та ID кошика.
- Він надсилає цей ключ із кожним викликом інструменту.
- Сервер перевіряє ключ. Якщо він бачить цей ключ знову, він повертає попередній результат замість того, щоб виконувати дію двічі.
Для тривалих завдань вам потрібно більше, ніж просто ключ. Вам потрібне створення контрольних точок (checkpointing). Ви повинні зберігати стан на кожному кроці. Це гарантує, що після перезапуску робота продовжиться з того місця, де вона зупинилася.
Дотримуйтесь цих правил для будь-якого інструмента агента, який змінює дані:
- Кожен інструмент, що змінює дані (mutating tool), повинен приймати ключ ідемпотентності.
- Похідний ключ має базуватися на намірах користувача, а не на часовій мітці.
- Генеруйте ключ перед першою спробою.
- Використовуйте той самий ключ під час кожної повторної спроби.
- Для тривалих завдань створюйте контрольні точки для кожного проміжного кроку.
Рівень змінюється, але логіка залишається незмінною.
Додаткова спільнота для навчання: https://t.me/GyaanSetuAi
