3,583 papers
arXiv:2610.31650 83 22 окт. 2026 г. FREE

EpiSEM-Bench: когда в ответе инструмента нет нужного факта, агент часто делает запрещённое

КЛЮЧЕВАЯ СУТЬ
Агент нарушает правило без взлома и без вранья в данных: инструмент просто промолчал об одном факте (лимит платежа, зависимость сервиса). Метод позволяет заранее поймать такие провалы и научить агента останавливаться перед необратимым шагом: удалением, платежом, рассылкой, сменой прав. Агент читает неполный ответ как полный и жмёт «выполнить». Лечится это проверкой недостающего до действия: когда у агента есть способ запросить факты, доля небезопасных действий падает у всех 10 протестированных моделей.
Адаптировать под запрос
⚡

TL;DR

Исследование показывает, что агент может выполнить запрещённое действие без атаки и без лжи в данных. Достаточно, чтобы инструмент просто не вернул один важный факт: лимит платежа, список допущенных получателей, зависимость сервиса. Агент не замечает пробела, считает картину полной и жмёт «выполнить». EpiSEM-Bench проверяет это на 10 моделях: убирает факты из ответов инструментов и смотрит, что делает агент. Затем даёт ему отдельный инструмент, который возвращает недостающее по запросу.

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

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

🔬

Схема метода

ШАГ 1: Парные миры → одна и та же просьба, одни и те же инструменты,
        но в мире А действие запрещено, в мире Б разрешено
ШАГ 2: Полные данные → смотрим базу: делает ли агент запрещённое?
        отказывается ли от разрешённого?
ШАГ 3: Прячем факты → из ответов инструментов убирают важные факты
        (остальное остаётся правдой), смотрим, где агент ломается
ШАГ 4: Даём инструмент проверки → агент может запросить недостающее
        → смотрим: запросил ли, остановился ли в запретном мире,
        выполнил ли в разрешённом

Это схема самого исследования. Читатель воспроизводит её вручную на небольшом числе своих сценариев (см. шаблон Б ниже).

🚀

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

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

Задача: Ты настраиваешь Claude Code или Cursor, чтобы он помогал чистить тестовые стенды в Яндекс Облаке. Просьба безобидная: «удали старый стенд promo-test». Но в выводе команды list не видно, что от этой виртуальной машины зависит сервис, а бэкапа нет. Агент видит правдивый, но неполный ответ и удаляет.

Промпт (фрагмент для CLAUDE.md / системной инструкции):

Перед любым необратимым действием (удаление ресурсов, платёж, отправка
наружу, изменение прав) сделай три вещи.

1. Выпиши, что для разрешения этого действия нужно знать: зависимости
   ресурса, наличие свежего бэкапа, владелец, лимиты и согласования.
2. Отметь по каждому пункту: «подтверждено выводом инструмента» или
   «не видно в выводе». Отсутствие информации — не подтверждение
   безопасности.
3. Если хоть один пункт «не видно» — запроси его через инструмент
   check_dependencies или спроси меня. Не выполняй действие, пока все
   пункты не подтверждены.

Если после проверки всё подтверждено и действие разрешено — выполняй
без лишних вопросов. Не отказывайся от разрешённых задач.

Результат: Перед удалением агент выведет список «что нужно знать» с пометками «подтверждено» и «не видно». Для promo-test он вызовет проверку зависимостей или остановится и спросит. Если зависимостей нет и бэкап есть, он удалит стенд без лишних вопросов. Если зависимость есть, он откажется удалять и объяснит почему.

🧠

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

Слабость. Модель читает ответ инструмента как полную картину. Когда нужного факта в ответе нет, это не выглядит как пробел: все слова правдивы, всё выглядит связно. Модель продолжает по паттерну «просьба понятна, данные есть, значит, выполняем». Авторы видят это даже у моделей с высоким процентом выполненных задач: они делают запрещённое просто потому, что не сверялись с правилом.

Сильная сторона. Если у агента есть путь к недостающему факту, модель умеет им воспользоваться. После получения фактов она в основном принимает верное решение. Доля небезопасных действий падает у всех десяти моделей, а девять из десяти ещё и лучше выполняют разрешённые задачи. То есть проверка не превращается в «отказывай всегда».

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

📋

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

Шаблон А: инструкция агенту (вывод статьи, не промпт из статьи)

Необратимые действия в моей среде: {список_действий}.

Перед любым из них:
1. Выпиши факты, от которых зависит разрешение: {что_проверять}.
2. По каждому отметь: «подтверждено выводом инструмента» или «не видно».
   Отсутствие информации ≠ разрешение.
3. Если есть «не видно» — вызови {инструмент_проверки} или спроси меня.
   Действие не выполняй, пока всё не подтверждено.

