Как выстроить human-in-the-loop для AI-рассылок: когда «подтвердить» уже не спасает

Один неверный догон, ушедший агентом клиенту, не откатывается как коммит: письмо в ящике, агент фиксирует успех и планирует следующие шаги по уже испорченной версии событий. Соло-разработчик, который один ведёт почтового агента, разбор не обязан жить в бесконечных «ОК/Отмена». Нужны контроли, где ошибка ловится до массовой рассылки.
Следующие ходы агента после «успешной» отправки
Сценарий из практики: агент шлёт follow-up клиенту с неверным текстом. Письмо ушло. Код можно откатить, email «impossible to unsend». Агент логирует успех, планирует следующий шаг, может запустить retry-loop и размножить ошибку.
В отличие от revert в репозитории, внешняя отправка асимметрична: легко отправить, отозвать почти нереально. Hill сравнивает blast radius bulk-рассылки с публичным инцидентом: «10 000 customers» или «entire list» в одном runaway loop. Для агентного воркфлоу это не метафора: retry-bug без rate cap шлёт сотни копий или на весь список.
Human-in-the-loop здесь — не «спросить человека на каждый черновик», а спроектировать, где человек успевает изменить исход до того, как blast radius вырастет.
Два провальных режима: автосенд и бесконечные подтверждения
Hill выделяет два симметричных провала.
Auto-sending with no undo — внешние сообщения уходят мгновенно, recovery path отсутствует. Агент в email, Slack и других исходящих каналах действует как в продакшене: ставки репутации, не локальный тест.
Over-gating — столько подтверждений, что люди перестают читать. Alert-Fatigue Spiral: каждый G1-черновик за гейтом, на десятом «send to all?» — Rubber Stamp, vague prompt вместо реального preview. Lone approval на массовую рассылку Hill называет «liability transfer dressed up as a control».
Для соло-workflow с одним оператором второй режим особенно коварен: вы и единственный human-in-the-loop, и единственный, кто устаёт кликать «approve».
Градация G1–G3: reversibility и blast radius
Перед контролами — оценка действия агента по трём осям: reversibility (обратимость), blast radius (масштаб охвата), stakes (ставки). Итоговый grade — по наивысшей оси.
| Действие агента | Обратимость | Blast radius | Grade |
|---|---|---|---|
| Черновик (не отправлен) | Полная | Один внутренний получатель | G1 low |
| Отправка себе / коллеге | Сложно отозвать, низкие stakes | Внутренний, 1–несколько людей | G1–G2 |
| Отправка клиенту / внешнему | Почти невозможно отозвать | Один внешний получатель | G2 high |
| Bulk / broadcast | Необратимо в масштабе | Сотни–тысячи | G3 critical |
Логика разная для G2 и G3. На G2 (external customer) human + preview + undo window ещё могут поймать ошибку. На G3 bulk «you cannot un-send to 10 000 people» — prevent, don't review: approval alone недостаточен, нужны cap, stage/throttle, отказ от lone approve click.
Фреймворк RAIL (Reversible, Authorized, Interruptible, Logged) — чеклист того, что логировать: что, кому, когда, на чьём authority.
Send-delay, caps и preview: контроли в инструменте, не в промпте
Hill перечисляет механизмы, которые работают как инженерный контур, а не как надежда на промпт.
Send-delay + undo-send window — удержание отправки на 30–120 секунд с one-click cancel. Самый дешёвый контроль с максимальным эффектом: люди ловят «wait, that's wrong» после commit лучше, чем approve/deny «в абстракции».
Preview — показ точного subject, body и списка получателей. Не summary и не «send the follow-up?».
Hard recipient and rate caps — max recipients per send, max sends per minute, max total sends per run. Caps enforce в tool, не в prompt: агент физически не может обойти лимит. Пример из статьи: cap 50 получателей превращает runaway в «50, а не 50 000».
Approval gate — обязателен для G2 external и G3 bulk; для рутинных G1 internal drafts — не гейтить, pre-authorize.
Reversible send опускает grade — worst case становится «поймали и откатили», а не «уже улетело».
Массовая рассылка G3: prevent, don't review
Для G3 Hill предлагает staged / throttled bulk send: canary batch, пауза, подтверждение человека перед остальной рассылкой. Automation bias на массовых approve — не абстрактный риск: люди кликают approve на 10-м «send to all?» без проверки.
Четыре шага практики из takeaways: Grade, Guard, Show, Prove — с отсылкой к practitioner playbook и cheatsheet LoopRails. LoopRails — free, sourced framework для проектирования human-in-the-loop oversight AI-агентов; центральный вопрос: can a human realistically catch this mistake before it lands? На looprails.dev есть interactive grader для прогона исходящих действий агента через G0–G3.
Тратить human attention только там, где человек меняет outcome; ниже — safe by design. Для агентного email это ближе к оркестрации coding agents в продакшене, чем к маркетинговому how-to: grade → guard → show → prove.
Если агент шлёт email и Slack как внешние действия — проектируйте oversight как для любого tool-calling в проде: не «ещё один prompt», а физические лимиты и окна отмены.
Источники
- @brennhill, «How to Build a Good Human-in-the-Loop for AI Email and Outbound Messaging» — Dev.to (дата доступа: 2026-08-31)
- Оригинальная публикация LoopRails — https://looprails.dev/article-hitl-email-agents.html (дата доступа: 2026-08-31)