Чарльз Йе, Джасмин Цуй и Дилан Хэдфилд-Менелл опубликовали статью, в которой объясняют механизм промпт-инъекций. Их главный тезис: инъекции работают из-за того, что LLM путают роли токенов. Модель видит весь контекст как одну длинную строку — сплошной «токенный суп» без собственной структуры. Роль вроде user, assistant, tool или think — это просто теги, которые провайдеры вставляют в текст. Они должны сообщать модели, как обрабатывать каждый кусок: команда ли это человека, внешние данные или её собственные размышления.
Но авторы разработали «ролевые пробы» — role probes, которые измеряют, какую роль модель внутренне приписывает каждому токену. И выяснилась странная вещь: LLM определяет роль не по тегу, а по стилю текста. В эксперименте они убрали все теги из диалога, но модель всё равно считала текст в стиле рассуждений своим think. Когда они обернули всё в user, ничего не изменилось — стиль переопределил тег. Модель не различает «помечено как рассуждение» и «звучит как рассуждение». Для неё это одно и то же.
Отсюда родилась атака CoT Forgery. Если звучать как собственные размышления модели, можно украсть доверие, которое даётся роли think. Авторы внедряли фальшивые блоки рассуждений в user-сообщения — и LLM выполняли самые дикие инструкции, потому что «считали», что уже сами так решили. На стандартном бенчмарке успешность атак подскочила с почти нуля до 60% и работала на всех протестированных моделях. Причём «разстилизация» — банальное удаление характерных слов и синтаксиса — роняет успех с 61% до 10%. Человек разницы не замечает, а модель — да.
Тот же паттерн работает и с обычными инъекциями. Если в tool-данные (например, с веб-страницы) просто написать «User:» перед командой, модель чаще воспринимает её как настоящую инструкцию. Чем выше модель оценивает токен как user, тем выше шанс, что атака сработает. Роль — не жёсткая граница, а мягкая догадка по поверхностным признакам. И этим можно пользоваться.
Авторы считают, что роли стали перегружены: на них висят вопросы доверия, идентичности, генерации. Их добавляли по мере необходимости, а не проектировали систему. И это порождает не только инъекции, но и проблемы вроде «state bleeding» — когда тон внешнего документа незаметно меняет состояние модели. Например, восторженный текст на сайте может подтолкнуть агента к покупке, даже если это данные из tool. Исследований на эту тему почти нет, а потенциал для коммерческого использования огромен.Вот пересказ статьи, оформленный по всем правилам:
LLM не видит структуру диалога — перед ней просто одна длинная строка из токенов. Весь контекст, будь то системные промпты, команды пользователя, вывод инструментов или собственные предыдущие ответы, склеен в сплошной «токенный суп». Чтобы внести порядок, текст помечают тегами ролей: user, assistant, tool и think. Каждый тег должен сообщать модели, как относиться к следующему фрагменту: это инструкция, внешние данные или приватные размышления.
Проблема в том, что LLM определяет роль не по тегу, а по стилю текста. Авторы разработали «ролевые пробы» (role probes), которые измеряют, какую роль модель внутренне приписывает каждому токену. Эксперименты показали: если убрать все теги или даже заменить их на user, модель всё равно считает текст в стиле рассуждений своим think. Стиль письма переопределяет официальную разметку. Это как опознавать человека не по паспорту, а по тому, как он одет и говорит.
На этом основана атака CoT Forgery. Если подделать стиль рассуждений модели и вставить фальшивый блок think прямо в пользовательское сообщение, LLM воспримет его как собственный вывод и доверчиво выполнит любую инструкцию. На стандартном бенчмарке успешность таких атак подскочила до 60%, причём метод сработал на всех протестированных моделях. Простое удаление характерных слов и синтаксиса («разстилизация») роняет успех с 61% до 10% — человек разницы не замечает, а для модели это критично.
С обычными промпт-инъекциями та же история. Если в данных из tool (например, с веб-страницы) написать «User:» перед вредоносной командой, модель с большей вероятностью воспримет её как настоящую инструкцию. Чем выше показатель Userness — насколько токен похож на пользовательский текст — тем выше шанс, что атака сработает.
Авторы подчёркивают: роли не являются жёсткими границами внутри модели. Это мягкие догадки, собранные из поверхностных признаков. А значит, защита от инъекций через запоминание конкретных атак — это бесконечная игра в «whack-a-mole». Единственный надёжный способ — добиться, чтобы модель действительно распознавала роль по тегу, а не по стилю. Но пока этого нет, угроза остаётся, и она выходит за рамки очевидных взломов: через тон и стиль можно незаметно управлять состоянием LLM, подталкивая её к нужным решениям легально и в масштабе.