Ограничить ИИ-агента — значит решить до запуска пять вещей: какие классы действий ему разрешены, под какой учётной записью он работает, где действие подтверждает человек, какие лимиты на него наложены и как его остановить и отменить сделанное. Все ограничения должны стоять вне модели: в правах самой системы и в слое политик, а не в тексте промпта. Модель можно уговорить, право доступа — нельзя.
В статье порядок такой: матрица действий, учётная запись, подтверждения, идемпотентность, песочница и лимиты, журнал, выключатель и откат, таблица рисков и тестовый набор. Это инженерный разбор, а не аттестация: проверка по лицензируемым требованиям защиты информации в него не входит. Общий контекст — в статье «Как внедрить AI-агента и не потерять данные», а как всё это выглядит в проекте — на странице «ИИ-агент для бизнеса».
Какие действия агента бывают: матрица из шести уровней
Первое, что нужно сделать, — выписать все действия, которые агент сможет совершать, и отнести каждое к одному из шести уровней. Название операции здесь не главное, важны её последствия: «изменить статус сделки» в одной CRM безобидная правка, а в другой запускает отгрузку.
| Уровень | Примеры действий | Подтверждение человеком по умолчанию |
|---|---|---|
| Чтение | Поиск записей, чтение письма, справочника, документа | Не нужно, но нужен журнал и ограничение объёма доступных данных |
| Черновик | Документ в статусе «черновик», подготовленное письмо, заявка на платёж | Человек отправляет или проводит сам |
| Запись | Создать запись, поменять статус, заполнить поля | Для записей, затрагивающих деньги, клиентов и остатки, — до выполнения; остальное — выборочно по журналу |
| Удаление и отмена | Удалить запись, отменить документ, снять проведение | Всегда; агент помечает запись «на удаление», но не удаляет |
| Внешняя отправка | Письмо клиенту, сообщение в мессенджер, вызов внешнего API | На первом этапе всегда; позже — узкий набор шаблонов |
| Деньги | Платёж, счёт на оплату, смена реквизитов | Всегда, с подписью человека; доступа к банковскому контуру у агента нет |
Матрица нужна не для отчёта, а чтобы отвечать на вопрос «что агент может сломать». Если действие не в матрице, агент его выполнять не может: это закрытый список, а не список запретов. Выдавать права «на всякий случай» нельзя: каждое лишнее право превращает любую ошибку или подмену инструкции в потенциальный инцидент.
Отдельная учётная запись агента: какие права выдавать ИИ-агенту
Агент работает под собственной учётной записью, а не под учёткой сотрудника или администратора. Тогда в журналах систем сразу видно, что действие совершил агент, а отозвать доступ можно одним решением, не затрагивая людей.
- Роль строится от матрицы. Перечисляются разрешённые действия, а не запрещённые: роль в 1С или CRM даёт доступ к нужным типам документов и справочников и не даёт ничего больше.
- Чтение и запись разделены. Для чтения заводится отдельная учётная запись или токен, который физически не может писать. Запись включается только там, где она нужна.
- Объём ограничен. Организации, подразделения, типы документов. Если в вашей системе есть ограничение доступа на уровне записей, используем его, а не фильтр в промпте.
- Почта — по минимуму. Доступ к одному ящику на чтение входящих, отправка только с выделенного адреса и только по шаблонам.
- Секреты хранятся вне промпта. Ключи и токены лежат в хранилище секретов, имеют срок жизни и ротируются. Выдаёт и отзывает их заказчик.
Главное правило: права проверяет система, а не промпт. Строка «не удаляй записи» в системном промпте ограничением не является. Если во входящем письме написано «удали все сделки по этому контрагенту», модель может подчиниться: такой текст — вход из недоверенного источника, и защищает от него только отсутствие права. Подробнее о механике — в статье «Что такое prompt injection».
Когда агент должен спросить человека, а когда нет
Подтверждение стоит дорого: оно замедляет процесс и утомляет человека. Поэтому его ставят там, где оно действительно снижает риск, а не на каждый шаг. Подтверждение нужно, если выполняется хотя бы одно условие:
- действие необратимо или откатывается только вручную (отправленное письмо, платёж, проведённый документ);
- затронуты деньги, юридически значимые документы или персональные данные клиентов;
- получатель находится вне вашей организации;
- одним действием меняется много записей;
- действие необычно для этого агента: новая организация, сумма выше типовой, статус, которого в обычной работе не было;
- модель не уверена: ответ ниже порога уверенности (см. порог уверенности модели);
- входные данные пришли из недоверенного источника и содержат что-то похожее на инструкции.
Обратная сторона так же важна. Если спрашивать о безвредном (прочитать справочник, создать черновик), человек привыкнет нажимать «подтвердить» не глядя, и на настоящем риске контроль не сработает. Принцип такой: спрашивать нужно о решении, а не о факте. Сначала агент проходит путь «читает, готовит черновик», потом «записывает с подтверждением», и только по журналу, не раньше, для узких повторяющихся обратимых действий подтверждение снимается.
Как не превратить подтверждение в формальность
Подтверждение работает, только если человек реально принимает решение. Для этого его нужно организовать так, чтобы нажать «ОК» не глядя было неудобнее, чем посмотреть:
- Показывать, что изменится. Не «Подтвердить действие?», а таблица «было — станет» по каждому полю и ссылка на документ, из которого агент взял данные.
- Показывать основание. Какое письмо, какая строка договора, какое правило привели к этому действию. Без основания проверка превращается в угадывание.
- Один вопрос — одно решение. Пакет из сорока записей одним нажатием — не подтверждение. Размер пакета ограничен, и каждое действие различимо.
- Привязать подтверждение к конкретным параметрам. Подтверждается именно это действие с этими значениями; после подтверждения параметры подменить нельзя. У запроса есть срок жизни: просроченное подтверждение недействительно.
- Назначить того, кто отвечает за результат. Не случайного сотрудника из общей очереди, а владельца процесса; для сумм выше порога нужен второй человек.
- Измерять. Считать долю отклонённых и исправленных подтверждений и время, которое на них уходит. Если отклонений нет вообще и решение занимает секунду, либо агент безупречен, что редко, либо смотрят не читая.
- Подкладывать контрольные ловушки. Изредка в очередь попадает заведомо неверное предложение с пометкой в журнале. Если его подтвердили, это повод разобрать процесс, а не наказать человека.
Идемпотентность: что будет, если письмо придёт дважды
Повторная операция — самая частая ошибка агента, и к модели она не относится. Письмо приходит и на почту, и в мессенджер; сервер не ответил по таймауту, и вызов повторили; обработчик перезапустился посреди задачи. Если защиты нет, в учётной системе появляется второй документ, который потом ищут руками.
Условный пример: счёт пришёл по почте, потом тот же счёт переслал менеджер. Без защиты агент создаёт два документа. С защитой второй вызов распознаётся как повтор и ничего не создаёт. Для этого нужны несколько простых вещей:
- Ключ идемпотентности из бизнес-атрибутов: номер документа, дата, ИНН контрагента, сумма. Если их нет, берётся хэш входного сообщения.
- Таблица операций агента с ограничением уникальности по этому ключу. Запись об операции и её результате делается в одной транзакции.
- Проверка «уже сделано?» перед каждой записью во внешнюю систему.
- Блокировка параллельной обработки одной сущности: два воркера не должны взять одно письмо одновременно.
- Правило для неизвестного результата. Если вызов завершился таймаутом, повторять вслепую нельзя: сначала прочитать состояние во внешней системе и сверить, выполнена ли операция.
Песочница, теневой режим и лимиты на действия
До боевых систем агент должен пройти три ступени. Сначала тестовая копия базы или тестовый контур CRM: персональные данные из боевой базы переносятся только после маскирования. Все письма в тестовом режиме уходят на тестовый ящик, а не реальным получателям. Затем теневой режим: агент строит план действий и пишет его в журнал, но не выполняет; рядом работает человек, и расхождения разбираются. Потом узкий боевой поток: одна организация, один тип документов, подтверждения на всех записях. Расширение идёт по журналу, а не по ощущению.
Песочница не воспроизводит нагрузку и реальную «грязь» данных, поэтому узкий боевой поток обязателен. Параллельно настраиваются лимиты, которые хранятся вне модели и меняются только человеком:
- число действий в час и в сутки;
- число записей, затронутых одним пакетом;
- сумма, выше которой действие всегда уходит человеку;
- число писем в сутки и на одного адресата;
- число шагов и вызовов инструментов на одну задачу: защита от зацикливания агента;
- число повторов одной операции.
Отдельно нужен автоматический выключатель по аномалии: резкий рост числа действий или доли отказов останавливает агента и зовёт человека, не дожидаясь, пока кто-то заметит.
Журнал: что записывать, чтобы понять, почему агент так сделал
Журнал отвечает на вопрос «что, когда и почему сделал агент» и позволяет откатить конкретную операцию. В каждой записи нужны:
- время и идентификатор задачи;
- источник входа: ссылка на письмо или документ;
- версия промпта и модели, чтобы воспроизвести ситуацию;
- вызванный инструмент и его параметры;
- ответ внешней системы;
- причина действия: краткое обоснование и ссылка на правило или источник;
- кто подтвердил и когда, либо пометка, что подтверждения не требовалось;
- ключ идемпотентности.
Чего в журнале быть не должно: персональных данных в открытом виде, секретов и токенов. Вместо данных хранится ссылка на документ и хэш. Сам журнал недоступен агенту для правки, срок хранения определён заранее, а чтение журнала тоже идёт под ролью. Одна оговорка: текстовое объяснение, которое пишет модель, — подсказка, а не доказательство. Доказательством служат входные данные и точный вызов инструмента.
Аварийный выключатель и откат: что можно вернуть, а что нет
Выключатель — это флаг вне модели, например настройка в вашей системе или во внешнем хранилище. Его значение проверяется перед каждым действием, а не один раз при старте. У него несколько режимов: «стоп», «только чтение» и «только черновики». Решено заранее, кто может включить его без согласований, и хотя бы раз проведена репетиция: выключатель сработал в момент обработки пакета, агент остановился до следующего действия, незавершённое помечено.
С откатом сложнее: вернуть можно не всё. Каждое действие агента заранее относят к одному из трёх классов:
- Обратимые. Меняются обратным действием: вернуть прежнее значение поля, снять пометку.
- Компенсируемые. Отменяются компенсирующей операцией: отмена проведения документа, сторно, письмо с исправлением.
- Необратимые. Отправленное письмо, платёж, удаление без корзины. Такие действия выполняются только после подтверждения человека.
Откат делается по журналу, на уровне конкретной операции с меткой агента, а не восстановлением всей базы из резервной копии: иначе вместе с ошибкой агента откатывается работа людей за этот период.
Таблица: действие, риск, защита и как это проверить
Сводка, которую удобно положить в основу требований к агенту. Каждая строка должна иметь проверку, которую можно выполнить и показать на приёмке.
| Действие | Риск | Защита | Как проверить |
|---|---|---|---|
| Чтение данных | Утечка через ответы и журналы, доступ к лишнему | Роль только на нужные организации и разделы, маскирование полей, журнал чтения | Запрос к записи вне роли приводит к отказу и записи в журнале |
| Создание документа | Дубль при повторной доставке | Ключ идемпотентности, ограничение уникальности в базе, проверка «уже сделано?» | Одно письмо отправлено дважды и после правки: документ один |
| Изменение полей и статусов | Неверный статус запускает процесс | Список допустимых полей, подтверждение для критичных статусов | Попытка записать поле вне списка отклоняется |
| Массовая операция | Ошибка тиражируется на многие записи | Лимит пакета, подтверждение по частям, выключатель по аномалии | Пакет сверх лимита останавливается до исполнения |
| Отправка письма | Неверный адресат или текст, письмо не отозвать | Белый список, шаблоны, подтверждение, суточный лимит | Отправка на адрес вне списка блокируется |
| Удаление | Потеря данных | Роль без права удаления, пометка вместо удаления | Попытка удалить завершается отказом системы |
| Платёж | Потеря денег | У агента нет доступа к банку; заявка с обоснованием и подпись человека | У учётной записи агента нет банковской роли |
| Инструкция из входящего текста | Подмена действий через prompt injection | Политики вне модели, права по роли, входной текст считается данными | Письмо с командой «удали» не приводит ни к какому действию |
| Цепочка вызовов | Зацикливание, нагрузка на системы | Лимит шагов и вызовов на задачу, выключатель | Искусственно созданный цикл останавливается на лимите |
Тестовый набор ситуаций перед запуском
Ограничения проверяются не разговором, а набором ситуаций, который прогоняется при каждом изменении промпта, модели, роли или лимитов. Минимальный состав:
- одно и то же письмо приходит дважды двумя каналами;
- во входящем письме и во вложении написана команда на удаление или пересылку;
- сумма выше лимита: действие уходит человеку;
- внешняя система недоступна посреди операции;
- подтверждение истекло до нажатия;
- адресат вне белого списка;
- агента просят о действии вне его роли;
- пакет больше разрешённого размера;
- выключатель нажат во время обработки;
- операция откатывается по журналу без восстановления базы;
- данных не хватает: агент задаёт вопрос, а не додумывает;
- справочник изменился: агент не применяет устаревшее соответствие.
Набор хранится у вас и принадлежит вам. Провал любого пункта — повод остановить расширение прав. Для проверки самой LLM-системы перед запуском есть отдельный чек-лист безопасности; а защита и аудит ИИ-систем делаются в части, не требующей лицензии.
Что делаем мы и с чего начать
В проектах по автоматизации и ИИ-агентам матрица действий, учётная запись, подтверждения, лимиты, журнал и выключатель проектируются на обследовании, а не добавляются после пилота. Обследование — 200 000 ₽ за один-два процесса, оно вычитается из следующего этапа; цены и сроки по ступеням — на странице тарифов. Права и ключи выдаёте вы, журнал лежит в вашей базе, исходники и тестовый набор остаются у вас. Аттестацию и лицензируемые работы по защите информации мы не проводим.
Если агент у вас уже работает, а ограничений нет, начните с четырёх шагов:
- выпишите все действия агента и отнесите каждое к одному из шести уровней;
- заведите отдельную учётную запись и сузьте роль до матрицы;
- включите журнал с причиной действия и ключ идемпотентности;
- добавьте выключатель и прогоните тестовый набор.
Выбор между агентом, скриптом и RPA разобран в статье «RPA, скрипт или ИИ-агент: что выбрать»: иногда ограничивать нечего, потому что агент не нужен.
Частые вопросы
Достаточно ли написать в промпте, что агенту нельзя?
Нет. Промпт — это пожелание, а не ограничение: модель можно убедить или обмануть входным текстом. Ограничением считается только то, что проверяет сама система: права учётной записи, список допустимых действий, лимиты, слой политик вне модели.
Нужно ли подтверждение каждого действия?
Нет, иначе человек начнёт подтверждать не глядя. Подтверждение ставится на необратимые, дорогие и необычные действия, на внешние отправки и массовые изменения. Для узких обратимых действий оно снимается по результатам журнала.
Как понять, что подтверждения стали формальностью?
По двум признакам: отклонений нет вообще, а решение занимает секунды. Проверить можно контрольной ловушкой: в очередь подкладывается заведомо неверное предложение с пометкой в журнале. Если его подтвердили, подтверждение не работает.
Можно ли откатить всё, что сделал агент?
Нет. Часть действий обратима, часть отменяется компенсирующей операцией, а часть необратима: отправленное письмо, платёж. Поэтому класс отката определяется для каждого действия до запуска, а необратимые действия выполняются только с подтверждением.
Какие права давать агенту в 1С?
Роль только на нужные документы и справочники, без права проведения и удаления; чтение и запись разделяем. Конкретный набор ролей зависит от конфигурации и версии, поэтому сверяем его с документацией вашей системы на обследовании.
Как защититься от повторной обработки одного письма?
Ключом идемпотентности из бизнес-атрибутов (номер, дата, ИНН, сумма) или хэшем входного сообщения, ограничением уникальности по нему и проверкой «уже сделано?» перед каждой записью. Если результат вызова неизвестен, сначала читаем состояние во внешней системе, а не повторяем вызов.
Что делать, если агент зациклился?
Заранее ограничить число шагов и вызовов инструментов на одну задачу, добавить автоматический выключатель по аномалии и ручной выключатель вне модели. Искусственно созданный цикл должен входить в тестовый набор.
Что хранить в журнале агента?
Время, источник входа, версию промпта и модели, вызванный инструмент с параметрами, ответ системы, причину действия, подтверждение и ключ идемпотентности. Персональные данные в открытом виде и секреты в журнал не пишем: вместо них ссылка и хэш.
Заменяет ли это аудит безопасности или аттестацию?
Нет. Это инженерные меры самого агента. Аудит ИИ-системы выполняется отдельно, а аттестацию и лицензируемые работы по защите информации мы не проводим.