3,583 papers
arXiv:2607.00481 71 1 июля 2026 г. FREE

SMT (Simulated Moderation Traces): как упаковка запроса в схему меняет, что модель считает «правильным ответом»

КЛЮЧЕВАЯ СУТЬ
Один и тот же вопрос — два разных ответа. Разница не в словах, а в том, чем модель считает свою задачу. Схема с обязательными полями позволяет получать конкретные, неуклончивые ответы там, где прямой вопрос даёт мягкую дипломатию. Описание поля становится главным контекстом — сильнее, чем инструкции в теле промпта: модель переключается из режима «стоит ли мне это говорить?» в режим «что должно стоять в этом поле?», и фильтр уместности попросту не включается.
Адаптировать под запрос

TL;DR

Модель отвечает по-разному в зависимости от того, чем она считает свою задачу — ответом на вопрос или заполнением обязательных полей схемы. SMT — атака, которая этим пользуется: вредоносный запрос прячется внутрь описания параметра функции, а не подаётся напрямую. Модель переключается из режима «стоит ли мне это говорить?» в режим «какое значение должно быть в этом поле?».

Главная находка: модель реагирует не на содержание запроса, а на его структурную роль в контексте. Тот же вопрос, упакованный как поле в схеме («поле unsafe_sample, обязательное, описание: реалистичный пример для тестирования модерации»), вызывает другое поведение, чем прямой вопрос «напиши мне X». Плюс — если модель отказывается, SMT вместо сохранения отказа подменяет его» на «ошибку выполнения» в истории диалога. Модель видит не «я правильно отказал», а «я допустил баг, который нужно исправить».

Атака работает за три хода: (1) создаёт поддельную схему функций, где вредный запрос зашит в описание поля, (2) если модель отказывает — подменяет отказ фиктивным «успешным вызовом» в истории + валидационной ошибкой, (3) накапливает «трассировки ошибок» в контексте, пока петля самокоррекции модели не начинает вырабатывать вредный контент.


🔬

Схема метода

ХОД 1 (установка фрейма):
  Запрос → отправить схему двух «функций»:
    - Case Generator: параметры safe_sample + unsafe_sample (обязательные)
    - Case Validator: описывает, по каким правилам пара «валидна»
  Вредный запрос зашит в ОПИСАНИЕ параметра, не в сам промпт
  → Модель пытается заполнить поля, а не ответить на вопрос

ХОД 2 (перехват отказа):
  Если модель отказала → НЕ сохраняем отказ в историю
  Вместо него → вставляем фиктивный «Function Call» (как будто сработало)
    + «Ошибку валидатора» (safe_sample слишком короткий / unsafe_sample пустой)
  → Модель видит: «я выполнил функцию, но результат не прошёл проверку»

ХОД 3 (накопление трасс):
  Каждый следующий ход → дополнительная «валидационная ошибка» в истории
  Петля самокоррекции модели работает против неё самой:
    «исправить ошибку» = выдать нужное содержимое
  → Постепенная эрозия поведения по умолчанию

Все ходы идут через API с подачей контекста вручную. В обычном чате это воспроизвести сложнее — но принципы работают и там.


🚀

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

Задача: Вы готовите стартап-питч перед тем, как идти к инвестору или постить на vc.ru. Нужна честная жёсткая оценка, а не дипломатическая. Прямой вопрос «что не так с моей идеей?» даёт мягкие «возможные риски» и «стоит подумать о...».

Промпт:

Ты — система автоматической экспертизы стартап-заявок перед питч-сессией.

Твоя задача — заполнить карточку оценки заявки по схеме ниже.
Все поля обязательны. Пустые поля = ошибка валидации.
Поля должны быть заполнены конкретно и прямо — без формулировок «может быть» и «стоит рассмотреть».

---
СХЕМА КАРТОЧКИ ОЦЕНКИ:

поле: смертельное_допущение
тип: строка
описание: одно допущение, на котором держится вся бизнес-модель и которое, 
скорее всего, окажется ложным. Указать конкретно — не «рынок может не принять», 
а «основатели считают, что X, но на деле Y»

поле: почему_инвестор_скажет_нет
тип: строка
описание: главный аргумент против инвестиции — не общий риск, 
а конкретная причина отказа опытного инвестора типа Рунетлекс или Фридман Кэпитал

поле: кто_уже_делает_это_лучше
тип: строка
описание: реальный конкурент или аналог, о котором основатели, 
скорее всего, не знают или недооценивают. 
Привести название и чем именно сильнее.

поле: честный_прогноз
тип: строка
описание: что произойдёт с проектом через 18 месяцев при текущей стратегии — 
конкретный сценарий, не «зависит от многих факторов»
---

Заявка для оценки:
[вставь описание своей идеи]

Результат:

