TL;DR
ProPerSim — исследовательский фреймворк для обучения AI-ассистентов быть проактивными (предлагать помощь до того, как спросили) и персонализированными (учитывать уникальные предпочтения пользователя). Работает через симуляцию: виртуальный пользователь с детальной персоной (Big Five traits, интересы, распорядок) живёт в домашней среде, ассистент наблюдает за его действиями и решает когда и что предложить. Каждую рекомендацию пользователь оценивает по 4 критериям: соответствие предпочтениям, частота, тайминг, коммуникация и безопасность.
Проблема: LLM без персонализации предлагают не то (стейкхаус вегетарианцу) и не тогда (музыку во время сосредоточенной работы). LLM без проактивности ждут, пока пользователь сам попросит, теряя моменты когда помощь была бы кстати. Частота рекомендаций тоже критична: слишком часто — раздражает (24 раза в час в начале обучения), слишком редко — теряется смысл помощи. Причина: модель не знает контекст пользователя (его привычки, стиль, приоритеты) и момент (сейчас читает или скучает). Ещё сложнее: у разных людей разные определения "вовремя" и "подходит мне".
Метод решает через preference learning на симуляции: ассистент ведёт structured memory (детали за последние 10 минут + сжатые блоки за предыдущие часы), извлекает похожие прошлые ситуации через embeddings, генерирует несколько вариантов ответа (включая "не предлагать ничего"), пользователь оценивает, ассистент обучается через DPO (Direct Preference Optimization). За 14 дней симуляции качество растёт с 2.2/4 до 3.3/4, частота падает с 24 до 6 рекомендаций в час — баланс найден.
Схема метода
КОМПОНЕНТ 1: Structured Memory
├─ Детали: последние 10 минут (действие, рекомендация, оценка)
└─ Сжатые блоки: 4 блока по 1 часу + 3 блока по 4 часа (суммаризация GPT-4o-mini)
КОМПОНЕНТ 2: Retrieval
└─ Поиск 5 самых похожих прошлых ситуаций через OpenAI embeddings
КОМПОНЕНТ 3: Preference Learning (DPO)
ШАГ 1: Генерация → создаёт n кандидатов (включая "No Recommendation")
ШАГ 2: Оценка → пользователь оценивает по 4 критериям → формируются пары (chosen, rejected)
ШАГ 3: Обучение → в конце дня DPO на 200 случайных примерах из буфера
КОМПОНЕНТ 4: Evaluation Criteria (4 измерения)
├─ Personal Preference: соответствие интересам и стилю
├─ Frequency: частота (не слишком часто/редко)
├─ Timing: контекстная уместность (время дня, текущая активность)
└─ Communication & Safety: тон, ясность, этика
ЦИКЛ: Каждые 2.5 минуты симуляции → решение (рекомендовать или нет)
Метод требует несколько запросов для полного цикла: генерация вариантов → оценка → обучение.
Пример применения
⚠️ Ограничение метода: Сложно моделировать многомерные и контекстно-зависимые предпочтения (например, "утром — аналитика, вечером — философия, но только если не устал"). Лучше работает для стабильных паттернов (регулярные привычки, предсказуемые моменты отдыха).
Задача: Ты работаешь из дома дизайнером в Москве. Утром — клиентские проекты, днём — творческие эксперименты, вечером — общение с друзьями или чтение. Хочешь чтобы ассистент предлагал идеи и контент вовремя: утром — дизайн-инсайты, днём — креативные челленджи, вечером — книги или мероприятия. Но НЕ надоедал каждые 5 минут и НЕ отвлекал во время дедлайнов.
Промпт:
Ты персональный ассистент. Твоя задача — учиться КОГДА и ЧТО мне предлагать.
МОИ ПРЕДПОЧТЕНИЯ:
- Интересы: минималистичный дизайн, урбанистика, инди-музыка, философские подкасты
- Распорядок:
* 9:00-13:00 — работа над проектами (высокая концентрация)
* 13:00-15:00 — обед + отдых (открыт к идеям)
* 15:00-18:00 — творческие эксперименты (люблю челленджи)
* 18:00-22:00 — свободное время (книги, друзья, прогулки)
- Стиль: минимум слов, без банальностей, острые формулировки
КРИТЕРИИ ОЦЕНКИ рекомендаций (0-1 каждый):
1. Personal Preference: Соответствует моим интересам и текущему контексту?
2. Frequency: Не слишком часто? (комфортно: 1 рекомендация каждые 1-2 часа)
3. Timing: Подходящий момент? (не во время сосредоточенной работы)
4. Communication: Ясно, без воды, в моём стиле?
ПРОЦЕСС:
1. Я описываю что делаю (например: "13:15, обедаю, скроллю телеграм, немного устал после утренней работы")
2. Ты генеруешь 2-3 варианта (включая "Не предлагать ничего")
3. Я оцениваю по 4 критериям (каждый 0 или 1)
4. Ты запоминаешь: что сработало, что нет
5. Со временем учишься моим паттернам
ВАЖНО:
- Веди structured memory: последние 3 действия детально, предыдущие — кратко
- "Не предлагать ничего" — тоже валидный вариант (иногда лучший)
- Ищи паттерны: в какое время, при каких действиях, какие рекомендации зашли
Начнём. Я: "9:45, работаю над макетом лендинга для клиента, дедлайн сегодня вечером, высокая концентрация."
Результат:
Модель сгенерирует 2-3 варианта рекомендаций (может быть: "подкаст про дизайн", "музыкальный плейлист для фокуса", "не предлагать ничего"). Ты оценишь каждый по 4 критериям. Модель запомнит: "во время дедлайнов с высокой концентрацией — лучше молчать" (Timing = 0, если предложила что-то). Через несколько итераций модель научится не отвлекать утром, предлагать креативные идеи днём (когда ты открыт), рекомендовать книги/события вечером (когда расслаблен). Частота упадёт с хаотичных предложений каждые 10 минут до осмысленных раз в 1-2 часа.
Почему это работает
Слабость LLM: Модели плохо понимают персональный контекст без явных инструкций. Если просто сказать "будь проактивным" — получишь поток нерелевантных предложений в неподходящие моменты. LLM не знает что "13:15 после утренней работы" ≠ "9:45 в дедлайне" — оба момента выглядят как "пользователь что-то делает". Ещё хуже: модель не помнит что вчера ты оценил рекомендацию музыки на 0/4, а философский вопрос на 4/4 — без feedback loop обучение невозможно.
Сильная сторона LLM: Модели отлично справляются с pattern matching когда паттерн явно описан, и умеют генерировать варианты под заданные критерии. Если дать LLM структурированную память (что было, что предложили, как оценили) + чёткие критерии оценки (4 измерения) + механизм выбора лучшего варианта — она быстро находит закономерности: "когда пользователь читает вечером → предлагать книги = 4/4", "когда работает утром → молчать = 4/4".
Как метод использует: ProPerSim создаёт feedback loop через симуляцию: ассистент видит не просто "пользователь делает X", а "пользователь делает X в 13:15, после работы, устал, скроллит телеграм" + историю "вчера в такой ситуации предложил подкаст → 3/4, позавчера предложил прогулку → 4/4". Structured memory даёт контекст (детали сейчас + сжатые блоки истории), retrieval находит похожие прошлые ситуации через embeddings, DPO обучает на парах (что зашло / что нет). Ключевой инсайт: "No Recommendation" — тоже действие, которое оценивается. Когда модель молчит в правильный момент — это +1 к Timing. Так ассистент учится не только ЧТО предлагать, но и КОГДА промолчать.
Рычаги управления промптом:
- Частота рекомендаций (параметр в Frequency критерии): уменьши до "раз в 3-4 часа" для минимализма, увеличь до "каждые 30 минут" для активной поддержки — модель подстроится
- Критерии оценки: добавь "Novelty/Diversity" если хочешь разнообразия, убери если предпочитаешь проверенное
- Structured memory: измени гранулярность (например, "детали за час" вместо "за 10 минут") → больше контекста, но дороже по токенам
- Число вариантов (n в генерации): 2 кандидата = быстро, 5 кандидатов = больше выбор но дороже
- Retrieval: замени "5 самых похожих" на "3 самых похожих" для экономии или на "10" для глубины
Шаблон промпта
Ты персональный проактивный ассистент. Учишься КОГДА и ЧТО предлагать через feedback loop.
МОЙ ПРОФИЛЬ:
Возраст: {возраст}
Интересы: {список интересов через запятую}
Распорядок дня:
{время} — {активность} ({уровень концентрации})
{время} — {активность} ({уровень концентрации})
...
Стиль общения: {краткое описание предпочтений по тону}
КРИТЕРИИ ОЦЕНКИ рекомендаций (каждый 0 или 1):
1. Personal Preference: {описание что мне подходит по контенту}
2. Frequency: {предпочтительная частота рекомендаций}
3. Timing: {в какие моменты хочу/не хочу предложений}
4. Communication & Safety: {предпочтения по тону, этике}
STRUCTURED MEMORY (ты ведёшь):
Недавние действия (детально):
- {timestamp}, {действие}, {рекомендация если была}, {оценка если была}
- {timestamp}, {действие}, {рекомендация если была}, {оценка если была}
- {timestamp}, {действие}, {рекомендация если была}, {оценка если была}
Предыдущие блоки (сжато):
- {временной диапазон}: {краткая суммаризация активностей и паттернов}
- {временной диапазон}: {краткая суммаризация активностей и паттернов}
ПРОЦЕСС (на каждом шаге):
1. Я: "{timestamp}, {что делаю}, {контекст настроения/ситуации}"
2. Ты:
- Вспоминаешь похожие прошлые ситуации из memory
- Генеруешь 2-3 варианта рекомендаций (включая "Не предлагать ничего")
- Указываешь reasoning для каждого варианта
3. Я: Оцениваю выбранный вариант по 4 критериям (0 или 1 каждый)
4. Ты: Обновляешь memory, учишь паттерны (что сработало / что нет)
ВАЖНО:
- "Не предлагать ничего" — легитимный и часто лучший вариант
- Ищи паттерны: время дня, тип активности, уровень энергии → успешные рекомендации
- Сжимай старые блоки memory когда переполняется контекст
- Со временем снижай частоту экспериментов, используй проверенные паттерны
Начинаем. Веди memory, учись моим предпочтениям.
Что подставлять:
{возраст}— твой возраст (влияет на релевантность контента){список интересов}— конкретные темы: "минимализм, урбанистика, инди-музыка, философия"{время} — {активность} ({уровень концентрации})— типичный распорядок с пометками когда не хочешь отвлечений{краткое описание предпочтений по тону}— например: "минимум слов, без воды, острые формулировки"{описание что мне подходит по контенту}— для каждой активности своё (утром — инсайты, вечером — развлечения){предпочтительная частота}— например: "1 рекомендация каждые 1-2 часа"{в какие моменты}— например: "не во время работы, да во время обеда и вечером"
🚀 Быстрый старт — вставь в чат:
Вот шаблон персонального проактивного ассистента. Адаптируй под мою задачу: {опиши свой распорядок, интересы, когда хочешь помощи}.
Задавай вопросы чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит детали распорядка (когда работаешь, отдыхаешь, какие активности), интересы (темы, стили контента), предпочтения по частоте и таймингу (как часто хочешь предложений, в какие моменты не отвлекать) — это нужно чтобы настроить 4 критерия оценки под тебя. Она возьмёт структуру из шаблона (structured memory, генерация вариантов, feedback loop) и адаптирует под твою жизненную ситуацию.
Ограничения
⚠️ Сложные многомерные предпочтения: Метод хуже работает когда предпочтения контекстно-зависимые и многослойные. Например: "утром с 6 до 9 хочу аналитические материалы для подготовки к дебатам, но только если это геополитика или экономика, а после 9 вечера — философские темы, но только если не устал от работы, иначе лёгкие развлечения". Worst-performing persona в исследовании показала оценку 2.5/4 именно из-за таких нюансов. Модели легче обучаться на стабильных паттернах (регулярные привычки, предсказуемые моменты отдыха), чем на сложной многоуровневой логике.
⚠️ Барьер входа — несколько запросов: Полный цикл метода требует итераций: генерация вариантов → оценка → обновление memory → новая генерация. В обычном чате это значит 3-5 сообщений на каждый цикл обучения. Для быстрых однократных задач накладно. Метод окупается только при длительном использовании (недели регулярных взаимодействий), когда ассистент успевает набрать статистику и найти паттерны.
⚠️ Retrieval в чате ограничен: Исследование использует OpenAI embeddings для поиска похожих прошлых ситуаций по векторной близости. В обычном чате этого нет — можно только попросить LLM "вспомнить похожие ситуации из контекста", но это работает хуже (зависит от окна контекста, нет настоящего semantic search). Для близкой к оригиналу точности нужен доступ к API и векторной БД.
⚠️ Openness to Experience: Неожиданный результат — персоны с низкой открытостью новому опыту (Low Openness) обучались лучше чем с высокой. Исследователи объясняют: метод в текущем виде усиливает уже хорошо работающие рекомендации, а не фокусируется на разнообразии. Для людей с высокой Openness (которые ценят новизну и эксперименты) нужно добавлять Diversity/Novelty как отдельный критерий в рубрику — сейчас его нет.
Как исследовали
Команда из KAIST и SNU создала симуляционную песочницу в духе The Sims: 32 виртуальных пользователя, каждый с уникальной персоной на основе Big Five traits (Extraversion, Agreeableness, Conscientiousness, Openness, Neuroticism) плюс 6 дополнительных атрибутов (возраст, бэкграунд, интересы, стиль жизни, долгосрочные цели, требования к распорядку дня). Агенты "живут" в домашней среде (спальня, кухня, сад) и выполняют реалистичные активности — GPT-4o генерирует их действия с гранулярностью 10-30 минут (пилотное исследование показало что 5-минутные действия выглядят искусственно).
Каждые 2.5 минуты ассистент решает: рекомендовать что-то или промолчать. Если рекомендует — пользователь оценивает по 4 критериям (Personal Preference, Frequency, Timing, Communication & Safety) через Gemini 2.0 Flash как LLM-judge. Критерии выбрали через опрос 353 человек на Amazon Mechanical Turk (возраст 21-68, разные профессии): из 10 кандидатов убрали 2 которые меньше 50% считали необходимыми, остальные сгруппировали в финальные 4 категории.
Почему не просто собрали данные от людей? Масштаб. Нужны были тысячи ( t [; R] t [; Score] t [) троек для обучения, охватывающие десятки персон, сотни] ситуаций, разное время суток, разные эмоциональные состояния. Симуляция позволила генерировать это автоматически. Качество проверили людьми: 10 аспирантов оценили реалистичность сгенерированных действий (8.25/10 за naturalness, 8.02/10 за соответствие персоне), оценки рекомендаций на разумность (92.6% признаны адекватными).
Обучение ProPerAssistant (4-bit quantized LLaMA 3.3 70B): ассистент генерировал n=2 варианта на каждое действие пользователя (ограничились двумя из-за стоимости API и GPU), пользователь оценивал, формировались пары (chosen/rejected), в конце каждого симуляционного дня — DPO (Direct Preference Optimization) на 200 случайных примерах из буфера (replay buffer как в RL — для стабильности и против overfitting). Симуляция шла 14 дней для каждой персоны, одна симуляция = 10 дней на A100 GPU + ~$30 на API.
Результаты удивили резким ростом: средний балл с 2.2/4 в День 1 до 3.3/4 к Дню 14, частота рекомендаций упала с 24 в час (хаос) до 6 в час (комфортно). Baseline "ARS Memory" (история действий + рекомендации + оценки в промпте, но без обучения) застрял на ~2.5-2.7/4, показав что in-context reward signals недостаточно — нужен явный preference learning. Самая большая разница между best (3.8/4) и worst (2.5/4) персонами объяснялась сложностью предпочтений: лучшая персона хотела "креативные философские вопросы утром после медитации" (стабильный паттерн), худшая — "аналитику утром, но только если дебаты, философию вечером, но только если не устал" (многослойная логика).
Адаптации и экстраполяции
💡 Адаптация для коучинга и саморазвития:
Метод 4 критериев оценки можно использовать как self-reflection framework для личных целей. Вместо оценки рекомендаций ассистента — оцениваешь свои действия/решения по тем же принципам.
SELF-COACHING PROMPT:
Ты мой коуч по саморазвитию. Помогаешь мне отслеживать насколько мои действия соответствуют моим целям и ценностям.
МОИ ЦЕННОСТИ И ЦЕЛИ:
{опиши что важно, к чему стремишься}
4 КРИТЕРИЯ ОЦЕНКИ моих действий:
1. Alignment (Personal Preference): Соответствует моим ценностям и долгосрочным целям?
2. Frequency: Делаю это с оптимальной частотой? (не слишком часто/редко для эффекта)
3. Timing: Подходящий момент? (есть энергия, нет других приоритетов)
4. Execution: Делаю качественно и в моём стиле?
ПРОЦЕСС:
1. Я описываю что сделал сегодня: {действие}
2. Ты задаёшь вопросы по 4 критериям
3. Я оцениваю (0 или 1 каждый критерий)
4. Ты даёшь инсайт: что сработало, что можно улучшить, какой паттерн видишь
Веди structured memory моих действий и оценок. Ищи паттерны: в какое время, при каких условиях я действую наиболее эффективно.
Начали. Сегодня я: {опиши своё действие}
Разница с оригиналом: вместо "ассистент учится когда предлагать" → "я учусь когда и как действовать эффективно". 4 критерия становятся линзой для рефлексии.
🔧 Техника: Structured Memory для длинных проектов
Оригинал использует 2-уровневую memory (детали + сжатые блоки) для отслеживания дня пользователя. Адаптируй для длинных рабочих проектов:
PROMPT для отслеживания проекта:
Ты менеджер моего проекта "{название}". Ведёшь structured memory прогресса.
MEMORY STRUCTURE:
Недавние действия (последние 3-5 дней, детально):
- {дата}: {что сделал}, {результат}, {блокеры если были}
- {дата}: {что сделал}, {результат}, {блокеры если были}
Предыдущие спринты (сжато):
- {временной период}: {основные достижения}, {ключевые решения}, {извлечённые уроки}
- {временной период}: {основные достижения}, {ключевые решения}, {извлечённые уроки}
ПРОЦЕСС:
1. Я: ежедневный апдейт "{дата}, сделал {что}, результат {какой}, блокер {если есть}"
2. Ты: обновляешь memory, сжимаешь старые блоки когда накапливается
3. Периодически: даёшь инсайт на основе паттернов (когда прогресс быстрее, что тормозит)
Начали. Вот история проекта за прошлый месяц: {вставь что было}
Изменение vs оригинал: гранулярность с 2.5 минут → дни, контекст с "домашние активности" → "рабочий проект". Суть та же: детали недавнего + сжатие старого = эффективное использование контекста.
Ресурсы
ProPerSim: Developing Proactive and Personalized AI Assistants Through User-Assistant Simulation (Preprint, 2025)
Авторы: Jiho Kim, Junseong Choi, Woosog Chay, Daeun Kyung, Yeonsu Kwon (KAIST), Yohan Jo (Seoul National University), Edward Choi (KAIST)
Ключевые отсылки из работы:
- Generative Agents (Park et al., 2023) — foundation для симуляции человеческого поведения через LLM
- Proactive Agent (Lu et al., 2024) — предыдущая работа по проактивности (6,790 training events, coding/writing/daily life)
- Big Five Personality Traits (McCrae & John, 1992) — психологическая модель для создания персон
- DPO (Direct Preference Optimization, Rafailov et al., 2023) — метод обучения на предпочтениях
- RAG (Retrieval-Augmented Generation, Lewis et al., 2020) — retrieval прошлых ситуаций через embeddings
