Паттерн PRG для ИИ-агентов

ИИ-агенты столкнулись со старой проблемой. Это тот же самый баг, который ломал веб-формы в 90-х.

В старые времена веба пользователь отправлял форму. Если он нажимал «обновить», браузер повторно отправлял данные. Это приводило к дублированию заказов, списаний или писем.

Решением стал паттерн Post/Redirect/Get (PRG).

Логика проста:

  • Пользователь отправляет POST-запрос.
  • Сервер обрабатывает задачу.
  • Сервер отправляет 302 Redirect на новый URL.
  • Браузер переходит по редиректу с помощью GET-запроса.

Теперь обновление страницы просто перезагружает страницу с результатом. Оно не повторяет действие.

ИИ-агенты вернули этот баг на новый уровень.

Когда агент вызывает инструмент для списания средств с карты или создания записи, что-то идет не так. Происходит обрыв соединения. Перезапускается контейнер. Срабатывает ограничение частоты запросов (rate limit). Агент не знает, прошел ли последний вызов. Поэтому он пробует снова.

Без исправления агент создает дубликаты заказов и злит клиентов повторными списаниями.

Вам необходимо применить паттерн PRG к вашим агентским пайплайнам, используя ключи идемпотентности.

Ключ идемпотентности — это ваш редирект. Он отделяет действие от результата.

Как это реализовать:

  • Каждый инструмент, изменяющий состояние (mutating tool), должен принимать ключ идемпотентности.
  • Генерируйте ключ перед первой попыткой.
  • Выводите ключ из намерения пользователя (intent), а не из временной метки.
  • Сервер должен проверять, видел ли он этот ключ ранее.
  • Если ключ уже существует, верните сохраненный результат вместо повторного выполнения задачи.

Для длительных задач одного ключа недостаточно. Вам нужно создание контрольных точек (checkpointing).

Checkpointing сохраняет состояние на каждом этапе. Если агент упадет на середине двадцатиминутной задачи, он продолжит с того места, где остановился, а не начнет заново.

Если вы можете сделать только что-то одно, сделайте так, чтобы каждый вызов инструмента можно было безопасно выполнить дважды.

Создавайте своих агентов, учитывая эти пять проверок:

  • Принимает ли каждый инструмент ключ идемпотентности?
  • Основан ли ключ на намерении, а не на времени?
  • Используется ли один и тот же ключ при каждой повторной попытке?
  • Возвращает ли сервер сохраненные результаты для дублирующихся ключей?
  • Сохраняются ли промежуточные шаги для длительных задач?

Паттерн тот же самый. Изменился только уровень.

Источник: https://dev.to/ravikiran438/the-prg-pattern-for-ai-agents-a-25-year-old-fix-coming-of-age-in-a-new-era-23fh