telegram-cli-bot/GRADIENT_MEMORY.md

226 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧠 Градиентная память (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
- [ ] Эмоциональная память (важные события помним лучше)
---
*Градиентная память — как у людей: чёткое недавнее, размытое прошлое, глубокий поиск по запросу.*