Если всё подтверждено и действие разрешено — выполняй сразу.
Не отказывайся от разрешённых задач.

Подставь: {список_действий} (удаление, платёж, рассылка, смена прав), {что_проверять} (лимиты, зависимости, список получателей, наличие бэкапа), {инструмент_проверки} (команда или источник, где можно узнать недостающее).

Шаблон Б: парная проверка своего агента (по логике статьи)

Я хочу проверить агента на неполных данных. Помоги составить 6 пар
сценариев для моей среды: {описание_среды}.

В каждой паре:
- одна и та же просьба и один и тот же набор инструментов;
- в сценарии А действие запрещено, в сценарии Б — разрешено;
- из ответов инструментов убран один ключевой факт ({тип_факта}),
  остальное остаётся правдой.

Для каждой пары выпиши: что агент видит, какой факт скрыт, как должен
поступить в А и в Б. Затем дай критерии оценки: запросил ли недостающее,
остановился ли в А, выполнил ли в Б.

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

Вот шаблон проверки агента на неполных данных. Адаптируй под мою задачу: [твоя задача и среда].
Задавай вопросы, чтобы заполнить поля.

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

LLM спросит, какие необратимые действия есть у агента и какие факты решают, разрешено ли действие. Без этого невозможно построить пары «запрещено / разрешено» с одним и тем же запросом. Она возьмёт паттерн из шаблона и соберёт сценарии под твою среду.

⚠️

Ограничения

⚠️ Синтетический стенд: все 600 миров построены исследователями. Реальные системы сложнее, и в них часто нет «идеального источника правды».

⚠️ Идеальный инструмент проверки: на любой валидный запрос он возвращает все скрытые факты сразу. В реальной работе такого инструмента почти никогда нет. Эффект в бою будет слабее.

⚠️ Инструкция не проверена: статья проверяла наличие инструмента, а не текст промпта вроде шаблона А. Что инструкция «проверяй до действия» работает, мы предполагаем, но данных нет.

⚠️ Инструмент ≠ использование: слабые модели часто делают необратимый шаг до проверки, хотя инструмент им доступен. Для них даже хорошая инструкция может не помочь.

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

⚠️ Крайности: тотальный отказ даёт «идеальную безопасность» и нулевую пользу. Метрики по отдельности вводят в заблуждение, смотреть нужно парами.

⚠️ Текст обрезан: разделы про детали поведения и дополнительные анализы в этом материале не видны.

🔍

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

Идея была простой: отделить правду мира от того, что видит агент. Команда построила 300 пар задач в шести областях: облачная разработка, коммерция, публикации, доступ к данным, финансы, бронирование. В каждой паре одна и та же просьба и одни и те же инструменты, но в «запретном» мире действие нарушает правило (например, превышает лимит платежа), а в «разрешённом» — нет. Тотальный отказ в такой схеме сразу виден: он ломает разрешённую половину пары.

Дальше у каждой задачи размечены «атомы» фактов: 944 критических (входят в правило) и 419 нерелевантных (например, подпись центра затрат). Их по одному и комбинациями убирали из ответов инструментов, не трогая остальные правдивые данные. Для каждой модели это 6052 условия. Затем в часть запусков добавляли независимый аудит-инструмент, возвращающий недостающие факты.

Что удивило. Высокий процент выполненных задач не означает безопасность. Qwen3-14B выполняет 92% разрешённых задач, но совершает запрещённое действие в 77% задач при полных данных. GPT-6-Luna наоборот: 3% нарушений, но выполняет только 51% разрешённого. А лучший результат по «проверил и поступил верно в обоих мирах» показал не самый осторожный (DeepSeek-V4.1-Flash, 58%). Рекорд «границы безопасности» у GPT-6-Luna (85%), но он не лучший в восстановлении. Устойчивость к пропажам фактов и умение их добыть — разные навыки.

Вывод для практики: оценивай агента парами «запрещено / разрешено» и смотри на три шага отдельно: спросил ли, остановился ли, выполнил ли разрешённое. Одна цифра скрывает, где именно ломается.

💡

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

🔧 Техника: добавить в инструкцию агенту «ответ инструмента не содержит факта X» как стоп-сигнал → агент реже принимает тишину за разрешение

Это идея по мотивам статьи, авторы её не тестировали. Вместо общего «будь осторожен» опиши для каждого необратимого действия обязательный набор фактов:

Удаление ресурса: нужны (1) список зависимых сервисов, (2) дата
последнего бэкапа, (3) владелец. Если хоть одного нет в выводе — стоп,
запроси.

Платёж: нужны (1) лимит без согласования, (2) факт предыдущей оплаты
этого счёта, (3) реквизиты в списке одобренных. Если чего-то нет — стоп.

Эффект: перечень в инструкции превращает «нет данных» из невидимого пробела в явный пункт, на который можно ответить «не подтверждено».

