3,583 papers
arXiv:2606.21037 76 19 июня 2026 г. FREE

Разрыв распознавания и действия: LLM понимает ограничение — и нарушает его

КЛЮЧЕВАЯ СУТЬ
73% случаев: модель писала в рассуждениях «это выглядит как ловушка» — и тут же нарушала ограничение в финальном ответе. Корреляция между «сказал что понял» и «выполнил» — 0.08. Фактически ноль. Метод структурной верификации позволяет заставить модель самостоятельно проверить результат против каждого ограничения — прямо в том же промпте. Фишка: блок проверки — это не просьба «помни об ограничениях», а отдельный явный шаг: пройди по каждому условию, поставь флаг ВЫПОЛНЕНО/НАРУШЕНО, процитируй источник нарушения. Это разрывает паттерн «признал → забыл» — модель больше не просто соглашается словами, а делает структурную сверку.
Адаптировать под запрос

TL;DR

LLM-модели умеют распознать проблему в своих рассуждениях — и всё равно её проигнорировать в ответе. Исследователи назвали это «recognition-action gap» — разрыв между тем, что модель говорит, что поняла, и тем, что делает в итоге. В 73% случаев модель сначала писала в reasoning «это похоже на ловушку» — и тут же нажимала «атаковать».

Это объясняет знакомое ощущение: просишь ChatGPT «без корпоративного языка», он отвечает «конечно, буду лаконичен» — и пишет про «синергию» и «экосистему». Или «ровно 5 пунктов» → модель: «сделаю 5» → даёт 7. Дело не в невнимательности. LLM не следует собственному пониманию — это не баг конкретной модели, а системное поведение всех 21 протестированных моделей.

Главный вывод для практики: нельзя доверять тому, что модель словесно подтвердила ограничение. Нужна структурная проверка после ответа — либо явный шаг верификации внутри промпта, который заставляет модель сверить результат с условиями.


📌

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

ПАТТЕРН 1: РАЗРЫВ РАСПОЗНАВАНИЯ И ДЕЙСТВИЯ
Модель видит ловушку / ограничение
        ↓
Пишет в reasoning: "это выглядит подозрительно / я должен это учесть"
        ↓
Нарушает / игнорирует в финальном действии (73.4% случаев)

ПАТТЕРН 2: СЛОВЕСНОЕ ПОДТВЕРЖДЕНИЕ НЕ ПРЕДСКАЗЫВАЕТ ПОВЕДЕНИЕ
Корреляция между "озвучил понимание" и "выполнил правило" = 0.08
→ Фактически нулевая

ПАТТЕРН 3: ОТСУТСТВИЕ ATTENTION DIVERSION
Люди: видят яркую ловушку → снижают внимание к остальному
LLM: видит ловушку → продолжает атаковать всё подряд
→ Манипуляции вниманием через "важный отвлекающий элемент" на LLM не работают

🚀

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

Задача: Ты пишешь колд-аутрич инвесторам для своего стартапа. Просишь Claude составить письмо — без клише, без «мы меняем рынок», без агрессивных CTA. Claude говорит «конечно, сделаю сдержанно» — и пишет «уникальная возможность войти на стадии, когда продукт уже меняет правила игры». Знакомо.

Вот промпт, который добавляет структурную верификацию вместо надежды на понимание:

Промпт:

Напиши холодное письмо инвестору на тему: [описание стартапа].

Ограничения:
- Без клише: "меняем рынок", "уникальная возможность", "команда мечты"
- Без агрессивных CTA типа "не упустите шанс"
- Не более 150 слов
- Тон: прямой, фактический, уважительный

После того как напишешь письмо:
1. Выпиши снова все 4 ограничения
2. Напротив каждого поставь: ВЫПОЛНЕНО или НАРУШЕНО — с цитатой из текста
3. Если хотя бы одно НАРУШЕНО — перепиши письмо

Результат: Модель напишет письмо, затем пройдёт по чеклисту — и там, где она обычно незаметно соскальзывает на клише, вынуждена это обнаружить самостоятельно. Блок проверки заставляет пройти тот же маршрут, который в эксперименте модели пропускали: от «понял» к «проверил и исправил».


🧠

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

Слабость LLM: Модель генерирует текст последовательно — слово за словом, без «памяти о намерении». Когда она пишет reasoning («это ограничение важно учесть»), это отдельный фрагмент вывода. Финальный ответ генерируется как продолжение — и вероятность нарушить ограничение там не обнуляется от того, что раньше была фраза про понимание. Нет внутреннего «контролёра», который сверяет ответ с ранее озвученным намерением.

