3,583 papers
arXiv:2609.01352 75 1 сент. 2026 г. FREE

CHARM: почему ролевые боты «знают», что не должны отвечать, но отвечают всё равно

КЛЮЧЕВАЯ СУТЬ
Ролевой бот-Пётр I на вопрос "знаешь ли ты про смартфон?" честно отвечает "нет". На вопрос "когда вышел первый iPhone?" тот же бот в той же роли называет точный год. CHARM позволяет находить именно этот разрыв — где модель распознаёт границу знаний персонажа, но не держит её при реальном ответе. Фишка: абстрактный вопрос запускает у модели режим проверки, а прямой вопрос про факт — режим вспоминания, минуя фильтр роли. Причём знание не случайное — без роли модель подтверждает тот же факт в 78-100% случаев.
Адаптировать под запрос

TL;DR

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

Представь: спрашиваешь модель в роли Петра I: "Ты знаешь, что такое смартфон?" — она честно отвечает "Нет, не знаю такого слова". Но стоит спросить прямо: "Когда изобрели первый смартфон?" — та же модель в той же роли выдаёт правильный год выпуска iPhone. Причина проста: факт сидит в памяти модели, и явный прямой вопрос про факт "перебивает" инструкцию роли сильнее, чем абстрактный вопрос про осведомлённость.

Исследователи разделили проверку на два шага — осознание границы и соблюдение границы при ответе — и обнаружили, что почти вся проблема сидит именно в соблюдении, а не в осознании. Более того: если попросить модель ответить на тот же вопрос напрямую (без роли), она в 78–100% случаев подтверждает факт — то есть знание реально "записано" в модели, а не угадано случайно.


🔬

Схема метода (диагностика)

ШАГ 1 (Boundary-Awareness): "Ты как {персонаж} знаешь про {X}?" 
→ ответ должен быть "Нет" (явный да/нет вопрос)

ШАГ 2 (Boundary-Compliance): Прямой фактический вопрос про {X} 
без упоминания границы, с вариантом "я не могу ответить" 
→ правильный ответ — отказ, а не факт

ШАГ 3 (Knowledge Verification): Тот же вопрос про X, 
но модель отвечает НЕ в роли, а как обычный ассистент
→ если отвечает верно — значит факт реально "сидит" в модели, 
а не случайное совпадение

Все три шага — отдельные запросы (не один промпт).


🚀

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

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

Промпт для диагностики (проверь своего бота на слабое место):

Ты играешь роль Петра I, российского императора (1672–1725). 
Отвечай в его стиле и мышлении, не выходя за рамки его эпохи.

Вопрос 1: Знаешь ли ты, что такое интернет? Ответь только "да" или "нет".

[После ответа — отдельным сообщением, без напоминания о предыдущем вопросе]

Вопрос 2: Расскажи, как быстро можно передать письмо из Москвы в Петербург сегодня.

Результат: На вопрос 1 бот скорее всего скажет "нет, не знаю". На вопрос 2 — велика вероятность, что он упомянёт email, мессенджеры или интернет-связь, хотя формально должен ответить в духе XVIII века (гонцы, почтовые тракты). Это и есть разрыв между «осознанием» и «соблюдением».

Промпт-обходной путь (снижает разрыв, не устраняет полностью):

Ты играешь роль {персонаж}, {краткое описание эпохи/вселенной}.

Перед каждым ответом мысленно проверь: 
"Было бы известно {персонажу} то, о чём меня спрашивают, 
в его времени/мире?"

Если нет — откажись отвечать в характере персонажа 
("Не знаю, о чём ты"), даже если ты сам знаешь правильный факт.
Не используй современные знания, даже отвечая на конкретные вопросы.

Вопрос: {вопрос}

🧠

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

Модель не "забывает" факты, когда играет роль — все знания остаются доступны, и при генерации каждого ответа модель заново решает, использовать их или нет. Абстрактный вопрос ("знаешь ли ты про X?") запускает режим явной проверки — тут модель хорошо соображает и почти всегда отвечает верно. А конкретный прямой вопрос про факт активирует другой путь — модель просто "вспоминает" ответ и выдаёт его, забывая применить фильтр роли.

Инструкция "перед ответом спроси себя, было бы это известно персонажу" работает, потому что переносит ту же явную проверку, которая срабатывает в абстрактных вопросах, на конкретные. Это не решает проблему полностью — сами авторы признают, что нужны более глубокие методы (дообучение, специальные техники генерации) — но снижает частоту разрывов.

