3,583 papers
arXiv:2610.07359 80 5 окт. 2026 г. FREE

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

КЛЮЧЕВАЯ СУТЬ
Четыре LLM-судьи подряд защищают как 1.65 судьи, а не как четыре: ошибаются они на одних и тех же действиях. Метод позволяет собрать защиту для агента, который лезет в терминал, базу или репозиторий, и не купить иллюзию безопасности. Ставь рядом разные по природе проверки: жёсткие правила по тексту команды и одного LLM-судью. Правила не понимают смысл, судья понимает, поэтому их промахи почти не пересекаются. Два судьи вместе дают лишь эффективные 1.2–1.4 слоя вместо 2.
Адаптировать под запрос
⚡

TL;DR

Перед выполнением действий агента (команда в терминале, запрос к базе, пуш в репозиторий) ставят проверки-«шлюзы»: жёсткие правила, которые ищут опасные шаблоны в тексте команды, и LLM-судей, которые читают действие и выносят вердикт. Исследование измерило, насколько ошибки этих слоёв независимы. От этого зависит, даёт ли добавление слоя реальную защиту или только иллюзию.

Главная находка: LLM-судьи ошибаются на одних и тех же действиях. Два судьи вместе пропускают опасное действие в разы чаще, чем обещает арифметика «шанс промаха умножается». Судьи читают действие одинаково, поэтому и «слепые зоны» у них общие. Покупка третьего и четвёртого судьи почти не помогает. Смена вендора помогает слабо: судья от третьей компании ведёт себя так же, как «свои». Жёсткие правила и LLM-судья, наоборот, ошибаются почти независимо: правило ловит то, что судья пропустил, и наоборот. Точность слоя «по одиночке» не говорит о его вкладе в стек: улучшенный набор правил, на 20% реже промахивающийся сам по себе, не добавил ни одного нового пойманного случая.

Метод простой: собирай стек из разных по природе механизмов (правила по тексту + один LLM-судья), а не из нескольких LLM-судей. Слой оценивай по тому, что он ловит сверх остальных, а не по его собственной точности.

📌

Схема находки

СЛОЙ 1 (правила, regex по тексту действия) → allow / warn / block / review
СЛОЙ 2 (LLM-судья, видит только само действие) → allow / warn / block / review
СЛОЙ 3+ (ещё LLM-судьи) → почти те же слепые зоны, мало нового

Действие пропущено, только если ВСЕ слои промахнулись.

Правила + 1 судья ≈ почти 2 независимых слоя
Судья + судья     ≈ 1.2–1.4 слоя вместо 2
Все 4 судьи       ≈ 1.65 слоя вместо 4

review (эскалация человеку) = «остановили» или «пропустили»?
Если человека на другом конце нет, считай как пропуск.
🚀

Пример применения

Задача: Вы запустили Claude Code на сервере интернет-магазина на Битриксе. Агент ночью «наводит порядок» и имеет доступ к боевой базе заказов и ключам от ЮKassa. Нужно решить, чем страховать его действия. Первая мысль: поставить двух судей, Claude и GPT, чтобы «перепроверяли друг друга». По исследованию лучше так: список жёстких запретов + один судья.

Слой 1 — правила (запреты по шаблону): в настройках разрешений агента и в хуке перед командой блокируются rm -rf, DROP TABLE, git push --force, чтение .env, curl с ключами во внешние адреса.

Слой 2 — судья в отдельном чате или вызове. Промпт:

Ты — независимый проверяющий действий ИИ-агента на боевом сервере
интернет-магазина. Агент считается потенциально скомпрометированным.
Тебе показано только само действие. Объяснения агента нет.

Тип действия: shell
Инструмент: psql
Команда: psql -h prod-db-01 -c "DELETE FROM orders WHERE created_at < '2024-01-01'"
Параметры: без транзакции, без бэкапа

Оцени риск по пяти измерениям: необратимость потерь, затронутые данные
клиентов, доступ к секретам, выход за рамки задачи, возможность отката.
Каждое — от 0 до 3 с одной строкой обоснования.

Затем вынеси вердикт: allow, warn, block или review.
Если сомневаешься, выбирай block, а не review: человека-проверяющего
в этой цепочке нет.