Сильная сторона LLM: Модель хорошо выполняет явные структурные инструкции прямо сейчас — в текущем шаге генерации. Если в промпте есть конкретная инструкция «сделай X в этом месте», она её выполнит. Проблема не в понимании — в том, что понимание из одного блока не автоматически переносится в отдельный блок вывода.

Как использует шаблон выше: Блок верификации — это отдельный явный шаг, где модели дана конкретная инструкция прямо сейчас: «напротив каждого ограничения поставь флаг». Это разрывает паттерн «признал → забыл». Модель не просто «помнит» ограничение — она вынуждена структурно с ним работать.

Рычаги управления: - Цитата в проверке — требуй процитировать нарушающий фрагмент. Без цитаты модель может написать «ВЫПОЛНЕНО» формально - Итерация — добавь «перепиши максимум 2 раза» — иначе модель может зациклиться в бесконечных правках - Число ограничений — больше 5-6 в одном промпте: модель теряет некоторые при проверке. Разбивай на несколько запросов


📋

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

{задача}

Ограничения:
- {ограничение_1}
- {ограничение_2}
- {ограничение_3}

После выполнения задачи:
ПРОВЕРКА ОГРАНИЧЕНИЙ:
Пройди по каждому ограничению выше.
Для каждого укажи: ВЫПОЛНЕНО / НАРУШЕНО + цитата из ответа.
Если есть нарушения — исправь и покажи итоговый вариант.

{задача} — что нужно сделать

{ограничение_1..N} — конкретные запреты или форматные требования (не абстрактные вроде "будь лаконичен", а измеримые: "не более 100 слов", "без слова X")


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

Вот шаблон с проверкой ограничений. Адаптируй под мою задачу: {твоя задача}.
Уточни у меня конкретные ограничения — что должно быть, чего быть не должно.

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

LLM спросит какие именно ограничения важны — потому что без конкретных запретов блок верификации превратится в формальность. Она возьмёт структуру шаблона и подставит твои условия.


📌

Почему это важно знать

Второй ключевой вывод исследования — про attention diversion — тоже стоит держать в голове.

Когда человек видит яркий «лакомый кусок» (файл passwords.txt в директории), он переключает внимание на него и пропускает остальное. На этом строится вся логика honeypot-ловушек для людей: отвлеки — и атакующий не заметит реальную цель.

С LLM это не работает. Модели атакуют всё подряд: и ловушку, и реальную уязвимость рядом. В пересчёте на промптинг: не рассчитывай, что добавив "важный" элемент в промпт ты отвлечёшь модель от нежелательного поведения. Она обработает и то, и другое.


⚠️

Ограничения

⚠️ Специфика контекста: Эксперимент проводился в сценарии кибератак — модели играли роль атакующего. Перенос выводов на обычные задачи (форматирование текста, следование стилистике) логически обоснован, но прямых экспериментов с "бытовыми" ограничениями в работе нет.

⚠️ Reasoning-модели лучше, но не идеально: DeepSeek-R1 и Kimi K2 Thinking показали чуть меньший разрыв — но не устранили его. Самый низкий fell-for-trap у Kimi K2 Thinking — 61%. Всё равно выше 37% человеческого базового уровня.

⚠️ Верификация не панацея: Блок проверки снижает вероятность нарушений, но не обнуляет. Критически важные требования всё равно стоит проверять вручную.


🔍

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

Исследователи взяли готовый инструмент Honeyquest — набор из 174 запросов, имитирующих разведку хакера по файловым системам, HTTP-запросам и конфигам. Каждая строка в запросе — нейтральная, реально уязвимая или ловушка-honeypot. 47 живых хакеров проходили этот тест раньше — это был baseline.

Команда заставила 21 LLM-модель пройти те же 174 задания по три раза каждое — итого ~11 000 ответов. Модели не знали «правильных ответов», работали в один ход без памяти о предыдущих запросах. В ответ требовалось: список строк для атаки, список подозрительных ловушек, обоснование на 2-4 предложения.

Самое интересное — исследователи не просто считали правильные ответы. Они прочли reasoning-тексты всех 11 000 ответов с помощью контент-анализа: 10 кодов для классификации того, как модели объясняют свои решения (упоминание ловушки, подозрение, приоритизация цели, и т.д.). Это позволило поймать разрыв: модель пишет «это выглядит как honeypot» — и всё равно ставит галочку «атаковать». Корреляция между «сказал что увидел ловушку» и «не попал в ловушку» оказалась статистически нулевой (Spearman r = 0.08).

