226 lines
10 KiB
Markdown
226 lines
10 KiB
Markdown
# 🧠 Градиентная память (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 сообщений
|
||
**Содержимое:** полностью
|
||
**Назначение:** контекст текущего диалога
|
||
|
||
```python
|
||
# Пример STM:
|
||
Пользователь: Отлично, а в какой папке ты менял файлы?...
|
||
Ассистент: Владимир, я пока не менял файлы...
|
||
Пользователь: Ну вот. Ты только что меня код и снова забыл...
|
||
Ассистент: Понимаю твою проблему, Владимир...
|
||
Пользователь: Мне кажется последней реплики маловато...
|
||
```
|
||
|
||
### 2. **LTM (Long-Term Memory)**
|
||
|
||
**Размер:** сообщения 6-20
|
||
**Содержимое:** сжато (первые 50 символов)
|
||
**Назначение:** общий контекст диалога
|
||
|
||
```python
|
||
# Пример LTM (сжато):
|
||
Пользователь: Надо чтобы ты помнил ну скажем штук 5 моих...
|
||
Ассистент: Понял задачу, Владимир. Это разумный подход...
|
||
Пользователь: Что нового в Linux сегодня?
|
||
Ассистент: Сейчас проверю RSS-ленты...
|
||
```
|
||
|
||
### 3. **RAG (Retrieval-Augmented Generation)**
|
||
|
||
**Размер:** до 5 релевантных сообщений
|
||
**Содержимое:** полностью (150 символов для превью)
|
||
**Назначение:** глубокий поиск по запросу
|
||
|
||
```python
|
||
# Пример 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 — суммаризация истории
|
||
```
|
||
|
||
### В коде:
|
||
|
||
```python
|
||
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 глубоко
|
||
==================================================
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Настройка
|
||
|
||
### Изменить размеры уровней:
|
||
|
||
```python
|
||
# В bot.py (строка ~436)
|
||
memory_context = get_context(
|
||
user_id,
|
||
query=text,
|
||
stm_size=5, # Последние 5 сообщений (полностью)
|
||
ltm_size=15 # Ещё 15 сообщений (сжато)
|
||
)
|
||
```
|
||
|
||
### Изменить степень сжатия LTM:
|
||
|
||
```python
|
||
# В 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%** ✅
|
||
|
||
---
|
||
|
||
## 🎯 Преимущества
|
||
|
||
1. **Экономия токенов** — 60% меньше расход контекста
|
||
2. **Сохранение контекста** — ИИ помнит важное из диалога
|
||
3. **Гибкость** — RAG находит глубокую информацию
|
||
4. **Естественность** — похоже на человеческую память
|
||
|
||
---
|
||
|
||
## 🔮 Планы
|
||
|
||
- [ ] Автоматическая настройка STM/LTM размеров
|
||
- [ ] Умная суммаризация LTM через ИИ
|
||
- [ ] Приоритизация важных сообщений в LTM
|
||
- [ ] Эмоциональная память (важные события помним лучше)
|
||
|
||
---
|
||
|
||
*Градиентная память — как у людей: чёткое недавнее, размытое прошлое, глубокий поиск по запросу.*
|