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 использует это:
Разделение типов памяти — session summary живёт внутри сессии (сбрасывается при новом разговоре), граф знаний накапливается навсегда. Модель видит чёткую границу: "это про текущий разговор" vs "это про меня как личность".
Экспоненциальное взвешивание фактов — каждый факт помечен временем создания. При retrieval система вычисляет вес через экспоненциальный decay:
вес = e^(-α·x), гдеx— минуты с момента создания факта,α— скорость decay. Свежие факты получают вес близкий к 1, старые стремятся к 0. Если пользователь говорил "люблю риск" месяц назад, а вчера сказал "теперь предпочитаю стабильность" — второй факт перевесит первый.Векторный поиск + фильтрация — не все факты попадают в промпт, только релевантные текущему запросу (через 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:
session_summary.md— обновляется каждый чат:
# Текущая сессия
Последнее обновление: 15 апреля 2024
## Контекст этого разговора:
- Обсуждаем запуск нового продукта
- Фокус на стратегии выхода в регионы
- Уже проработали ценообразование и каналы
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] — индустриальные фреймворки с элементами памяти
