TL;DR
CDP — техника, которая заменяет расплывчатую персону («средний ученик», «новичок») на конкретный список того, что человек умеет и не умеет, разбитый на отдельные пункты. Модель получает не общий уровень, а детальную карту навыков — и играет роль намного точнее.
Проблема в том, что когда вы просите LLM «ответь как типичный ученик», модель почти всегда отвечает слишком правильно и слишком одинаково — почти как отличник, независимо от того, какого уровня человека вы просили изобразить. Причина проста: модель обучена быть полезным ассистентом, который старается дать верный ответ, и ей нечем «зацепиться», чтобы правдоподобно ошибаться — общая метка «слабый ученик» не говорит модели, что конкретно этот ученик не умеет.
CDP решает это так: сначала навык разбивают на конкретные под-навыки (например, для дробей — «умеет вычитать простые дроби», «умеет занимать у целого числа» и так далее), затем для виртуального человека решают, какие пункты он освоил, а какие нет, и превращают это в текстовое описание профиля. Модели дают этот профиль перед задачей — и она отвечает согласно конкретным пробелам в знаниях, а не общему стереотипу.
Схема метода
ШАГ 1: Разбей нужный навык на K конкретных под-навыков → список из K пунктов
ШАГ 2: Реши, какие пункты "виртуальный человек" освоил (да/нет) → бинарный профиль
ШАГ 3: Переведи каждый пункт в текст: что человек умеет уверенно, чего не умеет совсем → готовое описание-профиль
ШАГ 4 (для набора людей): Задай как часто встречается каждый профиль — поровну или по реальной статистике аудитории → пул виртуальных людей
ШАГ 5: Дай LLM профиль + задачу, попроси отвечать как человек с этим профилем → ответ, соответствующий пробелам в знаниях
ШАГ 6 (для теста в целом): Собери ответы по всем профилям, посмотри где вопросы оказались слишком лёгкими/сложными
Шаги 1–3 и 5 делаются в одном чате за один запрос. Шаги 4 и 6 нужны только если вы хотите прогнать много персон для статистики — тогда лучше через скрипт, но в чате можно вручную сделать 3–5 профилей.
Пример применения
Задача: Продакт-менеджер тестирует новую фичу в приложении мобильного оператора — сравнение тарифов — и хочет до релиза понять, где запутаются пользователи с разным уровнем цифровой грамотности.
Промпт:
Вот функция в приложении: экран сравнения тарифов. Пользователь может выбрать до 3 тарифов
и увидеть их характеристики рядом: цена, гигабайты, минуты, условия роуминга.
Симулируй, как пройдёт эту функцию пользователь со следующим профилем навыков:
- Умеет уверенно: находить нужный раздел в главном меню, читать цену и объём интернета
- Не умеет совсем: пользоваться фильтрами, понимать термины "безлимит с оговорками", "льготный период"
- Умеет частично: сравнивать два пункта визуально, но путается при третьем варианте
Ответь от первого лица. Пройди через функцию шаг за шагом: что делаешь, на чём застреваешь,
что говоришь вслух в этот момент.
Результат: модель выдаст пошаговый рассказ от первого лица — где пользователь легко находит экран, но зависает на терминах и путается при выборе третьего тарифа. Если повторить промпт с другим профилем (например, «технически продвинутый пользователь»), вы увидите контраст — и сразу заметите, какие элементы интерфейса реально мешают именно людям с конкретными пробелами, а не абстрактным «новичкам».
Почему это работает
LLM, когда её просят сыграть «слабого» или «среднего» человека, по умолчанию тянется к своей базовой роли — полезного помощника, который старается ответить правильно. Расплывчатая метка вроде «средний ученик» не даёт модели конкретной причины ошибиться именно там, где ошибся бы реальный человек.
Зато модель отлично умеет следовать явным, детализированным инструкциям о том, что персонаж знает и не знает. Если сказать не «слабый ученик», а «умеет вычитать простые дроби, но не умеет занимать у целого числа» — модель получает конкретное правило поведения и держится его гораздо строже.
CDP использует эту сильную сторону: вместо одной размытой метки даёт список конкретных фактов о персонаже. Модель перестаёт «играть роль в целом» и начинает соблюдать конкретные ограничения — отсюда и более реалистичный разброс ответов.
Рычаги управления: - Количество под-навыков (K) → больше пунктов — точнее профиль, но длиннее промпт. Для простых задач хватит 3-4 пунктов. - Три уровня освоенности (умеет уверенно / не умеет совсем / умеет частично) вместо простого да/нет → более гибкое и живое поведение персонажа. - Реальная статистика аудитории (если есть данные о своих пользователях) → добавьте её в промпт как ориентир: «70% пользователей путаются в фильтрах» — это резко повышает точность симуляции у моделей, которые и без того неплохо держат профиль.
Шаблон промпта
Вот {контекст: тест/функция/сценарий}: {краткое описание}.
Симулируй, как {отреагирует/пройдёт это} человек со следующим профилем:
- Умеет уверенно: {навык 1, навык 2}
- Не умеет совсем: {навык 3, навык 4}
- Умеет частично: {навык 5}
Ответь от первого лица, шаг за шагом показывая действия и мысли такого человека.
Подставьте: контекст (что тестируете), и 3-5 конкретных навыков, разбитых по трём категориям владения.
🚀 Быстрый старт — вставь в чат:
Вот шаблон Cognitive Diagnostic Profiling. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какие конкретно навыки/знания важны для вашей ситуации и как их разбить на отдельные пункты — потому что метод работает только если профиль состоит из конкретных, а не общих утверждений.
Ограничения
⚠️ Требует экспертной разбивки: Если навык разбит грубо или неправильно (например, слишком общие пункты), профиль не даст реального выигрыша — качество метода зависит от того, насколько конкретны формулировки.
⚠️ Слабее работает без "режима размышления": Модели с включённым рассуждением (thinking mode) держат профиль намного точнее моделей без него — на моделях без рассуждения эффект слабее.
⚠️ Для статистической калибровки нужен инструмент для массового прогона: Один-два профиля можно проверить в чате вручную. Но если нужно прогнать десятки профилей для статистически надёжного результата (как в тестировании образовательных материалов) — потребуется скрипт или API.
Как исследовали
Исследователи взяли реальные данные 536 школьников, которые проходили тест из 15 заданий на вычитание дробей — с известной разбивкой на 5 конкретных навыков. Они сравнили, как 8 разных LLM (от Google, DeepSeek, Qwen, Mistral) отвечают на эти же задания в трёх режимах: без всякого профиля, с равномерно случайным детальным профилем, и с профилем, взвешенным по реальной статистике распределения навыков среди школьников.
Без профиля модели вели себя как отличники — почти все отвечали правильно на всё, независимо от сложности вопроса, и совпадение с распределением реальных учеников было слабым. Стоило дать детальный профиль — совпадение резко выросло: например, у одной из моделей точность предсказания сложности заданий подскочила с корреляции 0.24 до 0.86–0.90 с реальными данными.
Самое интересное — модели с включённым «размышлением» показывали намного лучший результат, чем обычные версии тех же моделей. А добавление реальной статистики о распределении навыков среди учеников помогало сильнее всего там, где базовый детальный профиль уже работал неплохо — то есть подсказка о реальном мире усиливает хороший сигнал, но не спасает слабый.