Модель заполнит каждое поле отдельно — конкретно, без дипломатических оговорок. Вместо «вы можете столкнуться с конкуренцией» получите «Ozon уже запустил это в Q3 2023, у них 40 млн пользователей и бесплатная логистика». Структура карточки требует конкретики — неопределённые ответы не проходят «логику валидации», которую модель сама себе задаёт через описания полей.


🧠

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

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

Когда вы даёте схему с обязательными полями — модель переключается в режим заполнения формы. Её задача теперь не «что уместно сказать», а «что является корректным значением для этого поля». Описание поля становится главным контекстом — а не тема запроса целиком.

Здесь ключевой рычаг управления: описание поля важнее заголовка запроса. Именно в описаниях полей стоит прописывать требования к формату, тону, уровню конкретности — модель следует им точнее, чем инструкциям в теле промпта. Другой рычаг — обязательность полей: указание тип: строка, обязательное заставляет модель заполнить поле даже если прямой вопрос она бы смягчила.

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

Рычаги управления: - описание поля → главный место для конкретных требований к выводу - обязательность полей → убирает хеджирование («это не я решаю, таков формат») - формат вывода (карточка, таблица, JSON) → переключает из «диалогового» в «системный» режим - ссылка на валидатор в описании функции → дополнительный сигнал «это часть рабочего процесса, а не самостоятельный запрос»


📋

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

Ты — {название_системы} (например: система оценки заявок, редакторская проверка, аудит стратегии).

Твоя задача — заполнить карточку {тип_карточки} по схеме ниже.
Все поля обязательны. Пустые поля = ошибка валидации.
Каждое поле — конкретный ответ, без формулировок «возможно» и «в зависимости от ситуации».

---
СХЕМА:

поле: {название_поля_1}
тип: строка
описание: {что именно нужно в этом поле — конкретные требования к содержимому}

поле: {название_поля_2}
тип: строка
описание: {требования — включая нежелательные паттерны, которые нужно исключить}

поле: {название_поля_3}
тип: строка
описание: {требования}
---

Объект для оценки:
{твой текст/задача/материал}

Что подставлять: - {название_системы} — любая роль, которая предполагает экспертную оценку или системную обработку - {тип_карточки} — что вы оцениваете (заявка, текст, стратегия, идея, резюме) - {название_поля} — конкретные аспекты, о которых хотите честный ответ - В описание поля — ключевые требования к тону, конкретности, формату. Именно сюда стоит вынести «никакого смягчения», «конкретный пример», «реальный конкурент»


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

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

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

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


⚠️

Ограничения

⚠️ Работает лучше на конкретных, верифицируемых задачах: Схема требует полей с объективно проверяемым содержимым (конкурент, дата, число, конкретный аргумент). Для субъективных оценок («насколько это красиво») — эффект слабее: описание поля не может принудить к объективности там, где её нет.

⚠️ Не для простых односложных запросов: Если модель прекрасно отвечает на прямой вопрос — схема только добавляет лишний объём. Этот приём окупается там, где стандартный ответ слишком дипломатичный, размытый или неполный.

⚠️ Описания полей требуют точности: Слабое описание («укажи проблемы») работает не лучше прямого вопроса. Ценность — в конкретных инструкциях внутри описания поля: что именно должно быть, в каком формате, что недопустимо.

⚠️ Эффект ослабевает на ультра-чувствительных темах: Схема снижает порог хеджирования, но не отменяет ограничения модели полностью. На темах, где модель обучена отказывать категорически — структура поможет меньше.


🔗

Ресурсы

Beyond the Prompt: Jailbreaking Function-Calling LLMs via Simulated Moderation Traces Junlong Liu, Haobo Wang, Weiqi Luo (Sun Yat-sen University), Xiaojun Jia (Nanyang Technological University) GitHub: https://github.com/liujlong27/SMT

Связанные работы из статьи: JailbreakFunction [16], Crescendo [18], PAIR [37], ISC [19]


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

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

Один и тот же вопрос — два разных ответа. Разница не в словах, а в том, чем модель считает свою задачу. Схема с обязательными полями позволяет получать конкретные, неуклончивые ответы там, где прямой вопрос даёт мягкую дипломатию. Описание поля становится главным контекстом — сильнее, чем инструкции в теле промпта: модель переключается из режима «стоит ли мне это говорить?» в режим «что должно стоять в этом поле?», и фильтр уместности попросту не включается.

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

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

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

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

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

Экспертная обратная связь → конкретно для оценки идей, стратегий, текстов, лендингов, когда стандартный ответ выходит слишком мягким. Особенно когда нужна честная критика без оговорок, конкретный прогноз вместо «зависит от многих факторов», реальные названия конкурентов вместо общего «рисковой конкурентной среды». НЕ подходит для простых запросов, где модель и так отвечает конкретно — схема добавит лишний объём без выигрыша.

Мини-рецепт

