telegram-cli-bot/GRADIENT_MEMORY.md

10 KiB
Raw Blame History

🧠 Градиентная память (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%

🎯 Преимущества

  1. Экономия токенов — 60% меньше расход контекста
  2. Сохранение контекста — ИИ помнит важное из диалога
  3. Гибкость — RAG находит глубокую информацию
  4. Естественность — похоже на человеческую память

🔮 Планы

  • Автоматическая настройка STM/LTM размеров
  • Умная суммаризация LTM через ИИ
  • Приоритизация важных сообщений в LTM
  • Эмоциональная память (важные события помним лучше)

Градиентная память — как у людей: чёткое недавнее, размытое прошлое, глубокий поиск по запросу.