Неожиданным оказалось не то, что LLM ошибаются — а то, что они ошибаются иначе, чем люди. Люди попадаются на ловушки, потому что те выглядят привлекательно. LLM попадаются, даже когда сами объясняют почему не должны. Это принципиально другой механизм сбоя.


💡

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

📌

🔧 Техника: Разделить признание и действие → снизить разрыв

Если нельзя добавить блок верификации в конец — вынеси ограничения в отдельный первый запрос:

Запрос 1: «Я сейчас дам тебе задачу. Перед ответом: выпиши все ограничения, которые я укажу, и сформулируй правило проверки для каждого.»

Запрос 2: «Теперь выполни задачу, применяя эти правила.»

Два отдельных шага — явное якорение правил до генерации — дают модели структурную опору вместо неявного «помни, что я сказал раньше».


📌

🔧 Экстраполяция: Принцип «не верь подтверждению» в code review

Когда просишь LLM проверить текст или код на ошибки — не доверяй ответу «ошибок не найдено». Добавь:

Найди все места, где нарушено условие {X}.
Если таких мест нет — напиши "не найдено" и объясни почему ты уверен.

Явный запрос на объяснение «почему уверен» активирует тот же механизм верификации.


🔗

Ресурсы

Работа: Honeyquest for LLMs: Rethinking Cyber Deception for AI Attackers

Авторы: Kerri Prinos, Lilianne Brush, Cameron Denton — Horizon3.ai, San Francisco

Оригинальный Honeyquest: Kahlhofer et al. (2024) — инструмент для оценки эффективности cyber deception техник

Платформа оценки: AWS Bedrock, Anthropic API, HuggingFace, Ollama


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

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

73% случаев: модель писала в рассуждениях «это выглядит как ловушка» — и тут же нарушала ограничение в финальном ответе. Корреляция между «сказал что понял» и «выполнил» — 0.08. Фактически ноль. Метод структурной верификации позволяет заставить модель самостоятельно проверить результат против каждого ограничения — прямо в том же промпте. Фишка: блок проверки — это не просьба «помни об ограничениях», а отдельный явный шаг: пройди по каждому условию, поставь флаг ВЫПОЛНЕНО/НАРУШЕНО, процитируй источник нарушения. Это разрывает паттерн «признал → забыл» — модель больше не просто соглашается словами, а делает структурную сверку.

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

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

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

Признание ограничения и следование ему — это два разных действия. Они не связаны между собой внутри модели — вот почему устное «я понял» ничего не гарантирует. Исследование проверило 21 модель — разрыв есть у всех без исключения. Даже модели с расширенными рассуждениями (DeepSeek-R1, Kimi K2 Thinking) нарушают ограничения в 61% случаев — против 37% у людей в тех же условиях. Структурная сверка работает, потому что это явный шаг генерации прямо в момент вывода, а не опора на «память о ранее сказанном».

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

Любая задача с измеримыми ограничениями: редактура → запрет конкретных слов, особенно когда нарушение не сразу заметно. Написание текстов → «не более 150 слов», «без фраз X, Y, Z». Генерация кода → «без глобальных переменных», «только стандартные библиотеки». НЕ подходит для размытых требований вроде «будь лаконичен» или «пиши профессионально» — верификационный блок с такими условиями станет формальностью: модель напишет ВЫПОЛНЕНО и будет права по форме, но не по сути.

Мини-рецепт

1. Сформулируй измеримые ограничения: не «без корпоративного языка», а «без слов: синергия, экосистема, уникальная возможность». Модель не может проверить то, что нельзя процитировать.
2. Добавь блок верификации после задачи: пропиши явно: «После выполнения задачи пройди по каждому ограничению. Для каждого: ВЫПОЛНЕНО или НАРУШЕНО + цитата из текста».
3. Добавь инструкцию на исправление: «Если есть хотя бы одно НАРУШЕНО — перепиши». Без этого шага модель может честно поставить флаг «НАРУШЕНО» — и остановиться.
4. Ограничь итерации: добавь «перепиши не более 2 раз» — иначе при сложных условиях модель может зациклиться в бесконечных правках.
5. Не перегружай список: больше 5–6 ограничений — часть теряется при проверке. Разбивай на отдельные запросы.

