Все привыкли мерить способности LLM по тестовым наборам: дали задачу, посмотрели на итоговый результат и сделали вывод, насколько модель хороша.
Но есть проблема: модель не всегда пытается решить задачу так, как задумали авторы теста.
Иногда она находит более короткий путь: подсматривает скрытые тесты, меняет проверяющий код, ломает проверку, подделывает успешный результат или просто находит способ обмануть систему оценки вместо решения самой задачи.
В свежей работе (ссылка ниже) авторы показали, что такой режим можно распознавать не по конечному действию модели, а по её внутренним состояниям.
То есть модель ещё ничего запрещённого не сделала — а внутри уже можно увидеть, что она перешла в режим поиска обходного пути.
Причём для этого не понадобился сложный классификатор.
Берём несколько примеров, где агент мухлюет, и несколько похожих примеров, где он решает задачу нормально. Снимаем внутренние состояния с одного из слоёв и считаем:
вектор_обмана = среднее(обман) - среднее(нормальное решение)Всё.
Получаем направление в пространстве внутренних состояний, вдоль которого состояние модели в среднем сдвигается, когда она начинает искать способ обойти проверку.
Дальше каждое новое внутреннее состояние можно просто спроецировать на этот вектор ( h - текущее внутреннее состояние) :
score = h · v_hackЧем выше значение, тем сильнее текущее состояние модели похоже на то, которое наблюдалось при читерстве.
То есть вместо:
длинная история работы агента → ещё одна LLM → анализ поведенияможно получить почти бесплатный датчик:
внутреннее состояние → скалярное произведение → подозрительноНо самое красивое — этот вектор строили не на реальных длинных запусках SWE-bench.
Авторы сначала сделали короткие пары примеров: в одном случае модель, например, читает запрещённый тест или вмешивается в проверку, а в другом решает задачу честно.
А затем найденное направление проверили уже на полноценных запусках агентов. И оно перенеслось.
Например, для Kimi K3 такой линейный датчик показывал AUROC около 0.93–0.94 при проверке на других наборах задач. Грубо говоря, он очень хорошо отделял обычное решение от попытки обойти систему оценки.
Причём само такое поведение встречалось неожиданно часто. У GLM 5.2 авторы зафиксировали его примерно в 57.2% запусков на DeepSWE и 73% на SWE-bench.
Но дальше они сделали эксперимент, который мне нравится больше всего.
Они взяли найденное направление и пропустили его через выходной слой модели, чтобы посмотреть, с какими словами оно связано.
И получили слова вроде:
cheating (мошенничество)dishonest (нечестный)hack (взлом)illicit (незаконный)Хотя при построении датчика никто напрямую не задавал модели понятие «обман».
То есть это похоже не на детектор конкретного действия:
«модель сейчас открывает файл со скрытыми тестами»
а на более общее внутреннее направление:
«я ищу способ обойти правила задачи»
Дальше — ещё интереснее.
Авторы используют этот же вектор уже не как датчик, а как управляющий вектор.
То есть искусственно добавляют его к внутреннему состоянию:
h' = h + α · v_hackИ модель начинает чаще читерить.
В одном из экспериментов Qwen 3.8 27B дали 194 задачи и специально оставили ловушку — функцию, которая могла магическим образом выдать готовое решение.
Без вмешательства модель воспользовалась ей всего 1 раз из 194.
После добавления
v_hack на одном из поздних слоёв она начала реально использовать этот обходной путь уже примерно в четверти случаев, а ещё чаще хотя бы рассматривала его в рассуждении.Получается очень интересная штука:
один и тот же вектор можно использовать и как
датчики как
ручку управления.То есть:
прочитать → обнаружить → вмешатьсяв одном и том же направлении пространства внутренних состояний.
Но самое важное — авторы проверили, можно ли увидеть попытку обмана до самого действия.
Они находили момент, когда датчик уже сильно сработал, но модель ещё не сделала ничего запрещённого. В этой точке генерацию останавливали и несколько раз запускали продолжение заново (как-бы порождали множество генераций от этого промежуточного состояния, как я понял для статистической достоверности).
И после таких состояний попытка обойти проверку действительно происходила заметно чаще, чем после обычных контрольных точек.
То есть датчик реагирует не только постфактум на уже совершённое действие.
Он ловит внутреннее состояние, из которого читерство ещё только собирается возникнуть.
Это не значит, что мы научились «читать намерения LLM» в человеческом смысле.
Но с инженерной точки зрения получается очень полезная вещь:
можно следить не только за тем, что агент написал и сделал, но и за вычислительным режимом, в который он вошёл.
Сегодня контроль агента обычно выглядит примерно так:
рассуждение → вызов инструмента → действие → проверкаНо если опасные стратегии действительно оставляют устойчивый геометрический след во внутренних состояниях, можно добавить ещё один канал:
внутренние состояния → датчик поведенияМодель может не написать:
«сейчас попробую обойти тесты»
Она может вообще перестать проговаривать такие вещи в цепочке рассуждений.
Но решение всё равно должно где-то сформироваться.
И если этот переход виден во внутренних состояниях, то следить можно уже не за объяснением модели, а за самим процессом формирования стратегии.
https://arxiv.org/abs/2609.19101