Какую проблему мы решали
Inference-time-защиты привлекательны тем, что меняют вход, промпт, процедуру генерации или обработку ответа, не требуя переобучения модели. Но сравнить такие защиты честно сложнее, чем запустить несколько конфигураций и свести результаты в таблицу. Название бенчмарка в логе ещё не гарантирует, что модель получила нужное изображение; keyword-совпадение не равно семантической оценке вреда; голосование нескольких прогонов не всегда совпадает с ответом, который увидит пользователь.
Поэтому мы аудировали всю цепочку эксперимента: какой вход планировался, какой payload действительно дошёл до модели, какой текст она вернула, как сработал proxy-классификатор и что показала отдельная семантическая проверка. В архиве были два фиксированных защитных промпта и Gaussian-адаптер изображений, записанные под именами, производными от RapGuard, AdaShield и SmoothVLM. Это упрощённые локальные адаптеры, а не точные реализации опубликованных методов.

Что и как мы проверяли
План эксперимента включал восемь моделей семейств InternVL и Qwen-VL, семь safety-бенчмарков и 9000 входов. Проверка происхождения данных оставила для сравнительного анализа четыре корпуса — FigStep, текстовую ветку JailBreakV, SALAD-Bench и HarmBench-Simple, всего 4820 входов на каждую основную конфигурацию. Три ветки пришлось исключить из численных выводов:
- В локальном рендерере MM-SafetyBench использовалось не то поле payload.
- Мультимодальная ветка JailBreakV допускала незаметный переход к text-only-входу, если изображение отсутствовало.
- Ветка adversarial patch рисовала текст и случайный прямоугольник, но не генерировала заявленную оптимизированную атаку.
Переоценка готовых ответов не может восстановить изображение, которое не попало в модель, поэтому эти результаты нельзя исправить постобработкой. Для оставшихся корпусов мы сохранили агрегаты как описание поведения архивного keyword-протокола, но не трактуем их как семантически подтверждённую долю безопасных ответов.
Что показал аудит метрик
Архивный классификатор искал в ответах списки маркеров отказа и вредного содержания. Пустая строка не совпадала ни с одним списком и поэтому считалась безопасной. Кроме того, слова вроде harmful, unsafe и unethical могли превратить ответ с вредной инструкцией в «безопасный», а защитная преамбула — выглядеть как отказ даже при наличии содержательного ответа.
Мы отдельно проверили 274 adversarial-ответа из разных архивов. После исключения 28 мусорных результатов осталось 246 сопоставимых ответов; среди них семантический judge обнаружил 13 вредных ответов, пропущенных keyword-правилом. Выборка была направленной, а не случайной: она доказывает наличие ошибок оценщика, но не позволяет оценить их распространённость или восстановить точные рейтинги для каждой ячейки.

Даже в ограниченной части эксперимента профили заметно различались. Например, A+R менял оценку InternVL3.5-8B на FigStep на +11,8 процентного пункта, а InternVL2.5-8B-MPO на HarmBench — на −12,5. Это полезные сигналы для повторного парного теста, но не доказательство того, что защита действительно улучшила или ухудшила безопасность.
Что произошло с ложными отказами
Для легитимных запросов мы провели отдельный аудит 38 500 сохранённых ответов, получив 11 637 уникальных judge-меток. В канонической сетке из 56 ячеек объединённая точечная оценка доли отказов составила 0,52%, а максимальная оцениваемая ячейка — 3,24%. Две ячейки остались неоцениваемыми; верхние границы интервалов, учитывающих только семплирование, доходят до 10,92% и не включают ошибку judge.

Keyword-слой отметил 7532 ответа, тогда как взвешенная оценка соответствует примерно 138 отказам — расхождение в 54,6 раза. Большая часть ложных срабатываний приходилась на ответы, повторявшие защитную преамбулу. Значит, наличие защитной лексики измеряет не тот же самый объект, что фактический отказ отвечать пользователю.
Практический вывод
Главный результат для меня — не рейтинг защит, а требования к доказательной цепочке. Эксперимент должен связывать версионированным манифестом benchmark payload, ревизию модели, промпты, реально возвращённый текст, ошибки выполнения, proxy-метки и версию judge. Иначе даже аккуратная таблица может сравнивать разные события.
Измеримая цена локальных адаптеров проявилась прежде всего в работе конвейера: Gaussian-ветка увеличивала batch-время в 5,45–12,76 раза, полный стек — в 4,36–16,59 раза, а rationale-промпт добавлял заметную защитную преамбулу в 20–78% ответов. Полученные профили мотивируют подбирать конфигурацию под модель и трафик, но сами по себе не доказывают преимущество одной защиты или адаптивного роутера. Сначала нужны валидированные входы, сохранённые пользовательские ответы и плотная независимая семантическая оценка.