Назад в блог

Human-in-the-loop для AI-агентов: что отдавать на подтверждение

Какие действия AI-агента требуют подтверждения человека: матрица рисков, антипаттерны approval flow и подтверждение как часть контроля доступа.

Иллюстрация к материалу: Human-in-the-loop для AI-агентов: что отдавать на подтверждение

Агент собрал ветку с изменениями и готов открыть merge request. Или готов отправить письмо клиенту. Или - и вот здесь все замирают - очистить очередь задач по флагу «archived». В этот момент система должна спросить человека. Вопрос инженера: в какие именно моменты спрашивать?

Ошибиться легко в обе стороны. Спрашивать о каждом шаге - человек за день превращается в кнопку «OK» и перестаёт читать, что подтверждает. Не спрашивать ни о чём - первый же неверный шаг агента становится необратимым. Регуляторы добавляют давления: европейский AI Act требует человеческого надзора для высокорисковых систем, и его этап применения для high-risk обязательств наступил в августе 2026 года.

Разберём human-in-the-loop как инженерный механизм: где ставить точки подтверждения, как выглядит хороший запрос на подтверждение и почему HITL - это часть контроля доступа, а не элемент интерфейса.

Что такое human-in-the-loop на самом деле

Определение проще, чем кажется: агент останавливается перед действием, а решение - выполнить, изменить или отклонить - принимает человек. Всё остальное (уровни, паттерны, регуляторика) - детали реализации этого принципа.

Важно понимать место HITL в системе защит. Подтверждение не заменяет права, изоляцию и аудит - оно работает вместе с ними. Если агент имеет право удалять продакшен-данные, одно лишнее подтверждение проблему не решает: уставший человек нажмёт «ок». Правильная последовательность обратная: сначала ограничить, что агент вообще может делать, затем - вынести на подтверждение то немногое опасное, что осталось в его полномочиях.

Именно так это сформулировано и на уровне стандартов: концепт-бумага NIST по identity агентов отдельно разбирает, как связывать human-in-the-loop авторизации с identity - и агента, и подтверждающего человека. Подтверждение без записи «кто подтвердил и что именно» - не контроль, а ритуал.

Матрица: какие действия требуют подтверждения

Два вопроса определяют уровень автономии для каждого типа операций: обратимо ли действие и какова цена ошибки.

Тип операцииПримерыРежим
Обратимое, дешёвая ошибкачерновики, поиск, чтение данных, комментарии в веткеАвтономно
Обратимое, заметная ценасоздание задач, коммит в ветку, статус тикетаАвтономно + выборочный контроль
Трудно обратимоепубликация MR, письмо человеку, изменение конфигурацииПодтверждение
Необратимое или наружуудаление данных, платёж, массовая рассылка, изменение правПодтверждение + иногда запрет

Третий и четвёртый уровни - территория human-in-the-loop. Практический тест для спорных случаев: представьте, что действие выполнил стажёр в первый день. Если вам важно, чтобы кто-то посмотрел до того, как это увидит мир, - это точка подтверждения и для агента.

Список стоит поддерживать явно, как код: какие инструменты агента требуют approval, какие нет. Скрытая политика «как получится» всегда деградирует в один из антипаттернов ниже.

Четыре антипаттерна approval flow

Резиновая печать. Агент запрашивает подтверждение двадцать раз в час. Через неделю человек жмёт «ок», не глядя. Формально HITL есть, фактически - нет. Лечится сокращением числа запросов до действительно значимых, а не «терпением» пользователей.

Подтверждение без контекста. «Разрешить продолжить?» - о каком действии, над какими данными, с какими последствиями? Человек физически не может осмысленно подтвердить то, чего не видит. Запрос обязан показывать само действие.

Самоподтверждение. Тот же сотрудник запускает агента и через секунду одобряет его запрос - глазами пробежав. Для опасных операций подтверждать должен другой человек или тот же, но позже и с полным diff. Минимум - явная пауза и полный контекст.

Подтверждение вместо прав. Самый коварный вариант: широкие полномочия агента «компенсируются» частыми вопросами. Это инвертированная логика - сначала режем права до минимума, потом подтверждаем остаток.

Как выглядит хорошее подтверждение

Хороший запрос на подтверждение отвечает на пять вопросов за один экран:

  1. Что произойдёт. Конкретное действие с параметрами: «отправить письмо на client@… с текстом», а не «выполнить send_email».
  2. Что затронуто. Какие записи, репозитории, люди попадут под действие.
  3. Diff, если применимо. Для изменений - что было и что станет.
  4. Как откатить. Обратимость должна быть видна до подтверждения, а не после инцидента.
  5. Кто и когда решил. После клика запись об этом попадает в журнал вместе с контекстом запроса.

Пятый пункт обычно теряется, когда confirmation живёт в интерфейсе агента, а журнал действий - нигде. Тогда расследование инцидента упирается в вопрос «кто разрешил агенту это сделать» - и ответа нет.

Подтверждение как часть контроля доступа

Соберите всё сказанное в одну схему, и получится, что точка подтверждения - это обычная проверка прав, только решает её человек:

агент -> инструмент -> policy: автономно / подтверждение / запрещено
                          |
                    человек + аудит

Ровно эту связь фиксирует NIST: human-in-the-loop авторизация привязывается к identity подтверждающего, а решение записывается с возможностью доказать, кто его принял. При таком взгляде исчезает соблазн делать подтверждения «в коде агента» - они принадлежат слою доступа, тому же, где живут права инструментов и секреты. Тогда их нельзя обойти сменой промпта, а весь путь решения остаётся в журнале.

Где здесь место Codenik

Codenik встраивает точки подтверждения в слой доступа между агентом и корпоративными системами. Опасные операции помечаются на уровне инструментов и требуют явного решения человека; запрос показывает действие, затронутые данные и способ отката; решение фиксируется в аудите вместе с identity того, кто его принял. Остальные вызовы проходят автоматически - поэтому подтверждение остаётся редким и значимым сигналом, а не фоновым шумом.

Это продолжает модель из наших статей «Права доступа для AI-агентов» и «Аудит действий агента».

Короткий вывод

Human-in-the-loop работает, когда он спроектирован, а не прикручен: список операций, требующих человека, задан явно; каждый запрос содержит действие, контекст и способ отката; каждое решение записано вместе с его автором. Спрашивать обо всём - значит гарантировать, что не читают ничего; правильная пропорция получается из матрицы «обратимость × цена ошибки» после того, как права агента уже срезаны до минимума.

И последнее: если ваша единственная защита - кнопка «подтвердить», у вас нет защиты. Есть задержка перед инцидентом.

Источники и дальнейшее чтение