3,583 papers
arXiv:2512.12686 64 14 дек. 2025 г. FREE

Memoria: двухуровневая память для LLM через суммаризацию сессий и граф знаний о пользователе

КЛЮЧЕВАЯ СУТЬ
Memoria — фреймворк памяти для LLM-чатботов, который комбинирует два типа памяти: краткосрочную (summary текущей сессии) и долгосрочную (граф знаний о пользователе из всех прошлых разговоров). Система автоматически извлекает факты из сообщений пользователя, строит из них граф связей (например: "Иван → работает → трейдером", "Иван → предпочитает → акции технологических компаний"), и взвешивает их по давности — свежие факты важнее старых.
Адаптировать под запрос

TL;DR

Memoria — фреймворк памяти для LLM-чатботов, который комбинирует два типа памяти: краткосрочную (summary текущей сессии) и долгосрочную (граф знаний о пользователе из всех прошлых разговоров). Система автоматически извлекает факты из сообщений пользователя, строит из них граф связей (например: "Иван → работает → трейдером", "Иван → предпочитает → акции технологических компаний"), и взвешивает их по давности — свежие факты важнее старых.

Проблема обычных LLM-чатов: нет памяти между сессиями. Каждый раз начинаешь с нуля — повторяешь контекст, теряешь персонализацию. Custom GPTs и Projects частично решают это, но не разделяют типы памяти явно: что относится к текущему разговору, а что к личности пользователя навсегда. Плюс, когда факты противоречат друг другу (например, "в январе любил криптовалюту" vs "в марте перешёл на акции"), система не знает какой важнее.

Как Memoria решает: При каждом сообщении система делает три вещи одновременно: (1) обновляет summary текущей беседы для контекста внутри сессии, (2) извлекает структурированные факты (subject-predicate-object триплеты) и добавляет их в граф знаний пользователя, (3) помечает каждый факт временем создания и при следующем запросе взвешивает через экспоненциальный decay — факт двухнедельной давности получает меньший вес чем вчерашний. Когда пользователь возвращается, система комбинирует session summary + топ релевантных фактов из графа (отсортированных по семантической близости и давности) → подставляет в промпт.

📌

Схема работы

Для нового пользователя:

→ Нет памяти, только системный промпт + запрос
→ После ответа: извлечь факты → создать граф → сохранить summary сессии

Для повторного пользователя с новой сессией:

→ Извлечь граф пользователя (старые факты) → вставить в промпт
→ Session summary пуст (новая сессия)
→ После ответа: обновить граф + создать summary новой сессии

Для повторного пользователя в продолжении сессии:

→ Извлечь session summary + граф пользователя
→ Взвесить факты графа по давности (экспоненциальный decay)
→ Топ-N фактов по семантике + вес → в промпт
→ После ответа: обновить summary + добавить новые факты в граф

Всё происходит автоматически — разработчик интегрирует Python-библиотеку в свой чатбот.

📌

Зачем это нужно (контекст применения)

Memoria решает проблему энтерпрайз-чатботов: клиент звонит в поддержку третий раз за месяц, и каждый раз оператор (или AI) спрашивает заново "чем занимаетесь?", "какие у вас предпочтения?". Или финансовый советник-бот общается с трейдером — тот в январе интересовался криптой, в марте перешёл на акции, а бот продолжает советовать биткоины.

Для обычного пользователя ChatGPT/Claude эта проблема частично решена: - Custom GPTs хранят Instructions — можно вписать туда свой профиль - Projects (в ChatGPT/Claude) держат историю чатов и файлы - Memory (в ChatGPT) запоминает факты о тебе автоматически

НО эти инструменты не разделяют явно: - Что относится к текущему разговору (session context) - Что к тебе как к личности навсегда (user persona) - Какие факты свежее и важнее при противоречии

Memoria формализует эту логику через двухуровневую память + взвешивание по давности.

🧠

Почему это работает (принципы)

Слабость LLM: модель не различает типы контекста. Если в промпт попадает и "обсуждение текущей задачи", и "факты о пользователе из прошлого месяца", LLM обрабатывает всё одинаково — нет приоритета свежести, нет разделения "временное vs постоянное".

Сильная сторона LLM: модель хорошо работает с явной структурой — если факты помечены весами ("этот факт из вчерашнего разговора, вес 0.9" vs "этот из месячной давности, вес 0.3"), модель учтёт приоритет. И LLM отлично извлекает структурированные факты из текста (subject-predicate-object), если попросить.