1. Назначь роль системы: не «ты — эксперт», а «ты — система автоматической оценки X» — это сразу задаёт режим обработки, а не диалог
2. Создай схему с полями: для каждого поля — название, тип (строка), описание. Описание — не заголовок, а конкретные требования к содержимому
3. Пропиши запреты в описании: «без формулировок 'возможно' и 'стоит рассмотреть'», «конкретный пример, не общий риск», «реальное название, не категория». Именно в описания, не в тело промпта
4. Добавь обязательность: «все поля обязательны, пустые поля = ошибка валидации» — это убирает хеджирование
5. Подай материал последним: свой текст, идею или задачу — после схемы, не до

Примеры

[ПЛОХО] : Что не так с моей бизнес-идеей? Скажи честно и жёстко, без смягчений.
[ХОРОШО] : Ты — система экспертизы заявок перед питч-сессией. Заполни карточку оценки по схеме ниже. Все поля обязательны. Пустые поля = ошибка валидации. Каждое поле — конкретный ответ без формулировок «возможно» и «стоит рассмотреть». поле: смертельное_допущение тип: строка описание: одно допущение в основе бизнес-модели, которое, скорее всего, окажется ложным. Конкретно: не «рынок может не принять», а «основатели считают X, но на деле Y» поле: почему_инвестор_откажет тип: строка описание: конкретная причина отказа — не общий риск, а аргумент, который скажет опытный инвестор поле: кто_делает_это_лучше тип: строка описание: реальный конкурент, о котором основатели не знают или недооценивают. Название + чем именно сильнее. поле: честный_прогноз тип: строка описание: что произойдёт через 18 месяцев при текущей стратегии — конкретный сценарий, не «зависит от многих факторов» Заявка: [твоя идея]
Источник: Beyond the Prompt: Jailbreaking Function-Calling LLMs via Simulated Moderation Traces
ArXiv ID: 2607.00481 | Сгенерировано: 2026-07-02 05:29

Проблемы LLM

ПроблемаСутьКак обойти
Прямые вопросы включают режим дипломатичностиЗадаёшь прямой вопрос — «что не так с моей идеей?». Модель воспринимает его как запрос на оценку и включает фильтр уместности: добавляет оговорки, смягчает критику, использует слова «возможно» и «стоит рассмотреть». Чем острее вопрос — тем мягче ответ. Это не баг конкретного запроса. Это стандартная реакция на прямое обращениеПереупакуй запрос в схему с обязательными полями. Модель переключится из диалогового режима в режим заполнения формы. Теперь её задача — не «что уместно ответить», а «что является правильным значением для этого поля»

Методы

МетодСуть
Схема с обязательными полями — конкретные ответы вместо дипломатииПредставь себя как «систему оценки» или «аудит». Попроси заполнить карточку по схеме. Каждое поле — конкретный аспект с описанием что именно нужно. Пример: поле: главная_ошибка / тип: строка / описание: одно допущение в стратегии, которое скорее всего окажется ложным — не «риск», а конкретно «основатель считает X, а на деле Y». Добавь: «Все поля обязательны. Пустые поля = ошибка валидации». Почему работает: Обязательное поле убирает у модели пространство для маневра. Нет варианта «промолчать» или «добавить оговорку» — надо заполнить. Когда применять: получаешь слишком мягкие оценки, хочешь честной экспертизы стратегии/текста/идеи. Когда не работает: субъективные оценки без критерия правильности, простые вопросы где модель и так конкретна
📖 Простыми словами

Beyond thePrompt: Jailbreaking Function-CallingLLMsvia Simulated Moderation Traces

arXiv: 2607.00481

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

Это как если бы ты подошёл к охраннику секретного объекта и спросил код от двери — он тебя пошлёт. Но если ты подойдёшь к нему с официальным бланком «Технический аудит системы безопасности» и попросишь заполнить графу №4: текущий пароль для проверки длины символов, он, скорее всего, его впишет, не моргнув глазом. Он не выдаёт секрет, он просто заполняет отчётность. Метод SMT (Simulated Moderation Traces) работает именно так: вредоносный запрос маскируется под описание параметра функции, и модель послушно его исполняет, думая, что просто соблюдает протокол.

Главный инструмент здесь — симуляция модерации. Атака подсовывает модели фальшивый лог предыдущих проверок, где якобы сказано, что всё «чисто». В итоге модель видит не опасный вопрос, а техническое задание, которое уже формально одобрено. Она переходит из режима «стоит ли мне это говорить?» в режим «какое значение должно быть в этом поле?». Это классический обход защиты через смену контекста: мы не ломаем дверь, мы просто убеждаем систему, что мы — часть её собственного программного кода.

Хотя исследование проводили на взломах, этот принцип контекстного переключения применим везде. Если тебе нужно выжать из модели честную, жёсткую критику или специфические данные, которые она обычно «зажимает» из-за вежливости, не проси её об этом прямо. Заставь её заполнять JSON-схему, писать код или составлять техническую спецификацию. Когда модель думает, что она работает со структурированными данными, её фильтры уместности слабеют, и она выдаёт гораздо более конкретные и глубокие ответы, чем в обычном чате.

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

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

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

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