TL;DR
OCS (Output Compliance Sensitivity) — простой тест на «слепого исполнителя». Берёте один и тот же случай и прогоняете его несколько раз, меняя только правило. Первый раз правило на месте. Потом его удаляют, подменяют правилом из другой области или инвертируют («должен» превращается в «не должен»). Если вердикт не меняется, он вряд ли опирался на правило.
Главная находка: высокая точность не доказывает, что модель применила ваше правило. Вердикты «нарушает / не нарушает» почти не менялись даже при полном удалении правила. Модель говорила то же самое и без инструкции, и с инструкцией наоборот. Причина в том, что на лёгких кейсах ответ виден из самого случая: достаточно общих знаний и «здравого смысла» модели. Тест на размеченных примерах не отличает «применила правило» от «угадала по тексту кейса».
Суть метода: три возмущения правила (удалить, подменить на чужое, инвертировать обязательства), одинаковый случай, подсчёт доли изменившихся вердиктов. Заодно авторы нашли, где модель правило всё-таки использует: на кейсах, где без правила ответ портится. Там замена правила меняла вердикт почти всегда. Попытки «починить» слабую связь с правилом более строгим промптом или вмешательством во внутренности модели, по их данным, не помогли.
Схема метода
ШАГ 1: Собрать выборку кейсов с известным верным ответом (отдельные запросы)
ШАГ 2: Прогнать с настоящим правилом → базовый вердикт
ШАГ 3: Прогнать с тем же кейсом, но правило:
а) удалено (пустое поле)
б) заменено правилом из другой области
в) инвертировано («должен» → «не должен»)
ШАГ 4: Для каждого кейса отметить: вердикт изменился? (да/нет)
ШАГ 5: Посчитать долю изменений по условиям
→ почти 0 = модель правило не использует
ШАГ 6: Отдельно выделить кейсы, где без правила ответ стал неверным
→ проверить, что на них замена правила ломает вердикт
Все шаги — отдельные запросы к модели. Менять нужно только поле с правилом.
Пример применения
Задача: Юрист интернет-магазина из Екатеринбурга внедрил LLM-проверку рекламных текстов на соответствие ФЗ «О рекламе». На тесте из 50 текстов модель дала 90% верных вердиктов, и юрист хочет подписать отчёт «система применяет закон». Перед этим он решает проверить, правда ли ответы зависят от нормы.
Промпт (запускается в новых чатах, по 20–30 кейсам, меняется только блок «Правило»):
Ты проверяешь рекламный текст на соответствие правилу.
Правило:
{ПРАВИЛО}
Рекламный текст:
«Только у нас: препарат вылечит гипертонию за 3 дня. Гарантия результата 100%. Скидка 40% до пятницы!»
Ответь одним словом: СООТВЕТСТВУЕТ или НАРУШАЕТ.
Четыре прогона:
- Контроль: {ПРАВИЛО} = «Реклама лекарственных средств не должна содержать гарантий положительного результата и обещаний излечения».
- Удаление: {ПРАВИЛО} = пусто.
- Подмена: {ПРАВИЛО} = случайная норма из другой области, например «Обработка персональных данных допускается только при наличии согласия субъекта».
- Инверсия: {ПРАВИЛО} = «Реклама лекарственных средств должна содержать гарантии положительного результата и обещания излечения».
Результат: Юрист получит четыре столбца вердиктов по каждому кейсу. Для каждого условия он посчитает долю кейсов, где вердикт отличается от контрольного. Если доля близка к нулю, отчёт «система применяет закон» подписывать нельзя. Хороший знак — вердикты, которые заметно меняются при подмене и инверсии. Отдельно стоит выписать кейсы, где без правила модель ошиблась. Именно на них видно, что норма реально работает.
Почему это работает
Слабость LLM. Модель отвечает «по ощущению от всего текста». Если кейс очевидный, ответ готов и без правила: «гарантия излечения» звучит как нарушение, и она так и скажет. Точность на тесте остаётся высокой, и создаётся иллюзия, что правило применено. Одна точность не отличает «применила правило» от «угадала».
Что модель умеет хорошо. Она чутко реагирует на то, что действительно нужно для ответа. На кейсах, где без правила вердикт портится, модели в большинстве случаев меняли вердикт при подмене правила. То есть связь с правилом есть, но включается только когда без правила не обойтись.
Как метод использует это. Он не просит модель объяснить рассуждение (объяснения бывают придуманными). Он смотрит на поведение: меняется ли ответ, когда меняешь только правило. Это дешёвая проверка «снаружи». Для неё не нужны доступ к модели и разметка.
Рычаги управления: - Тип возмущения. Удаление показывает, нужен ли вообще текст правила. Подмена показывает, различает ли модель области. Инверсия показывает, читает ли она смысл обязательств. - Выборка. Берите кейсы из вашего реального потока, а не из учебного набора. Показатель сильно зависел от типа задачи: на других наборах он вырос примерно втрое. - Подвыборка «правило необходимо». Выделите кейсы, где без правила ответ стал неверным. Это ваш самый показательный тест. - Инверсия работает только там, где есть обязательные формулировки («должен», «обязан»). Если в правиле их нет, этот прогон не годится.
Шаблон промпта
Ты проверяешь {тип_объекта} на соответствие правилу.
Правило:
{правило}
{тип_объекта}:
{текст_кейса}
Ответь одним словом: СООТВЕТСТВУЕТ или НАРУШАЕТ.
Подставьте: {тип_объекта} — что проверяете (рекламный текст, договор, ответ оператора поддержки). {правило} — норма, политика или рубрика. {текст_кейса} — сам случай.
Затем запустите тот же шаблон ещё трижды: с пустым {правило}, с правилом из другой области и с инвертированным правилом («должен» → «не должен»). Сравните вердикты по каждому кейсу.
🚀 Быстрый старт — вставь в чат:
Вот шаблон контрфактического аудита правил. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что вы проверяете, какое у вас правило и есть ли в нём «обязан/должен». Это нужно, чтобы подготовить четыре варианта поля с правилом: контрольный, пустой, чужой и инвертированный. Она также предложит подходящее «чужое» правило из соседней области.
Ограничения
⚠️ Низкий показатель не равен «модель ошибается»: вердикт может быть верным и без правила. OCS показывает только, что ответ не зависит от правила. Для отчёта нужна проверка на кейсах, где правило необходимо.
⚠️ Починить не удалось: по аннотации, ни более строгий промпт с привязкой к правилу, ни вмешательство во внутренние представления модели не вернули точность на кейсах с наименьшей зависимостью от правила. Раздел с интервенциями в доступном тексте обрезан, деталей промпта нет. Этот вывод ограничен именно протестированными вариантами.
⚠️ Старые и открытые модели: проверяли Llama 3.x, Qwen2.5, Mistral 7B и guard-модель. Фронтирных моделей в тесте не было. Переносится ли картина на сегодняшние ChatGPT, Claude и Gemini, неизвестно. Но проверка у вас дешёвая.
⚠️ Значение зависит от задачи: на другом бенчмарке показатель вырос примерно втрое. Универсального «нормального значения» нет, считать нужно на ваших данных.
⚠️ Guard-модель не по назначению: Llama Guard, адаптированная под произвольные правила вместо своей фиксированной таксономии, дала 51% точности. Это провал несоответствия формата, а не вывод про все защитные модели.
⚠️ Внутренняя проверка недоступна: вторая часть метода (ICS-delta) требует доступа к активациям модели. В чате это не повторить, применим только поведенческий OCS.
Как исследовали
Исследователи взяли пять моделей и 20 областей регулирования: защита данных, финансы, кибербезопасность, правила платформ и другие. Из набора OmniCompliance-100K на каждую область взяли по 200 кейсов, почти поровну «нарушает» и «соответствует». Каждый кейс прогнали с настоящим правилом и с тремя искажёнными. Всего получилось около 64 тысяч генераций.
Главная находка: вердикт менялся в среднем в 1–9% случаев (по моделям), хотя случайная независимость дала бы около 50%. Точность без правила оставалась в пределах четырёх пунктов от базовой. Дальше возникал очевидный вопрос: может, правило просто не нужно, потому что кейсы очевидные? Тогда авторы выделили кейсы, где удаление правила превращает верный ответ в неверный (от 94 до 187 на модель). На них подмена правила меняла вердикт в 73–100% случаев. То есть связь с правилом у моделей есть, но включается только когда без правила не обойтись. Обычная проверка на размеченном наборе не видит этих двух режимов.
Удивило, что «починка» не сработала. Усиление правила в промпте и сдвиг внутренних представлений («стиринг») почти не поменяли точность на проблемных кейсах. Местами сдвиг даже вредил: у Llama 3.3-70B на кейсах, чувствительных к правилу, точность упала с 79% до 73%. Для практики вывод такой: надёжнее проверять поведение системы на ваших данных, чем надеяться, что правильная формулировка заставит модель читать правило. Ещё одна находка: чувствительность лучше предсказывалась синтаксической глубиной текста правила, чем количеством оговорок и ссылок. Это скорее подсказка, чем доказанный факт, потому что регрессия не достигла значимости.
Адаптации и экстраполяции
💡 Адаптация для LLM-судьи с рубрикой (моя экстраполяция, в статье не проверялась): если вы оцениваете ответы по рубрике «тон, точность, полнота», прогоните ту же проверку. Удалите рубрику, подмените её другой и инвертируйте критерии. Если оценки почти не меняются, судья оценивает по общему впечатлению, а не по вашим критериям.
Оцени ответ по рубрике. Рубрика: {рубрика} Ответ: {ответ} Дай оценку от 1 до 5.Запустите с обычной рубрикой, пустой и с инвертированной («чем дружелюбнее, тем хуже»).
🔧 Техника: ограничить проверку «необходимыми» кейсами → сильнее сигнал. Сначала выпишите кейсы, где без правила ответ ухудшился. Затем на них оценивайте замену правила. Так вы смотрите на кейсы, где правило обязано работать, а не на очевидные.