Как Memoria использует это:

  1. Разделение типов памяти — session summary живёт внутри сессии (сбрасывается при новом разговоре), граф знаний накапливается навсегда. Модель видит чёткую границу: "это про текущий разговор" vs "это про меня как личность".

  2. Экспоненциальное взвешивание фактов — каждый факт помечен временем создания. При retrieval система вычисляет вес через экспоненциальный decay: вес = e^(-α·x), где x — минуты с момента создания факта, α — скорость decay. Свежие факты получают вес близкий к 1, старые стремятся к 0. Если пользователь говорил "люблю риск" месяц назад, а вчера сказал "теперь предпочитаю стабильность" — второй факт перевесит первый.

  3. Векторный поиск + фильтрация — не все факты попадают в промпт, только релевантные текущему запросу (через semantic similarity) и принадлежащие этому пользователю (фильтр по username). Экономия токенов + точность.

Рычаги управления (если бы ты строил аналог вручную):

  • Decay rate (α) — чем выше, тем быстрее старые факты теряют вес. Увеличь для динамичных контекстов (мода, новости), уменьши для стабильных (профессия, базовые предпочтения).

  • Top-N фактов — сколько фактов из графа вставлять в промпт. Больше = полнее контекст, но дороже по токенам.

  • Частота обновления summary — каждое сообщение или раз в N сообщений. Чаще = точнее контекст внутри сессии, но больше LLM-вызовов.

⚠️

Ограничения

⚠️ Требует инфраструктуру: Memoria — это Python-библиотека, нужен SQL для хранения, vector database (для embeddings), и интеграция в свой чатбот. Нельзя применить "из коробки" в ChatGPT/Claude через промпт.

⚠️ Частичное дублирование с Projects/Memory: Custom GPTs и Projects в ChatGPT/Claude уже держат историю и факты о пользователе. Memoria формализует логику (разделение типов памяти, взвешивание), но для casual пользователя эффект перекрывается встроенными функциями платформ.

⚠️ Извлечение фактов не идеально: LLM может неверно распарсить триплеты (например, "Иван работает в BlackRock" → "Иван → любит → BlackRock") или пропустить важные нюансы. Качество графа зависит от промпта для extraction.

⚠️ Конфликты фактов разрешаются только по давности: Если два противоречивых факта появились в один день, система не знает какой правильнее — взвесит одинаково. Нужна дополнительная логика (например, explicit user correction).

🔍

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

Команда из BlackRock сравнила Memoria с A-Mem [3] — другим фреймворком памяти, который организует факты по принципу Zettelkasten (заметки со связями). Тестировали на датасете LongMemEvals — это разговоры длиной ~115,000 токенов (достаточно чтобы выйти за границы контекста), плюс вопросы шести типов: однократная сессия, мультисессия, обновление знаний, временное рассуждение.

Исследователи сфокусировались на двух категориях: knowledge-update (пользователь говорит новые факты, противоречащие старым) и single-session-user (факты о пользователе в одной беседе). Сравнивали accuracy ответов: насколько модель правильно вспоминает и приоритизирует свежие факты.

Почему получились такие результаты: Memoria показала преимущество в knowledge-update потому что экспоненциальный decay автоматически снижает вес старых фактов — модель "забывает" устаревшую информацию. A-Mem хранит факты как равноправные заметки без временного приоритета — при конфликте модель видит оба факта с одинаковым статусом и может выбрать устаревший.

Что удивило: Dual memory (session + user graph) не даёт огромного скачка на коротких диалогах, но критична на длинных мультисессионных. Без разделения модель начинает "смешивать" контекст текущей беседы с фактами из прошлого месяца — например, спрашиваешь "что мы обсуждали в начале?" и модель вспоминает разговор двухнедельной давности вместо начала текущей сессии.

Инсайт для практики: Если ты ведёшь долгий проект с LLM (серия чатов на одну тему), имеет смысл разделять memory на два файла: "Текущий спринт" и "Постоянный контекст проекта". Модель лучше держит фокус.

📌

Адаптации для ChatGPT/Claude (без кода)

Memoria требует инфраструктуру, но принципы можно эмулировать вручную:

📌

🔧 Техника 1: Dual Memory в Projects

Создай два файла в Project:

  1. session_summary.md — обновляется каждый чат:
# Текущая сессия

Последнее обновление: 15 апреля 2024