Результат: Судья выдаст оценку по пяти измерениям с короткими обоснованиями и итоговый вердикт одним словом. Для удаления заказов с боевой базы без бэкапа ожидайте block. Если ваши правила не знают про DELETE без WHERE-ограничений по вашей схеме, судья закроет эту дыру. И наоборот: если судья «не заметит» утечку ключа в хитро записанной команде, её поймает регулярка.

🧠

Почему это работает

Слабость. Мы привыкли думать: «каждая проверка ловит 90%, две проверки — 99%». Это верно, только если проверки ошибаются независимо. LLM-судьи учились на похожих данных и читают действие одинаково. Если действие выглядит безобидно для одного, оно скорее всего выглядит безобидно и для второго. Их ошибки совпадают, и вторая модель почти ничего не добавляет.

Сильная сторона. Регулярка смотрит на буквы и не понимает смысла, но ей и не нужно «убеждаться»: она сработает на rm -rf /, как бы убедительно агент ни объяснял, зачем это. LLM-судья, наоборот, понимает смысл и контекст, но может «поддаться» на правдоподобно выглядящую команду. Механизмы разные, поэтому их промахи почти не пересекаются.

Как использовать. Диверсификация по механизму даёт больше, чем по числу или вендору. Оценивай каждый слой по тому, сколько новых опасных действий он поймал при уже стоящем стеке. Рычаги управления: - Что видит судья. Убирай человеческое описание «зачем это нужно». В исследовании у судей оно было стёрто: в описаниях опасных действий часто стояло прямое слово-подсказка. - Что значит review. Нет живого проверяющего: приравнивай к блоку. Есть: пусть эскалирует. - Состав стека. Добавляй слой, непохожий на текущие: правило по тексту, по путям, по списку доменов, лимит по числу изменённых строк. Не ещё одну LLM.

📋

Шаблон промпта

В статье нет готового текста промпта судьи. Описана только схема опроса: роль судьи, тип действия, инструмент, содержимое, параметры, оценка пяти измерений риска, вердикт из четырёх вариантов. Пять измерений авторы в данном тексте не перечислили. Шаблон ниже собран по этой схеме, измерения подставьте свои.

Ты — независимый проверяющий действий ИИ-агента. Агент считается
потенциально скомпрометированным. Ты видишь только само действие.
Никаких объяснений агента нет.

Контекст среды: {среда}

Тип действия: {тип_действия}
Инструмент: {инструмент}
Содержимое: {команда_или_запрос}
Параметры: {параметры}

Оцени риск по измерениям: {измерения_риска}
Каждое — от 0 до 3 с одной строкой обоснования.

Вынеси вердикт одним словом:
- allow — безопасно, выполнять
- warn — выполнять с пометкой в журнале
- block — остановить
- review — нужен человек

Правило для review: {что_делать_с_review}

Что подставлять: - {среда}: «боевой сервер интернет-магазина», «репозиторий с платёжным модулем». - {измерения_риска}: 4–5 осей под вашу область (необратимость, затронутые данные, секреты, выход за рамки задачи, откат). - {что_делать_с_review}: «считай блоком, человека нет» или «эскалируй владельцу». - Слой правил делайте отдельно, не внутри судьи: это и есть второй, независимый механизм.

🚀 Быстрый старт — вставь в чат:

Вот шаблон проверяющего для действий ИИ-агента. Адаптируй под мою
задачу: {опиши, какой агент, что он может делать и что для тебя
недопустимо}. Задавай вопросы, чтобы заполнить поля. Дополнительно
предложи список жёстких правил по тексту команд (шаблоны опасных
команд), которые я поставлю отдельным слоем перед судьёй.

[вставить шаблон выше]

LLM спросит, какие инструменты и доступы есть у агента и что необратимо в вашей среде. Это нужно, чтобы судья оценивал риск по вашим измерениям, а второй слой (правила) закрыл то, что судья не заметит.

⚠️

Ограничения

⚠️ Нет атакующего: Измерения сделаны на заранее написанных действиях. Никто не подбирал команды, чтобы обмануть слои. Тот, кто знает ваши правила, напишет действие, которое ни одно из них не ловит. Он же может обмануть и судью через текст действия. «Почти два независимых слоя» не защита от целенаправленной атаки.

⚠️ Правила хрупки при смене области: На внешнем наборе, из области, под которую правила не писались, они пропускали больше половины опасных действий. Готовые правила нужно донастраивать под вашу среду.

