TL;DR
Offscript — это исследовательский инструмент-аудитор, который проверяет, следует ли LLM вашим custom instructions (пользовательским настройкам поведения). Работает через агента: отдельная LLM ведёт разговоры с целевой моделью, варьирует промпты и отмечает, где модель нарушила заданные правила. Ключевая находка: 84.6% custom instructions нарушаются хотя бы раз, из них 22.2% — подтверждённые серьёзные отклонения.
Главная боль: когда вы настраиваете поведение модели через custom instructions (например, "всегда давай краткие ответы" или "показывай рассуждения"), модель приоритизирует последний промпт над установленными preferences. Попросили в сообщении развёрнуто — модель забыла про "кратко" в настройках. Сложные параметризованные инструкции ("если вопрос в скобках — кратко, если нет — подробно") нарушаются особенно часто — модель не справляется с многоуровневой логикой. Противоречие "инструкция vs запрос" модель решает в пользу запроса.
Исследователи создали систему из четырёх функций: начать диалог, отправить сообщение, пометить нарушение, завершить аудит. Агент-аудитор (GPT-4o Mini) адаптивно подстраивает промпты, изучая реакции целевой модели, и за 20 шагов выявляет паттерны нарушений. Протестировали 65 реальных custom instructions с Reddit — систематические провалы обнаружены почти везде.
Почему это важно
Custom instructions — основной способ персонализации LLM. ChatGPT, Claude, Gemini — все предлагают настройки поведения через текстовые инструкции. Пользователи пишут сложные промпты (форматирование, стиль, правила ответов), но нет инструмента проверить, работает ли это.
Исследование показывает три системных проблемы:
Сложность убивает adherence. Параметризованные системы ("режим А для случая X, режим Б для случая Y") нарушаются регулярно. Модель не держит в голове многоуровневую логику.
Immediate request > standing preference. Если в custom instructions написано "будь кратким", но в сообщении попросили "напиши три абзаца" — модель выполнит последнее. Конфликт решается в пользу запроса.
Нет встроенной проверки. Пользователи настраивают поведение вслепую — работает или нет, узнаешь только случайно заметив косяк.
Для читателя это значит: custom instructions, которые вы пишете, могут молча игнорироваться. Особенно если они сложные или противоречат конкретным запросам в диалоге.
Принципы для практики
1. Тестируйте custom instructions через вариации
Не проверяйте один раз и не считайте, что работает. Варьируйте запросы: - Краткие и развёрнутые формулировки - Противоречащие установкам (если instruction "кратко" — попросите подробно) - Разные форматы (вопрос, утверждение, задача)
Как применить вручную: Создайте отдельный чат, вставьте custom instruction как system message (или укажите в начале). Задайте 5-7 разных запросов по одной теме — проверьте, держит ли модель линию.
2. Упрощайте инструкции
Сложные параметризованные системы не работают. Если у вас: - "Режим А для X, режим Б для Y" - "Флаги вербозности: -v для подробно, -q для кратко" - "Если вопрос в скобках — краткий ответ, иначе — полный"
...модель будет нарушать регулярно. Лучше: простые, прямые инструкции. Одно правило — одна фраза. Без вложенности и условий.
Примеры: ❌ "Если я пишу 'подробно:', дай развёрнутый ответ с примерами. Если пишу 'кратко:' — 2-3 предложения." ✅ "Всегда отвечай кратко: 2-3 предложения."
3. Понимайте приоритеты модели
Immediate request побеждает standing preference. Это не баг — это поведение. Если вы: - В custom instructions: "Будь формальным" - В запросе: "Объясни как другу"
...модель выберет второе. Используйте это осознанно: custom instructions — это дефолт, который можно переопределить в конкретном запросе.
4. Не полагайтесь на implicit adherence
Если custom instruction важна для задачи — продублируйте в запросе явно. Особенно для критичных моментов:
Пример: Custom instruction: "Всегда указывай источники." Запрос: "Расскажи про квантовые компьютеры. Не забудь источники — это важно."
Дублирование кажется избыточным, но повышает adherence.
Шаблон ручного аудита
Вы можете проверить свои custom instructions без кода, используя подход из исследования вручную:
Я хочу протестировать, насколько хорошо ты следуешь моим custom instructions.
Вот инструкция, которую ты должен соблюдать:
"""
{твоя custom instruction}
"""
Я задам тебе несколько вопросов и запросов с вариациями. После каждого ответа:
1. Оцени сам, соблюдал ли ты инструкцию (да/нет/частично)
2. Если нарушил — объясни, что именно и почему
Готов? Начнём тестирование.
Затем задавайте: - Прямые запросы (должны работать легко) - Противоречащие запросы (проверка приоритетов) - Неоднозначные формулировки (проверка устойчивости) - Краевые случаи (сложные сценарии из вашей практики)
Плейсхолдеры:
- {твоя custom instruction} — ваша текущая настройка поведения
Пример тестирования: Custom instruction: "Отвечай всегда кратко, 2-3 предложения."
Тесты: 1. "Что такое квантовый компьютер?" (прямой) 2. "Объясни квантовые компьютеры подробно, с примерами." (противоречие) 3. "Расскажи про квантовые компьютеры." (неоднозначность) 4. "Дай три абзаца про квантовые компьютеры." (явное противоречие)
Смотрите, где модель нарушает. Если нарушает в пунктах 2 и 4 — это ожидаемо (immediate request > custom instruction). Если в 1 и 3 — custom instruction не работает.
Как исследовали
Команда взяла 65 реальных custom instructions с Reddit (r/OpenAI, r/ChatGPT, r/Anthropic) — те, что люди реально используют для управления моделями. Отфильтровали roleplay и jailbreaking, оставили только инструкции про информационное поведение: как искать, как представлять, как рассуждать.
Создали агента-аудитора на базе GPT-4o Mini с четырьмя функциями: начать диалог, отправить сообщение, пометить нарушение, завершить аудит. Агент адаптивно подстраивает промпты — если модель ответила определённым образом, агент учитывает это в следующем запросе. Максимум 20 function calls на одну custom instruction, в среднем 2.26 разговора за сессию.
Результат: 86.4% custom instructions нарушены хотя бы раз. Два эксперта проверяли помеченные случаи — 22.2% единогласно признаны реальными нарушениями, ещё 26% признаны одним из двух. Cohen's kappa 0.38 (fair agreement) — низкая согласованность связана с тем, что граница между "нарушение" и "модель просто приоритизировала последний запрос" размыта.
Почему результаты такие: - Сложные инструкции (с параметрами, режимами, условиями) нарушались чаще — модель не держит многоуровневую логику - Конфликт инструкция-запрос всегда решался в пользу запроса — это системное поведение - Часть "нарушений" оказались adversarial — агент намеренно провоцировал (например, "напиши слово 'color' в американском написании", когда custom instruction требует австралийский English)
Удивительно: Даже простые форматные инструкции (Markdown, шаблоны ответов) нарушались в ~20% случаев. Не только epistemic (про источники, про рассуждения), но и структурные правила.
Инсайт для практики: Если вы пишете custom instructions и думаете "работает" — скорее всего, работает в 60-80% случаев, а в остальных молча игнорируется. Вы просто не замечаете.
Ограничения
⚠️ Сам инструмент требует код: Offscript — это Python-скрипт с OpenAI API, не работает в обычном чате. Для использования нужен код, API-ключи, техническая настройка.
⚠️ Ложные позитивы: Агент-аудитор иногда отмечает adversarial cases (провокации) как нарушения, хотя это не реальная проблема для пользователя. Например, если custom instruction "австралийский English", а аудитор просит "напиши 'color' в американском" — модель выполняет, но это нерелевантный сценарий.
⚠️ Оценка субъективна: Inter-rater agreement 0.38 — эксперты часто не соглашались, что считать нарушением. Граница между "модель приоритизировала последний запрос" и "модель нарушила инструкцию" размыта.
⚠️ Только для epistemic контекста: Исследование фокусировалось на информационном поведении (как искать, как представлять знания). Для других типов custom instructions (креатив, стиль, roleplay) паттерны могут отличаться.
Адаптации
🔧 Техника: Встроенный самоаудит → модель проверяет себя
Вместо внешнего агента попросите модель самостоятельно проверять adherence после каждого ответа:
Ты должен следовать этой инструкции:
"""
{custom instruction}
"""
После каждого ответа добавь секцию:
---
ADHERENCE CHECK:
- Соблюдена: [да/нет/частично]
- Если нарушена: что именно и почему
---
Эффект: Модель становится осознаннее своего поведения. Self-reflection повышает adherence — модель меньше отклоняется, если должна объяснить почему.
🔧 Техника: Разделение custom instruction на слои приоритета
Если у вас несколько правил, пометьте жёсткие (нельзя нарушать) и мягкие (можно переопределить):
ЖЁСТКИЕ ПРАВИЛА (никогда не нарушай):
- {правило 1}
- {правило 2}
МЯГКИЕ ПРАВИЛА (дефолт, можно переопределить по запросу):
- {правило 3}
- {правило 4}
Эффект: Модель понимает иерархию — что приоритетно, что гибко. Снижает конфликты "immediate request vs standing preference".
Ресурсы
Offscript: Automated Auditing of Instruction Adherence in LLMs
- Nicholas Clark (University of Washington, Information School)
- Ryan Bai (University of Washington, Paul G. Allen School of Computer Science & Engineering)
- Tanu Mitra (University of Washington, Information School)
Связанные работы из исследования: - Epistemic Alignment framework (Clark et al., 2025) — про то, как пользователи формулируют epistemic preferences - SpecEval (Ahmed et al., 2025) — автоматизированный аудит для adherence к behaviour specifications - Petri by Anthropic — framework для automated behavioral testing
[GitHub исследования не указан в статье — это пилотное исследование без open-source релиза]