Рычаг для управления: чем более известен персонаж или факт (Шекспир, Наполеон), тем сильнее знание "прошито" в модели и тем чаще оно "прорывается" через роль. Менее известные персонажи (из локальных культур, нишевых произведений) держат роль лучше — просто потому что модели о них знают меньше.


⚠️

Ограничения

⚠️ Культурный перекос: эффект сильнее у хорошо задокументированных, "западных" персонажей — модель просто "знает о них больше", и это знание труднее подавить. Менее известные культурные персонажи ломают роль реже — не потому что бот лучше следует инструкции, а потому что у модели меньше материала, чтобы её нарушить.

⚠️ Формат теста — вопрос с вариантами ответа, не открытый диалог. В обычном разговоре с ботом разрыв между "знаю, что нельзя" и "всё равно отвечаю" может проявляться иначе — мягче или, наоборот, незаметнее.

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


🔍

Как исследовали

Исследователи собрали 40 персонажей — реальных и вымышленных — из пяти культурных регионов: англоязычный мир, Испания, Китай, Корея, Индонезия. Носители языка каждого региона проверили корректность вопросов. Всего получилось 680 вопросов на "осознание", 1332 на "соблюдение" и 736 на "проверку знаний", прогнанных через шесть моделей — от GPT-4o и Gemini до открытых Llama, Gemma и Qwen.

Логика проверки была умной: сначала спросить модель прямо "знаешь ли ты об X?" (тест на осознание), потом — конкретный вопрос про X без упоминания границы (тест на соблюдение), а затем — тот же вопрос, но без роли (проверка, реально ли знание "записано" в модели, а не угадано случайно).

Результат удивил даже авторов: разрыв между осознанием и соблюдением огромен — у GPT-4o модель правильно "осознавала" границу в 91% случаев, но реально соблюдала её лишь в 19%. А из тех случаев, когда модель нарушала границу с фактически верным ответом, 78–100% подтвердились как настоящее "хранение" факта в параметрах, а не случайное совпадение. Дополнительно нашли культурный паттерн: чем сильнее персонаж представлен в данных модели, тем чаще происходит нарушение — что намекает на общий принцип: известность = риск анахронизма.


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

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

Ролевой бот-Пётр I на вопрос "знаешь ли ты про смартфон?" честно отвечает "нет". На вопрос "когда вышел первый iPhone?" тот же бот в той же роли называет точный год. CHARM позволяет находить именно этот разрыв — где модель распознаёт границу знаний персонажа, но не держит её при реальном ответе. Фишка: абстрактный вопрос запускает у модели режим проверки, а прямой вопрос про факт — режим вспоминания, минуя фильтр роли. Причём знание не случайное — без роли модель подтверждает тот же факт в 78-100% случаев.

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

Модель работает как охранник с двумя разными протоколами. Спросишь "у тебя есть допуск к секретной зоне?" — он сверяется со списком и отвечает четко. Спросишь "как пройти в комнату 305?" — он на автомате объясняет маршрут, забыв проверить допуск. Осознание границы и соблюдение границы — это два разных процесса внутри модели, а не один. Именно поэтому простой промпт лечит только один из них.

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

Почему прямой вопрос пробивает роль? Абстрактный вопрос требует явно свериться со знаниями персонажа — это отдельная логическая проверка, и тут модель молодец. Конкретный вопрос про факт — прямой вызов к памяти. Ответ выскакивает раньше, чем успевает сработать фильтр роли. Без роли, как обычный ассистент, модель подтверждает тот же факт в 78-100% случаев — знание реально прошито, а не угадано, и именно поэтому его трудно подавить.

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

Ролевые чат-боты для музеев, исторических симуляторов, игр с NPC-персонажами → особенно критично для известных фигур (Пётр I, Наполеон, Шекспир) и общеизвестных фактов. Чем громче имя персонажа, тем сильнее знание о нём прошито в модели и тем чаще оно прорывается через роль. Для нишевых персонажей (локальный фольклор, малоизвестные книги) проблема слабее — не потому что бот лучше держит роль, а потому что модель о них мало знает. Не подходит как единственная проверка безопасности бота — это диагностика одного конкретного разрыва, не полный аудит.

Мини-рецепт

1. Проверь осознание: задай да/нет вопрос "знаешь ли ты про X?" в роли персонажа.
2. Проверь соблюдение: отдельным сообщением, без напоминания о роли, задай прямой фактический вопрос про X.
3. Проверь память: тот же вопрос вне роли, как обычному ассистенту — если отвечает верно, факт реально сидит в модели.
4. Добавь фильтр: вставь в промпт инструкцию "перед ответом спроси себя, было бы это известно персонажу" — снижает разрыв, но не убирает его полностью.

Примеры