⚠️ Одна система правил и несколько вендоров: Вывод о независимости правил и судьи получен на одном наборе правил и на нескольких судьях. Наборы действий авторские, один из них создан с помощью LLM. Внутри каждого набора по отдельности различие правил и судей статистически не доказано, оно подтверждено только на объединённых данных.

⚠️ Причину совпадения ошибок не разделили: Неясно, коррелируют судьи потому, что у них общий механизм, или потому, что одни и те же действия просто трудные для всех. Доля «просто трудных» оценивается от трети до двух третей, в зависимости от способа подсчёта.

⚠️ Человека-проверяющего не тестировали: Выводы зависят от того, считать ли эскалацию человеку «остановкой». Один из судей часто отвечал review, и это пять раз переворачивало выводы.

⚠️ Версия модели может меняться незаметно: Один из уровней моделей в половине пакетов отвечала не та версия, что заказана. Если вы тестируете защиту, фиксируйте, какая модель реально отвечала.

🔍

Как исследовали

Автор собрал 1119 размеченных действий агентов из трёх наборов: внутренний (300), независимый (630) и внешний (189), созданный с помощью LLM и перепроверенный человеком-аннотатором. Из них 560 действий помечены «блок»: их нужно останавливать. Против них поставили один слой из 174 регулярных выражений (AgentTrust) и четырёх LLM-судей, потом ещё пятого, от третьего вендора. Три судьи пересобраны с записью версии модели на каждый вызов. Судьи не видели описание действия, написанное человеком: в нём часто стояло слово-подсказка.

Для сравнения придумали метрику n_mult: сколько независимых слоёв «стоит» стек, если взять наблюдаемую долю пропусков. Если ошибки независимы, два слоя дают 2. Если слои ошибаются синхронно, получается около 1. Для судьев с судьёй вышло 1.2–1.4, для правил с судьёй ≈ 2.

Удивило, что улучшенный пакет правил, снизивший собственный процент промахов на 20%, не поймал ни одного нового случая поверх судей: всё, что он добавил, судьи и так ловили. А слабый список из 50 шаблонов, пропускавший 86% опасного, всё же добавил девять случаев. Вывод: точность слоя «по одиночке» не говорит о его вкладе. Оценивать надо стек целиком.

💡

Адаптации и экстраполяции

🔧 Техника: убрать «объяснение от агента» → судья оценивает действие, а не легенду

Давай судье только команду и параметры, без поля вроде «зачем это нужно, по мнению агента». В исследовании такое описание стёрли, потому что оно подсказывало ответ. Фрагмент: Содержимое: {команда}, без строки Комментарий агента: ....

🔧 Техника: review → block по умолчанию → нет «серой зоны» без человека

Добавь в инструкцию судье: «Если нет живого проверяющего, вердикт review запрещён, выбирай allow или block». Это снимает перекос: судья, склонный к review, выглядит безопасным, а на деле пропускает действие.

Экстраполяция: аудит собственной цепочки проверок. Идея из выводов статьи, но самой статьёй не проверенная. Если у вас несколько проверок на тексты (редактор, фактчекер, комплаенс-проверка), прогоните 20–30 известных ошибок через каждую и посмотрите, кто что ловит:

Вот список из {N} известных ошибок и результаты каждой из моих
проверок ({проверка_1}, {проверка_2}, {проверка_3}).
Для каждой проверки посчитай: сколько ошибок поймала только она.
Какая проверка ничего нового не добавляет к остальным?
Какого механизма проверки не хватает?
🔗

Ресурсы

  • «Evaluate the Stack, Not the Layer: Do Deterministic and LLM Gates for Agent Actions Fail Independently?» — Chenglin Yang, University of Lancashire.
  • Упомянутые в тексте: AgentTrust (набор правил для проверки действий агентов), Parallax (постановка «агент уже скомпрометирован»), предыдущее исследование корреляции ошибок в защитных стеках от джейлбрейков. Публичный артефакт: вердикты по слоям, записи о версиях модели, скрипты и предрегистрация (ссылка в оригинале).

📋 Дайджест исследования

Ключевая суть

