TL;DR
Что это и как работает: PersonaAgent with GraphRAG — метод персонализации ответов LLM, который комбинирует две категории контекста: личную историю пользователя (что ты делал раньше) + глобальные паттерны (что делают похожие на тебя люди). Система строит граф знаний из взаимодействий пользователя, а затем при каждом запросе извлекает релевантный контекст из обоих источников и передаёт LLM.
Главная находка: Модели ошибаются в персонализации когда опираются только на личную историю — особенно если история сильно перекошена. Пример: пользователь часто читает статьи о женских протестах → модель классифицирует статью про подростка-активиста после стрельбы как "женщины" вместо "политика". Добавление примеров от других пользователей (статьи про молодёжный активизм, реформу оружейных законов) корректирует этот перекос — модель видит широкий контекст и правильно определяет категорию.
Суть метода: Система использует двухисточниковый поиск (dual-source retrieval): для каждого запроса находит топ-K похожих взаимодействий из твоей истории + топ-K похожих взаимодействий от других пользователей. Оба набора комбинируются в промпт вместе с распределением твоих предпочтений по категориям и релевантными концептами. LLM генерирует ответ учитывая и личный вкус, и коллективную мудрость.
Схема метода
ЭТАП 1: Построение базы знаний (один раз)
├─ Собери историю взаимодействий (фильмы/новости/покупки)
├─ Извлеки из каждого взаимодействия: категорию, ключевые концепты
└─ Сохрани в структурированном виде
ЭТАП 2: Обработка запроса (каждый раз)
├─ Найди топ-K похожих взаимодействий из личной истории
├─ Найди топ-K похожих взаимодействий от других пользователей
├─ Добавь распределение предпочтений по категориям
└─ Составь промпт: задача + личный контекст + глобальный контекст
ЭТАП 3: Генерация ответа
└─ LLM генерирует решение на основе объединённого контекста
Исследователи автоматизировали этапы 1-2 через граф знаний и GraphRAG. Для ручного применения в чате — читай секцию "Пример применения".
Пример применения
Задача: Ты выбираешь что посмотреть вечером. Хочешь чтобы LLM учла твой вкус, но не зациклилась на одном жанре.
Контекст: Ты обычно смотришь триллеры (Игра в кальмара, Чёрное зеркало, Северная вода) и документалки про преступления. Но последнее время замечаешь что рекомендации однообразные — одни убийства и детективы.
Промпт:
Помоги выбрать сериал на вечер.
МОЯ ИСТОРИЯ (что я смотрел и оценивал высоко):
- Игра в кальмара (триллер) — 5/5
- Чёрное зеркало (sci-fi триллер) — 5/5
- Северная вода (детектив) — 4/5
- Мир Дикого Запада (sci-fi драма) — 4/5
- По ту сторону изгороди (детектив) — 4/5
МОИ ПРЕДПОЧТЕНИЯ ПО КАТЕГОРИЯМ:
- Триллер: 60%
- Детектив: 25%
- Sci-fi: 15%
ЧТО СМОТРЯТ ПОХОЖИЕ НА МЕНЯ ЗРИТЕЛИ (из рецензий на кинопоиске):
- Разлом Сан-Андреас (катастрофа) — "для любителей напряжённого экшна"
- Рик и Морти (анимация sci-fi) — "заходит фанатам Чёрного зеркала"
- Отрочество (драма) — "неожиданно зашло после триллеров"
- Остаться в живых (мистика) — "если любишь Мир Дикого Запада"
Сейчас выбираю между:
1. Тёмные начала (фэнтези)
2. Настоящий детектив (криминал)
3. Рик и Морти (анимация sci-fi)
Какой выбрать и почему? Учти что хочу разнообразия, но в зоне комфорта.
Результат:
Модель увидит: - Твой явный перекос в триллеры/детективы (личная история) - Сигналы от похожих зрителей про нетривиальные варианты (Рик и Морти для фанатов Чёрного зеркала) - Запрос на разнообразие
Ответ будет сбалансированным: скорее всего порекомендует Рик и Морти (пересечение твоего sci-fi интереса + глобальная рекомендация + выход из зоны одних триллеров) или Настоящий детектив (если решит остаться в зоне комфорта). Но не просто "бери детектив потому что ты любишь детективы" — а с учётом паттернов похожих зрителей.
Почему это работает
Слабость LLM: Модель не видит твою историю взаимодействий — ей доступен только текущий контекст. Если дать только список "что ты смотрел раньше", модель экстраполирует линейно: любишь триллеры → вот ещё триллеры. Она не знает что похожие пользователи с таким же вкусом часто открывают для себя неочевидные варианты.
Сильная сторона LLM: Модель отлично синтезирует паттерны из разнородных данных. Если дать ей два контекста — личный (твоя история) + глобальный (что делают похожие) — она находит баланс: рекомендация персонализирована, но не зациклена.
Как метод использует это: Двухисточниковый контекст создаёт корректирующий сигнал. Личная история показывает предпочтения, глобальные паттерны показывают куда эти предпочтения часто эволюционируют. Модель не просто подбирает под вкус, а учитывает динамику вкуса через коллективную мудрость.
Рычаги управления: - Размер истории (топ-5, топ-10, топ-20) — чем больше, тем точнее портрет, но дольше промпт - Соотношение личное/глобальное — можешь дать 70% личных примеров / 30% глобальных или наоборот - Категории предпочтений — можешь явно указать "хочу 20% выйти за пределы привычного" — модель учтёт - Источник глобальных примеров — можешь брать из рецензий, рейтингов, форумов, соцсетей — разный источник даст разный угол
Шаблон промпта
Помоги решить: {задача}
МОЯ ИСТОРИЯ (что я {действие} и как оценивал):
{список личных взаимодействий с оценками}
МОИ ПРЕДПОЧТЕНИЯ ПО КАТЕГОРИЯМ:
{категория_1}: {процент}%
{категория_2}: {процент}%
{категория_3}: {процент}%
ЧТО ДЕЛАЮТ ПОХОЖИЕ НА МЕНЯ ЛЮДИ:
{список примеров от других пользователей с контекстом}
Сейчас выбираю между:
{варианты для выбора}
{дополнительные критерии или ограничения}
Что подставлять:
- {задача} — что выбираешь (фильм, статью, товар, решение)
- {действие} — смотрел, читал, покупал, делал
- {список личных взаимодействий} — 5-10 примеров из твоей истории с категориями и оценками
- {категория} и {процент} — распределение твоих предпочтений (прикинь на глаз)
- {список примеров от других} — 3-5 примеров что делают похожие пользователи (найди в рецензиях, форумах, рейтингах)
- {варианты для выбора} — конкретные опции между которыми выбираешь
- {дополнительные критерии} — "хочу разнообразия", "остаться в зоне комфорта", "открыт к экспериментам"
Ограничения
⚠️ Требует подготовки данных: Нужно собрать свою историю взаимодействий (список фильмов/статей/покупок с оценками) и найти примеры от похожих пользователей. Это не быстро — для первого применения уйдёт 15-30 минут.
⚠️ Работает для повторяющихся решений: Метод эффективен когда ты регулярно делаешь похожие выборы (что посмотреть, что почитать, что купить). Для разовых уникальных решений сбор контекста может не окупиться.
⚠️ Зависит от качества глобальных примеров: Если примеры от других пользователей нерелевантны или низкого качества, они могут исказить рекомендацию вместо того чтобы скорректировать. Нужно осознанно выбирать источник (рецензии экспертов vs массовые рейтинги).
⚠️ Не подходит для холодного старта: Если у тебя нет истории взаимодействий (новая область), метод не сработает — нечего персонализировать.
Как исследовали
Команда взяла бенчмарк LaMP (Large Language Models Personalization) и протестировала систему на трёх задачах: классификация новостных статей, тегирование фильмов, оценка продуктов. Для каждой задачи выбрали 100 пользователей с самой большой историей (чтобы было что персонализировать) и построили граф знаний из их взаимодействий: узлы — пользователи, статьи, фильмы, продукты; рёбра — связи через категории и концепты.
Для каждого запроса система использовала TF-IDF поиск чтобы найти топ-K похожих взаимодействий из личной истории + топ-K из глобальной. Эти два набора комбинировались в промпт вместе с распределением предпочтений пользователя по категориям. Сравнивали с четырьмя baseline: обычный LLM без персонализации, ReAct (prompting с рассуждениями), MemBank (память на векторах), и PersonaAgent (предыдущая версия без графа).
Результаты были особенно интересными на субъективных задачах: для новостей F1 вырос на 11.1%, для фильмов — на 56.1% (это огромный скачок!), для продуктов MAE снизился на 10.4%. Почему такая разница? Чем субъективнее задача (фильмы), тем сильнее помогает контекст сообщества — он корректирует личный перекос. Для новостей (более объективная категоризация) эффект меньше, но всё равно заметен.
Ключевой инсайт из кейса: модель LLaMA3-8B ошиблась с категорией статьи про подростка-активиста, классифицировав её как "женщины" вместо "политика" — потому что в истории пользователя было много статей о женских протестах. Когда добавили глобальные примеры (статьи про молодёжный активизм от других пользователей), модель исправилась. Это показывает что глобальный контекст работает как деbiasing механизм — расширяет узкую персональную историю до более сбалансированного представления.
Отдельно проверили разные LLM: Claude 3.5 Sonnet показал лучшие результаты (F1 и Recall), Claude 4 неожиданно провалился (склонен переусложнять), LLaMA2-7B почти сравнялся с LLaMA3-8B по точности. Это говорит что метод работает на разных моделях, но Claude 3.5 Sonnet наиболее чувствителен к структурированному персонализированному контексту.
Адаптации и экстраполяции
🔧 Техника: Projects/Memory для накопительной персонализации
Вместо подготовки контекста вручную каждый раз — используй ChatGPT Projects или Claude Projects для накопления истории:
- Создай проект "Мои предпочтения: {домен}"
- Загрузи документ с твоей историей взаимодействий
- Регулярно обновляй: после просмотра фильма → добавь оценку в документ
- При запросе модель автоматически учтёт историю из проекта
Для глобального контекста: создай второй документ "Паттерны сообщества" — собирай туда интересные рецензии, тренды, рекомендации от похожих пользователей. Модель будет балансировать между двумя документами.
Плюс: не нужно каждый раз копировать контекст в промпт — он всегда под рукой.
🔧 Техника: Явный вес источников
Управляй балансом личное/глобальное через инструкцию:
При выборе учитывай:
- МОЯ ИСТОРИЯ — вес 70%
- ГЛОБАЛЬНЫЕ ПАТТЕРНЫ — вес 30%
Если моя история сильно перекошена в одну категорию,
увеличь вес глобальных паттернов до 50%.
Модель будет явно взвешивать источники при генерации.
🔧 Техника: Динамическое объяснение выбора
Добавь в конец промпта:
После рекомендации объясни:
1. Какие сигналы из моей истории ты учёл
2. Какие паттерны сообщества повлияли на выбор
3. Как ты балансировал между персонализацией и разнообразием
Это даст прозрачность — ты увидишь как модель использовала двухисточниковый контекст и сможешь скорректировать веса если нужно.
Ресурсы
PersonaAgent with GraphRAG: Community-Aware Knowledge Graphs for Personalized LLM
Siqi Liang (Purdue University), Yudi Zhang (Iowa State University), Yue Guo (Columbia University)
LaMP benchmark — https://lamp-benchmark.github.io (бенчмарк для персонализации LLM)
Связанные работы из исследования: - PersonaGym (Samuel et al. 2024) — бенчмарк для оценки агентов с персонами - HARBOR (Kenan Jiang 2024) — изучение как персоны влияют на стратегии в аукционах - MemoryBank (Zhong et al. 2023) — система долгосрочной памяти для LLM
