Построение безопасного конвейера доставки для агентов

В большинстве демо-версий агентов упускается жизненно важный вопрос. Как позволить автономной системе отправлять что-либо от вашего имени, не допуская повторных отправлений или передачи несогласованных результатов?

Повторная отправка — это не редкая ошибка. Это поведение по умолчанию для простой очереди, когда воркер завершает работу посреди задачи. Воркер отправляет сообщение, а затем аварийно завершает работу до того, как зафиксирует успех. Система считает, что задача провалена, и дает команду новому воркеру попробовать снова. Клиент получает два письма, а вы — тикет в службу поддержки.

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

Используйте этот шестиэтапный конвейер для любых результатов работы агента, имеющих реальные последствия:

Produce (Создание): Агент генерирует полный артефакт. Пока ничего не отправляется. • Persist (Сохранение): Сначала запишите намерение и артефакт в надежное хранилище. • Score (Оценка): Прикрепите к результату показатель уверенности (confidence score). • Review (Проверка): Направляйте элементы с низким уровнем уверенности человеку. • Approve (Одобрение): Используйте шлюз с принципом «закрыто по умолчанию» (fail-closed). Система блокирует все отправки, пока человек не даст явное разрешение. • Send and Attest (Отправка и подтверждение): Отправьте объект по аренде (lease), а затем запишите квитанцию-подтверждение.

Каждый этап должен быть отдельным надежным переходом. Состояние должно храниться в вашей базе данных, а не в памяти воркера.

Чтобы предотвратить дубликаты, используйте аренду на уровне строк (row-level leasing). В Postgres используйте SELECT ... FOR UPDATE SKIP LOCKED. Это гарантирует, что в каждый момент времени задачу владеет только один воркер.

Самое важное правило — то, как вы обрабатываете истекшие аренды. Если воркер завершает работу во время отправки внешнего сообщения, не пытайтесь повторить попытку автоматически. Вместо этого оставьте задачу в подвешенном состоянии для проверки человеком. Видимая зависшая задача лучше, чем невидимая повторная отправка.

Вы также должны следовать принципам «закрыто по умолчанию» (fail-closed):

  • Отправка выключена по умолчанию. Один флаг должен включать весь исходящий трафик.
  • Личность проверяется. Система должна проверять адрес отправителя и безопасность транспорта в момент отправки.
  • Каждая операция оставляет квитанцию. Незаписанная отправка — это сбой.

Не стройте это для задач с низкими ставками, таких как внутренние логи. Используйте это, когда ошибка стоит денег, создает юридические проблемы или требует обращения в службу поддержки.

Source: https://dev.to/danmercede/building-a-governed-double-send-safe-delivery-pipeline-for-agent-outputs-80e

Optional learning community: https://t.me/GyaanSetuAi