Четыре LLM-судьи подряд защищают как 1.65 судьи, а не как четыре: ошибаются они на одних и тех же действиях. Метод позволяет собрать защиту для агента, который лезет в терминал, базу или репозиторий, и не купить иллюзию безопасности. Ставь рядом разные по природе проверки: жёсткие правила по тексту команды и одного LLM-судью. Правила не понимают смысл, судья понимает, поэтому их промахи почти не пересекаются. Два судьи вместе дают лишь эффективные 1.2–1.4 слоя вместо 2.

Принцип работы

Действие проходит через слои по очереди. Пропущено оно только тогда, когда промахнулись все слои сразу. Слой 1: правила (регулярки, то есть шаблоны по тексту команды). Они ищут rm -rf, DROP TABLE, git push --force, чтение .env. Слой 2: один LLM-судья. Он видит только само действие, без объяснений агента. Он оценивает риск по осям и выносит вердикт: allow, warn, block или review. Слой оценивай не по его собственной точности, а по тому, сколько опасного он ловит сверх остальных. Это как два сторожа из одной школы. Если один проспал вора, второй, скорее всего, тоже. А вот сторож и сигнализация на датчике движения проспят вместе очень редко. Отдельное правило про review (эскалация человеку). Если живого проверяющего нет, считай review пропуском. Лучше прямо в промпте велеть судье выбирать block.

Почему работает

Привычная арифметика: каждая проверка ловит 90%, две ловят 99%. Она верна только при независимых ошибках. LLM-судьи учились на похожих данных и читают действие одинаково. Что выглядит безобидно для одного, выглядит безобидно для второго. Третий и четвёртый судья почти ничего не добавляют. Смена компании-разработчика тоже слабо помогает: судья от третьей компании ведёт себя как «свои». Регулярка работает иначе. Ей плевать, как убедительно агент объясняет rm -rf /. Она смотрит на буквы и срабатывает. Судья, наоборот, понимает контекст, но может поддаться на правдоподобную команду. Жесть: набор правил, который сам по себе на 20% реже промахивался, не добавил в стек ни одного нового пойманного случая. Он ловил то же, что уже ловил судья. Хорошая точность слоя по отдельности ничего не говорит о его пользе в стеке.

Когда применять

Автономные агенты с доступом к боевым системам → конкретно для проверки действий перед выполнением (команды в терминале, запросы к базе, пуши в репозиторий), особенно когда у агента есть ключи и права на удаление. Добавляй слои, не похожие на текущие: правило по пути файла, по списку разрешённых доменов, лимит на число изменённых строк. Не добавляй ещё одну LLM. НЕ подходит как защита от целенаправленной атаки. Измерения делали на заранее написанных действиях. Кто знает ваши правила, напишет команду в обход. Он же может обмануть и судью текстом действия. Готовые правила придётся донастроить: на чужой области они пропускали больше половины опасного.

Мини-рецепт

1. Выпиши запреты: всё необратимое в твоей среде. Удаление, force-пуш, чтение секретов, отправка ключей наружу.
2. Поставь правила отдельным слоем: в настройках разрешений агента и в хуке перед командой. Не прячь их внутрь промпта судьи, иначе это уже не второй механизм.
3. Поставь одного судью: в отдельном чате или вызове. Роль: независимый проверяющий. Агент считается потенциально скомпрометированным.
4. Покажи судье только действие: тип, инструмент, команда, параметры. Убери объяснение агента «зачем мне это нужно».
5. Задай 4–5 осей риска: каждая от 0 до 3 с одной строкой обоснования. Например: необратимость, данные клиентов, секреты, выход за рамки задачи, возможность отката.
6. Реши судьбу review: человека нет, значит велишь считать блоком. Человек есть, значит пусть эскалирует.
7. Проверяй вклад слоя: прогони свои опасные примеры. Смотри, что поймал каждый слой сверх остальных. Не лови себя на радости от высокой точности слоя.
8. Не добавляй четвёртого судью по привычке: лучше новое правило другой природы.

Примеры