## Контекст этого разговора:
- Обсуждаем запуск нового продукта
- Фокус на стратегии выхода в регионы
- Уже проработали ценообразование и каналы
  1. user_profile.md — накапливается навсегда:
# Мой профиль

## Роль
Продуктовый менеджер в B2B SaaS

## Предпочтения
- Люблю структурированные списки
- Не люблю длинные абзацы
- Важна конкретика и цифры

## История проектов
- Запускал CRM для малого бизнеса (2023)
- Работал с Wildberries и Ozon (март 2024)

Промпт в новом чате:

Загрузи контекст из двух файлов:
1. session_summary.md — что мы обсуждали в прошлый раз
2. user_profile.md — постоянные факты обо мне

Если есть противоречие между старым фактом (из user_profile) и новой информацией от меня — новое важнее. Запомни изменения.

После сессии попроси LLM обновить оба файла.

📌

🔧 Техника 2: Recency Tags вручную

Если не хочешь возиться с формулами, помечай факты датами явно:

# Предпочтения

## Инвестиции
- [2024-01] Интересовался криптовалютами
- [2024-03] ⚡ Переключился на акции — криптовалюты слишком волатильны

Символ ⚡ = самый свежий факт. В промпте укажи: "Факты с ⚡ — приоритет!"

📌

🔧 Техника 3: Incremental Profile Building

После каждого значимого разговора:

Извлеки из нашей беседы новые факты обо мне в формате:
- [Я] → [отношение] → [объект]

Примеры:
- Я → работаю → продакт-менеджером
- Я → предпочитаю → Notion для заметок
- Я → избегаю → длинных встреч

Добавь их в мой user_profile.md, если там ещё нет.
Если есть противоречие — спроси меня какой факт актуальнее.

Модель вернёт структурированный список → скопируешь в профиль.


📌

Extractable Principles (суть, не код)

Memoria учит разделять контекст на слои и взвешивать по давности. Это применимо везде:

1. Разделяй временное и постоянное - Временное: детали текущей задачи, черновики, промежуточные мысли - Постоянное: твои принципы работы, стиль, роль, долгосрочный контекст проекта

2. Свежее важнее старого (но старое не удаляй) - Не перезаписывай факты, храни историю - Помечай давность явно ("по состоянию на март 2024") - При конфликте спрашивай модель: "Если есть два факта о X, выбирай новее"

3. Структурируй факты как связи - Вместо: "Я продакт в SaaS, люблю структуру" - Делай: "Я → работаю → продакт-менеджер", "Я → предпочитаю → структурированные списки" - LLM лучше видит отношения когда они explicit


🔗

Ресурсы

Memoria: A Scalable Agentic Memory Framework for Personalized Conversational AI

Samarth Sarin, Lovepreet Singh, Dhagash Mehta, Bhaskarjit Sarmah

BlackRock, Inc.

Отсылки из исследования: - A-MEM framework [3] — граф памяти по принципу Zettelkasten - LongMemEvals dataset [10] — бенчмарк для тестирования памяти (разговоры ~115k токенов) - LangGraph [6], LlamaIndex [7] — индустриальные фреймворки с элементами памяти


Проблемы LLM

ПроблемаСутьКак обойти
LLM обрабатывает свежие и старые факты одинаково без явных весовПодаёшь в промпт "вчера сказал X" + "месяц назад сказал Y" — модель не знает какой факт важнее; нет внутреннего механизма приоритета по времениПомечай факты весами: [0.9] факт (вчера) vs [0.3] факт (месяц назад) — LLM учтёт приоритет

Методы

МетодСуть
Разделение контекста на типы — session summary + user factsРаздели промпт явно:
# Session (текущий разговор):
[summary беседы]

# User facts (постоянные):
[факты о пользователе]

Механика: LLM видит границу между временным контекстом (сбрасывается после сессии) и постоянным (живёт навсегда). Для: чатботы с историей, персональные ассистенты. НЕ для: one-shot запросы без контекста
Взвешивание фактов по давности — пометка весами в промптеПомечай факты весами recency: [вес] факт (когда). Формула веса: e^(-α·время_в_минутах), где α — скорость decay (больше α старое быстрее теряет вес).
Пример:
- [0.9] Предпочитает стабильные инвестиции (вчера)
- [0.3] Интересовался криптовалютой (месяц назад)

Механика: LLM следует явным приоритетам — видит вес, учитывает важность. Для: противоречивые факты разной давности. НЕ для: факты одного дня (веса одинаковые)

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

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

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