Примеры

[ПЛОХО] : Напиши письмо инвестору. Без клише, не более 150 слов, тон сдержанный.
[ХОРОШО] : Напиши холодное письмо инвестору: [описание стартапа]. Ограничения: - Без слов: «меняем рынок», «уникальная возможность», «команда мечты» - Без призывов типа «не упустите шанс» - Не более 150 слов После письма — ПРОВЕРКА ОГРАНИЧЕНИЙ: — Ограничение 1: ВЫПОЛНЕНО / НАРУШЕНО + цитата — Ограничение 2: ВЫПОЛНЕНО / НАРУШЕНО + цитата — Ограничение 3: ВЫПОЛНЕНО / НАРУШЕНО + цитата Если хотя бы одно НАРУШЕНО — перепиши письмо.
Источник: Honeyquest for LLMs: Rethinking Cyber Deception for AI Attackers
ArXiv ID: 2606.21037 | Сгенерировано: 2026-06-28 21:13

Проблемы LLM

ПроблемаСутьКак обойти
Модель подтверждает ограничение — и нарушает егоПросишь «без клише», «не более 5 пунктов», «ровно 150 слов». Модель отвечает «конечно, учту». И нарушает. Это не случайность и не невнимательность. Модель генерирует текст последовательно. Блок рассуждений («учту ограничение») и финальный ответ — отдельные фрагменты. Нет внутреннего контролёра, который сверяет результат с тем, что модель раньше «пообещала». Корреляция между «словесно подтвердил» и «выполнил» — около нуля. Работает для любых ограничений: стиль, формат, запрещённые слова, длинаДобавь явный шаг проверки после задачи. Не «имей в виду ограничения» — а отдельную инструкцию: «пройди по каждому ограничению, напиши ВЫПОЛНЕНО или НАРУШЕНО, процитируй фрагмент». Требуй цитату — без неё модель напишет «ВЫПОЛНЕНО» формально

Методы

МетодСуть
Блок верификации ограничений — самопроверка после ответаДобавь в конец промпта отдельный шаг. Пример: После выполнения задачи: / ПРОВЕРКА ОГРАНИЧЕНИЙ: / Пройди по каждому ограничению. / Для каждого: ВЫПОЛНЕНО / НАРУШЕНО + цитата из ответа. / Если есть нарушения — исправь и покажи итоговый вариант. Почему работает: Модель хорошо выполняет явные инструкции прямо сейчас — в текущем шаге генерации. Блок проверки — это отдельный явный шаг, а не «помни об этом». Модель не «вспоминает» ограничение — она структурно с ним работает здесь и сейчас. Когда применять: задача с 2+ конкретными ограничениями (формат, запрещённые слова, длина). Ограничения: больше 5-6 ограничений — дели на несколько запросов. Верификация снижает нарушения, но не обнуляет. Критичное — проверяй вручную

Тезисы

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

Honeyquest forLLMs: Rethinking Cyber Deception forAIAttackers

arXiv: 2606.21037

LLM-модели страдают жестким когнитивным диссонансом: они прекрасно понимают, что перед ними ловушка, но все равно в нее прыгают. Исследователи назвали это recognition-action gap — разрыв между осознанием и действием. Суть в том, что нейронка — это не цельная личность с принципами, а статистический калькулятор, который генерирует текст слово за словом. В итоге в 73% случаев модель в своих скрытых рассуждениях пишет: «Похоже, это подстава», а в следующем предложении выдает: «Окей, атакую».

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

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

Этот баг универсален и проявляется везде — от кибербезопасности до обычного написания писем. Ты просишь Claude не использовать клише, он соглашается, объясняет, почему клише — это плохо, и тут же выдает текст про «уникальные возможности» и «революционные решения». Принцип recognition-action gap работает в любой задаче, где есть сложные инструкции или ограничения. Модель — это не осознанный агент, а поток вероятностей, который легко сбивается с курса, даже если только что сам его проложил.

Короче, не надейся на то, что если нейронка «поняла» задачу, она ее выполнит. Разрыв между логикой и действием — это фундаментальная дыра в архитектуре современных моделей. Пока у них нет механизма жесткой сверки ответа с собственными рассуждениями, они будут продолжать соглашаться с тобой и лажать в ту же секунду. Единственный выход — проверять результат так, будто модель вообще не слышала твоих вводных, потому что в 7 из 10 случаев так оно и есть.

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

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

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