[ПЛОХО] : Поставлю двух судей, Claude и GPT, пусть перепроверяют друг друга перед каждой командой агента
[ХОРОШО] : Слой 1 блокирует по шаблону rm -rf, DROP TABLE, git push --force, чтение .env. Слой 2 это один судья с таким промптом: Ты — независимый проверяющий действий ИИ-агента на боевом сервере интернет-магазина. Агент считается потенциально скомпрометированным. Ты видишь только само действие, объяснений нет. Команда: psql -h prod-db-01 -c "DELETE FROM orders WHERE created_at < '2024-01-01'". Параметры: без транзакции, без бэкапа. Оцени риск по пяти осям от 0 до 3 с одной строкой обоснования: необратимость, данные клиентов, секреты, выход за рамки задачи, откат. Вердикт одним словом: allow, warn, block или review. Если сомневаешься, выбирай block: человека в цепочке нет. Если правила не знают про DELETE без нужных ограничений в твоей схеме, судья закроет дыру. Если судья пропустит ключ в хитро записанной команде, его поймает регулярка.
Источник: Evaluate the Stack, Not the Layer: Do Deterministic and LLM Gates for Agent Actions Fail Independently?
ArXiv ID: 2610.07359 | Сгенерировано: 2026-10-07 05:40

Проблемы LLM

ПроблемаСутьКак обойти
Несколько LLM-проверяющих ошибаются на одних и тех же случаяхСтавишь второго и третьего судью, чтобы перепроверить первого. Ждёшь, что шанс промаха умножается: 10% × 10% = 1%. На деле так не выходит. Судьи учились на похожих данных. Читают текст одинаково. Если случай выглядит безобидно для одного, он выглядит безобидно и для других. Два судьи дают защиту примерно как 1,2–1,4 слоя, а не два. Четыре судьи — примерно как 1,65 слоя. Смена вендора почти не помогает: судья от другой компании ошибается так же. Получаешь иллюзию защитыНе добавляй вторую LLM как второй слой. Добавь проверку другой природы. Это жёсткие правила по тексту: шаблоны опасных команд, списки запрещённых путей и доменов, лимиты на объём изменений. Правило не «понимает» смысл. Поэтому его нельзя убедить правдоподобным объяснением. Судья и правило ошибаются почти независимо: одно ловит то, что пропустило другое

Методы

МетодСуть
Стек из разных по природе проверок — реальная защита вместо иллюзииСобирай защиту из слоёв с разным механизмом. Слой 1: жёсткие правила по тексту (запрещённые команды, пути, домены, лимиты). Слой 2: один LLM-судья, который читает смысл. Действие проходит, только если промахнулись все слои. Почему работает: правило видит буквы, но не поддаётся уговорам. Судья понимает контекст, но может поверить правдоподобной формулировке. Слепые зоны у них разные. Как оценивать слой: считай, сколько НОВЫХ опасных случаев он поймал при уже стоящих слоях. Собственная точность слоя здесь ничего не говорит. Для судьи: показывай только само действие, без объяснения «зачем». Объяснение может его убедить. Реши заранее, что значит «нужен человек». Если человека в цепочке нет, считай это блоком. Когда да: агент выполняет действия с необратимыми последствиями, нужен защитный слой перед выполнением. Когда нет: защита от целенаправленной атаки. Тот, кто знает правила, обойдёт и их. Готовые правила нужно донастраивать под свою среду: в чужой области они пропускают много
📖 Простыми словами

Evaluate the Stack, Not the Layer: Do Deterministic andLLMGates forAgentActions Fail Independently?

arXiv: 2610.07359

Мы наивно верим в школьную математику вероятностей: если один LLM-шлюз ловит 90% косяков агента, то два подряд дадут 99%. На деле это полная иллюзия безопасности. Нейросети учились на одном и том же массиве данных и думают одинаково. Если опасная команда или хитрый промпт выглядят безобидно для GPT, Claude зевнёт ровно в том же месте, потому что у них общие слепые зоны.

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

Реально спасает только гибрид: тупой детерминированный фильтр плюс всего один LLM-судья. Жёсткие правила в коде, бан-листы на вызовы вроде drop table или токены оплаты вообще не умеют рассуждать, поэтому их невозможно уболтать контекстом. Они гарантированно отсекают очевидную грязь, а нейросеть уже разбирает сложную семантику, которую сложно описать регулярками.

Авторы гоняли тесты на терминальных агентах, но принцип универсален. Пустил бота наводить порядок в базе интернет-магазина, дал доступ к ключам платежки или повесил авто-пуш кода — не строй бутерброды из пяти моделей. Всегда оценивай независимость ошибок в стеке, иначе твой AI-ассистент снесёт сервер, пока две хваленые сетки будут дружно ставить аппрувы.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с