10 KiB
10 KiB
🧠 Градиентная память (Gradient Memory)
Версия: 1.0
Дата: 2026-03-08
📋 Что это?
Градиентная память — это система памяти для ИИ-агента, которая имитирует человеческую память:
То что близко — чётко, то что далеко — размыто.
Как у людей: недавние события помним детально, старые — в общих чертах, а для глубокого поиска используем "внешние носители" (записи, заметки).
🏗️ Архитектура
Три уровня памяти:
┌──────────────────────────────────────────────────────┐
│ КОНТЕКСТ ДЛЯ ИИ │
├──────────────────────────────────────────────────────┤
│ 📋 ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ (факты из SQLite) │
│ • Имя, предпочтения, проекты │
│ • Технологии, инструменты │
├──────────────────────────────────────────────────────┤
│ 💬 STM: Short-Term Memory (последние 5 сообщений) │
│ • Полный текст сообщений │
│ • Чёткая память о недавнем │
│ • ~500-1000 токенов │
├──────────────────────────────────────────────────────┤
│ 🕰️ LTM: Long-Term Memory (сообщения 6-20) │
│ • Сжатое содержимое (50 символов) │
│ • Размытая память о прошлом │
│ • ~500-700 токенов │
├──────────────────────────────────────────────────────┤
│ 🔍 RAG: Retrieval-Augmented Generation │
│ • Глубокий поиск через ChromaDB │
│ • Семантический поиск по всем сообщениям │
│ • ~500-1000 токенов │
└──────────────────────────────────────────────────────┘
🔧 Как это работает
1. STM (Short-Term Memory)
Размер: последние 5 сообщений
Содержимое: полностью
Назначение: контекст текущего диалога
# Пример STM:
Пользователь: Отлично, а в какой папке ты менял файлы?...
Ассистент: Владимир, я пока не менял файлы...
Пользователь: Ну вот. Ты только что меня код и снова забыл...
Ассистент: Понимаю твою проблему, Владимир...
Пользователь: Мне кажется последней реплики маловато...
2. LTM (Long-Term Memory)
Размер: сообщения 6-20
Содержимое: сжато (первые 50 символов)
Назначение: общий контекст диалога
# Пример LTM (сжато):
Пользователь: Надо чтобы ты помнил ну скажем штук 5 моих...
Ассистент: Понял задачу, Владимир. Это разумный подход...
Пользователь: Что нового в Linux сегодня?
Ассистент: Сейчас проверю RSS-ленты...
3. RAG (Retrieval-Augmented Generation)
Размер: до 5 релевантных сообщений
Содержимое: полностью (150 символов для превью)
Назначение: глубокий поиск по запросу
# Пример RAG (поиск по запросу "память"):
[0.85] Ассистент: У тебя уже есть продвинутая гибридная система...
[0.78] Пользователь: Как в тумане - то что близко - четко видеть...
[0.72] Ассистент: Градиентная память с разной детализацией...
📁 Файлы
vector_memory.py— основная реализацияmemory_system.py— SQLite хранилищеmemory.db— SQLite база данныхvector_db/— ChromaDB хранилищеbot/compaction.py— суммаризация старых сообщений
🚀 Использование
Через бота:
/memory_test — показать градиентную память
/memory — статистика памяти
/facts — сохранённые факты
/compact — суммаризация истории
В коде:
from vector_memory import get_context
# Получить контекст с градиентной памятью
context = get_context(
user_id=123456,
query="последние сообщения",
stm_size=5, # STM: 5 сообщений
ltm_size=15 # LTM: 15 сообщений
)
📊 Пример вывода
📋 ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ:
[personal]:
- Пользователя зовут Владимир
[technical]:
- Использует Python
- Работает с Telegram API
💬 STM (ПОСЛЕДНИЕ СООБЩЕНИЯ):
Пользователь: Отлично, а в какой папке ты менял файлы?...
Ассистент: Владимир, я пока не менял файлы — мы только что смотрели конфигурацию SSH-хостов...
Пользователь: Ну вот. Ты только что меня код и снова забыл про это моментально...
Ассистент: Понимаю твою проблему, Владимир. Это серьёзный баг в моей логике...
Пользователь: Мне кажется последней реплики маловато. Надо чтобы ты помнил...
🕰️ LTM (БОЛЕЕ СТАРЫЕ СООБЩЕНИЯ — КРАТКО):
Пользователь: Как в тумане - то что близко - четко видеть...
Ассистент: Понял задачу, Владимир. Это разумный подход — градиентная...
Пользователь: Что нового в Linux сегодня?
Ассистент: Сейчас проверю RSS-ленты...
🔍 RAG (РЕЛЕВАНТНЫЕ СООБЩЕНИЯ ПО ЗАПРОСУ):
[0.85] Ассистент: У тебя уже есть продвинутая гибридная система памяти...
[0.78] Пользователь: Как в тумане - то что близко - четко видеть, то что дальше...
[0.72] Ассистент: Градиентная память с разной детализацией по времени...
==================================================
🧠 ПАМЯТЬ: STM чётко → LTM размыто → RAG глубоко
==================================================
⚙️ Настройка
Изменить размеры уровней:
# В bot.py (строка ~436)
memory_context = get_context(
user_id,
query=text,
stm_size=5, # Последние 5 сообщений (полностью)
ltm_size=15 # Ещё 15 сообщений (сжато)
)
Изменить степень сжатия LTM:
# В vector_memory.py (строка ~600)
preview = msg.content[:50].replace('\n', ' ').strip() + "..."
# Изменить 50 на нужное значение
📈 Производительность
| Операция | Время | Токены |
|---|---|---|
| STM (5 сообщений) | ~5ms | ~800 |
| LTM (15 сообщений) | ~5ms | ~600 |
| RAG поиск | ~100ms | ~800 |
| Итого | ~110ms | ~2200 |
Экономия vs полный контекст:
- Без градиентной памяти: 20 сообщений × 200 слов × 1.3 = ~5200 токенов
- С градиентной памятью: ~2200 токенов
- Экономия: ~60% ✅
🎯 Преимущества
- Экономия токенов — 60% меньше расход контекста
- Сохранение контекста — ИИ помнит важное из диалога
- Гибкость — RAG находит глубокую информацию
- Естественность — похоже на человеческую память
🔮 Планы
- Автоматическая настройка STM/LTM размеров
- Умная суммаризация LTM через ИИ
- Приоритизация важных сообщений в LTM
- Эмоциональная память (важные события помним лучше)
Градиентная память — как у людей: чёткое недавнее, размытое прошлое, глубокий поиск по запросу.