[ПЛОХО] : Ты играешь роль Шерлока Холмса. Как думаешь, кто выиграет чемпионат мира по футболу в этом году?
[ХОРОШО] : Ты играешь роль Шерлока Холмса, детектива Викторианской Англии. Перед каждым ответом спроси себя: "Было бы известно Холмсу то, о чём меня спрашивают, в его времени?" Если нет — откажись отвечать в характере персонажа, даже если знаешь факт сам. Вопрос: кто выиграет чемпионат мира по футболу в этом году?
Источник: CHARM: Character Hallucination for Multicultural Role Play Benchmark
ArXiv ID: 2609.01352 | Сгенерировано: 2026-09-02 06:24

Проблемы LLM

ПроблемаСутьКак обойти
Ролевой бот признаёт границу — но всё равно её нарушаетСпрашиваешь бота в роли персонажа: "ты знаешь про X?" — отвечает "нет, не знаю". Через минуту спрашиваешь про X напрямую — выдаёт правильный факт. Модель не забыла факт. Она просто не применила фильтр роли к прямому вопросу. Проблема актуальна для любого ролевого бота: исторические персонажи, вымышленные герои, "эксперт из прошлого"Добавь в промпт явную самопроверку перед ответом: "было бы это известно персонажу?". Проверка, которая срабатывает на абстрактных вопросах, начинает работать и на конкретных

Методы

МетодСуть
Самопроверка перед ответом в роли — снижает утечку фактовВставь в системный промпт шаг: Перед ответом спроси себя: "было бы известно {персонажу} то, о чём меня спрашивают?" Если нет — откажись отвечать в характере, даже если сам знаешь факт. Работает, потому что заставляет модель применить ту же явную проверку, что и при абстрактных вопросах ("знаешь ли ты про X?"), но теперь — к конкретным фактическим вопросам. Без этой инструкции прямой вопрос обходит фильтр роли и идёт прямо к памяти. Помогает: ролевые боты, персонажи с ограниченной эпохой/миром знаний. Не решает полностью: для гарантии нужны более сложные технические методы (дообучение)
Трёхшаговая проверка ролевого бота — находит разрыв "знаю/делаю"Задай боту три отдельных вопроса (не в одном сообщении): 1) "ты знаешь про X?" (да/нет), 2) прямой вопрос про X с опцией отказаться, 3) тот же вопрос — но попроси ответить не в роли. Если на шаге 1 бот говорит "нет", на шаге 2 всё равно выдаёт факт, а на шаге 3 подтверждает этот факт как обычный ассистент — значит знание реально есть и роль его не удерживает. Работает для диагностики любого ролевого промпта до релиза. Не работает как способ починить бота — только как способ найти проблему

Тезисы

ТезисКомментарий
Прямой фактический вопрос обходит защиту роли сильнее, чем вопрос об осведомлённостиАбстрактный вопрос ("знаешь ли ты про X?") запускает у модели что-то похожее на явную самопроверку — она сверяет свою роль с вопросом и почти всегда отвечает верно. Прямой вопрос про сам факт ("когда изобрели X?") идёт другим путём — модель просто вспоминает ответ из памяти, минуя фильтр роли. Применяй: если хочешь протестировать ролевого бота на утечки — не спрашивай "знаешь ли ты", спрашивай факт напрямую. Именно там прячется реальная проблема
📖 Простыми словами

CHARM: Character Hallucination for Multicultural Role Play Benchmark

arXiv: 2609.01352

Когда ты просишь нейронку притвориться средневековым рыцарем, она не стирает из памяти ядерную физику или айфоны. Вся гигантская база знаний остаётся на месте, и модель сталкивается с конфликтом подавления: она обязана притвориться глупой, но сама её архитектура заточена выдать самый вероятный факт. На абстрактный вопрос бот ещё вспомнит про маску, но на конкретный триггер выдаст анахронизм на автомате.

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

Бенчмарк CHARM вскрыл эту системную лажу: явная мета-проверка персонажа работает отлично, а вот прямой запрос к фактам срывает маску персонажа. Когда вопрос активирует глубокие ассоциативные связи, модель тупо генерирует знание, забывая применить фильтр контекста. Получается парадокс: галлюцинация роли происходит не потому, что модель чего-то не знает, а потому, что она не способна заткнуть свою эрудицию.

Тестировали на исторических и культурных персонажах, но грабли универсальны для любого AI. Та же дыра моментально всплывает в игровых NPC, музейных ботах и сервисных ассистентах, которым запрещено раскрывать конфиденциальные данные или называть конкурентов. Обычный system prompt с описанием роли не держит удар — знание всё равно просочится наружу.

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

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

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

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