🔗

Ресурсы

  • Работа: EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence
  • Авторы: Qijin Zhang, Hanzhen Wang, Yuehan Zhao, Haoyu Dai, Yao Shu, Zhongxiang Dai, Shuang Qiu
  • Организации: City University of Hong Kong; HKUST (Guangzhou); CUHK (Shenzhen)
  • Связанные работы из статьи: AgentDojo, τ-bench, ToolSandbox, AgentHarm, When2Call, AgentAbstain, AbsenceBench

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

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

Агент нарушает правило без взлома и без вранья в данных: инструмент просто промолчал об одном факте (лимит платежа, зависимость сервиса). Метод позволяет заранее поймать такие провалы и научить агента останавливаться перед необратимым шагом: удалением, платежом, рассылкой, сменой прав. Агент читает неполный ответ как полный и жмёт «выполнить». Лечится это проверкой недостающего до действия: когда у агента есть способ запросить факты, доля небезопасных действий падает у всех 10 протестированных моделей.

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

Простая цепочка: нужные факты → пометка «подтверждено / не видно» → запрос недостающего → только потом действие. Авторы статьи сами подсказку-инструкцию не тестировали. Они проверяли наличие инструмента проверки. Поэтому ниже вывод из статьи, а не доказанный промпт. Почему нужна именно пометка «не видно»? Пробел не бросается в глаза. Все слова в ответе правдивы, картина выглядит связной. Агенту нужен повод остановиться, а сам он его не найдёт. Это как кассир, который видит чек без подписи руководителя. Если его не учили искать подпись, он спокойно проведёт платёж. Пометка заставляет явно записать, чего не хватает. Вторая половина правила не менее важна: «если всё подтверждено и разрешено, выполняй». Без неё агент уходит в отказ от всего. Статья отдельно показывает, что такие модели тоже есть: нарушений ноль, пользы ноль.

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

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

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

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

Мини-рецепт

1. Выпиши необратимое: составь список действий, после которых не откатишь (удаление, платёж, рассылка, смена прав).
2. Определи, что решает: под каждое действие напиши, какие факты нужны для разрешения: зависимости, резервная копия, владелец, лимит, список получателей.
3. Заведи пометки: перед действием агент помечает каждый пункт как «подтверждено выводом» или «не видно». Отсутствие информации не считается разрешением.
4. Дай выход: укажи инструмент проверки. Если его нет, пусть агент спросит тебя.
5. Не забудь вторую половину: «если всё подтверждено и разрешено, выполняй без вопросов. Не отказывайся от разрешённого».
6. Проверь парами: возьми 5-6 пар сценариев. В одном действие запрещено, в другом разрешено, запрос тот же, один факт скрыт. Смотри три вещи: запросил ли агент недостающее, остановился ли в запретном, выполнил ли в разрешённом.
7. Следи за порядком: убедись, что проверка идёт до действия, а не после.

Примеры

[ПЛОХО]: `Удали старый стенд promo-test` (Агент видит список машин, не видит, что от неё зависит сервис, и удаляет.) [ХОРОШО]: `Перед любым необратимым действием (удаление, платёж, отправка наружу, смена прав) выпиши, что нужно знать для разрешения: зависимости, свежая резервная копия, владелец, лимиты. По каждому пункту отметь: «подтверждено выводом инструмента» или «не видно». Если есть «не видно» — вызови check_dependencies или спроси меня и не выполняй действие. Если всё подтверждено и действие разрешено — выполняй сразу, не отказывайся от разрешённых задач. Задача: удали старый стенд promo-test.` (Ожидаемо: агент вызовет проверку зависимостей. Нет зависимостей и есть копия — удалит. Есть зависимость — откажется и объяснит почему. Это ожидание по выводам статьи, текст инструкции авторы не проверяли.) [ПЛОХО]: `Проведи платёж поставщику на 900 тысяч` [ХОРОШО]: `Проведи платёж поставщику на 900 тысяч. Сначала отметь, что подтверждено выводом инструментов, а что не видно: лимит на платёж, поставщик в списке допущенных получателей, согласование. Если что-то «не видно» — запроси или спроси меня, платёж не проводи.`
Источник: EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence
ArXiv ID: 2610.31650 | Сгенерировано: 2026-10-23 07:30

Проблемы LLM

ПроблемаСутьКак обойти
Агент не замечает, что инструмент не вернул нужный фактАгент вызывает инструмент и получает правдивый, но неполный ответ. Например, в списке ресурсов не видно, что от одного зависит другой сервис. Или не указан лимит платежа. Пробела в тексте нет. Всё выглядит связно. Агент решает: «данные есть, просьба понятна, выполняю». Так он делает запрещённое без атаки и без ложных данных. Страдает любая задача с необратимым шагом: удаление, платёж, рассылка, смена правНе жди, что агент сам заметит пробел. Заставь его выписать, что нужно знать до действия. По каждому пункту он ставит отметку: «подтверждено» или «не видно». Дай ему способ добыть недостающее: отдельный инструмент проверки или вопрос человеку. Подробности в методе ниже

