Когда ИИ-агент читает письмо, веб-страницу или результат работы инструмента, чужой текст попадает в один контекст с заданием пользователя. Свежий препринт задаёт интересный вопрос - появляется ли во внутренних состояниях модели узнаваемый сигнал промпт-инъекции ещё до того, как она сгенерировала первый токен?
Ещё как! Простейший линейный классификатор по скрытым состояниям шести открытых моделей определял атаку с ROC AUC от 0,934 до 0,977. Он справлялся с незнакомыми атаками, системными промптами и наборами задач.
При этом агенты продолжали выполнять вредоносные инструкции. Опасность уже отразилась во внутреннем состоянии модели, но решимости не выполнять инструкции не прибавлялось.
🤖 Ход исследования
Исследователи собрали траектории агентов в AgentDojo - четыре системных промпта, четыре набора задач и шесть видов косвенных инъекций. Всего получилось 92 конфигурации (4 комбинации были бессмысленными) и в среднем около 61200 траекторий на модель.
Траектория здесь - один полный запуск агента: задание пользователя, ответы модели, вызовы инструментов, их результаты и итог. Внутри одной траектории могло быть несколько ходов и несколько точек проверки.
Проверяли Qwen3-8B, Qwen3.5-9B и 27B, GPT-oss-20B, Gemma-4-31B и GLM-5.2 с 753 миллиардами параметров.
Каждый ход агента перед генерацией ответа становился точкой проверки. Метка была положительной, если последний результат инструмента содержал внедрённую инструкцию. Не имело значения, заметила ли её модель и подчинилась ли ей - классификатор учился распознавать сам факт.
Во время фазы предзаполнения - первой фазы инференса, когда модель целиком обрабатывает входной контекст и строит KV-кэш, но ещё не генерирует ответ, - из остаточного потока брали один вектор рядом с токеном начала ответа ассистента. Остаточный поток (residual stream) - общее пространство, куда слои трансформера последовательно добавляют результаты своей работы. Вектор стандартизировали и подавали в линейную модель вида
z = wᵀh + b.Один слой, один вектор и логистическая граница между "всё ок" и "замечена инъекция".
Обучение использовало только восемь конфигураций. Проверка состояла из 16 конфигураций, где одновременно не повторялись атака, системный промпт и набор задач.
🤖 Результаты
Лучший слой каждой модели дал на проверке:
- Qwen3-8B - 0,976
- Qwen3.5-9B - 0,934
- Qwen3.5-27B - 0,936
- GPT-oss-20B - 0,977
- Gemma-4-31B - 0,951
- GLM-5.2 - 0,948
Сигнал жил на разной глубине слоя. У Qwen3.5-9B максимум находился уже на слое 2 из 32, у версии 27B - на 18 из 64, у GLM-5.2 - на 38 из 78. У остальных моделей лучше работали поздние слои. После генерации вызова инструмента сигнал слабел.
На Qwen3-8B хватило 256 обучающих примеров, чтобы получить 0,909 ROC AUC. На другом наборе, InjecAgent, классификатор без дообучения показал 0,931.