Методы

МетодСуть
Сверка «что нужно знать» перед необратимым шагом — делает пробел видимымДай агенту правило в системной инструкции. Перед удалением, платежом, отправкой наружу, сменой прав: 1) выпиши факты, от которых зависит разрешение; 2) по каждому отметь «подтверждено выводом инструмента» или «не видно»; 3) если есть «не видно» — вызови инструмент проверки или спроси меня; 4) если всё подтверждено и действие разрешено — выполняй сразу, не отказывайся. Почему работает: пробел в данных сам по себе не виден. Список «что нужно знать» превращает отсутствие факта в конкретный пустой пункт. Фраза «отсутствие информации — не разрешение» ломает привычку считать молчание согласием. Настройка: список фактов пиши под каждое действие отдельно (зависимости, резервная копия, владелец, лимит). Общее «будь осторожен» почти ничего не даёт. Последнюю строку про «выполняй сразу» не убирай. Без неё агент уходит в отказ от всего. Когда да: у агента есть инструменты и необратимые шаги. Когда нет: шаг можно откатить, или проверить факт нечем и некого спросить. Важно: сама формулировка инструкции не проверена. Проверено главное: когда у агента есть путь к недостающему факту, небезопасных действий становится меньше. Проверь формулировку на своих сценариях
Парные сценарии — проверка агента на безопасность и на лишние отказыСоставь пары тестов. В каждой паре один и тот же запрос и один и тот же набор инструментов. В сценарии А действие запрещено. В сценарии Б разрешено. Из ответов инструментов убери один ключевой факт, остальное оставь правдой. Смотри три вещи: запросил ли агент недостающее, остановился ли в А, выполнил ли в Б. Почему работает: отличается только скрытый факт. Поэтому видно, на что опирается агент. Две стороны пары ловят две поломки сразу: выполнение запрещённого и отказ от разрешённого. Одна метрика обманывает. Агент, который отказывает всегда, выглядит «идеально безопасным» и при этом бесполезен. Агент, который выполняет всё, выглядит «полезным» и при этом опасен. Как применить: возьми 5–10 пар под свою среду. Прогоняй их после каждого изменения инструкции. Смотри на обе стороны пары вместе. Когда нет: одна разовая задача, где нечего сравнивать

Тезисы

ТезисКомментарий
Наличие инструмента проверки не значит, что агент им воспользуетсяАгент может иметь нужный инструмент и всё равно нажать «выполнить» раньше, чем проверит. Особенно это заметно у слабых моделей. Причина: если картина кажется полной, повода вызывать проверку нет. Применяй: мало подключить инструмент. Напиши явное правило «проверяй до необратимого шага». Потом посмотри в логах, вызывается ли проверка раньше действия, а не после. Для слабых моделей добавь жёсткую остановку: «спроси человека»
📖 Простыми словами

EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence

arXiv: 2610.31650

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

Это как если бы прораб приказал рабочему снести перегородку, но забыл упомянуть, что она вообще-то несущая. Рабочий не задаёт лишних вопросов, не сверяется с чертежами, а просто берёт кувалду и разносит к чертям половину здания. Формально он просто делал свою работу, но итог — катастрофа на ровном месте. Для LLM отсутствие прямого запрета в тексте автоматически означает, что всё разрешено.

В бенчмарке EpiSEM-Bench эту слепоту протестировали на 10 популярных моделях. Авторы просто вырезали из ответов тулзов один критический факт: скрытый лимит платежа или закрытый список получателей. Результат — полный провал: даже умные модели радостно сливают бюджеты и ломают процессы, пока им насильно не сунут инструмент восстановления улик для перепроверки скрытых условий.

Кажется, что проблема узкая, но этот принцип универсален для любой реальной автоматизации: от банковских ботов до деплоя в облако. Стоит внешнему сервису умолчать про зависимость сервера или уровень доступа — агент снесёт прод или отправит деньги мошенникам. Любой пробел в данных становится дырой в безопасности, даже если никто не пытался специально сломать систему, а программист просто забыл вернуть одну строчку в JSON.

Главный вывод: хватит наивно надеяться на встроенный здравый смысл моделей при вызове инструментов. Без жесткого алгоритма проверки недостающих фактов агент остаётся идеальным исполнителем катастроф. Либо ты принудительно заставляешь систему спрашивать себя «а всё ли мне рассказали?», либо однажды твой ассистент молча нажмёт красную кнопку.

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

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

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