План развития памяти Veles
Дата: 2026-03-25 Основано на: Исследование памяти OpenClaw Цель: Внедрить систему долговременной памяти в стиле OpenClaw в Veles с минимальными изменениями основного цикла.
Текущее состояние
Файловая память (veles/agent/memory.py)
MemoryStore: управляетmemory/MEMORY.md(структурированные долгосрочные факты).MemoryConsolidator: консолидация на базе LLM, которая архивирует старые сообщения в MEMORY.md, когда контекст превышает половину окна.- Содержимое MEMORY.md встраивается в системный промпт через
ContextBuilder. - Консолидация использует принудительный вызов инструмента
save_memoryс откатом к обычному архивированию.
Векторная память (veles/agent/vector_memory.py)
VectorMemoryManager: индексируетworkspace/docs/<project>/с использованием гибридного поиска (BM25 + векторный).- SQLite + sqlite-vec + FTS5, эмбеддинги через litellm.
- Фоновый цикл синхронизации (интервал 60с), поиск с ограничением по проекту.
VectorSearchTool: предоставляет агенту инструментvector_search.
Сессии (veles/session/manager.py)
- JSONL-файлы в
workspace/sessions/(один на пару канал:chat_id). - Строка метаданных + дополняемые словари сообщений.
get_history()возвращаетmessages[last_consolidated:].
Что отсутствует (по сравнению с OpenClaw)
Нет датированных файлов памяти✅ Реализовано (Фаза 1)Нет сброса памяти перед сжатием контекста✅ Реализовано (Фаза 2)Файлы памяти не индексируются для поиска✅ Реализовано (Фаза 3)Нет инструмента✅ Реализовано (Фаза 4)memory_searchHISTORY.md избыточен✅ Удален (заменен датированными файлами + memory_search)Нет временного затухания (temporal decay)✅ Реализовано (отдельная конфигурация для памяти и документов)
Что мы создаем
Четыре функции в порядке реализации:| # | Функция | Источник вдохновения | Влияние на основной цикл |
|---|---|---|---|
| 1 | Датированные файлы памяти по завершении сессии | Хук session-memory в OpenClaw | 1 строка в обработчике /new |
| 2 | Сброс памяти перед сжатием контекста | memory-flush.ts в OpenClaw | 1 вызов перед консолидацией |
| 3 | Индексация файлов памяти | Индексация memory-core в OpenClaw | Расширение VectorMemoryManager |
| 4 | Инструмент memory_search | Инструмент memory_search в OpenClaw | Регистрация 1 инструмента |
- Текущий алгоритм гибридного поиска (BM25 + векторный).
- Текущий конвейер эмбеддингов (litellm).
- Текущая логика консолидация (MemoryConsolidator).
- Текущий формат сессий JSONL.
- Наличие MEMORY.md в системном промпте.
Фаза 1: Датированные файлы памяти по завершении сессии
Цель: При вызове/new резюмировать завершающуюся сессию в файл memory/YYYY-MM-DD-slug.md.
Новый класс: SessionMemoryWriter
Файл: veles/agent/memory.py (добавить в существующий файл)
Логика
- Взять последние
max_messagesсообщений пользователя/ассистента из снимка сессии (пропустить вызовы инструментов для сокращения контекста LLM). - Если сообщений от пользователя меньше 3 — пропустить (слишком короткая сессия).
- Вызвать LLM со специализированным промптом:
- System: “Вы — составитель памяти. Создайте краткое резюме этого диалога.”
- Использовать принудительный вызов
create_session_memoryс параметрами:slug: короткий идентификатор файла в kebab-case (макс. 40 символов, например “api-design-review”).summary: описание ключевых тем, решений и фактов в формате markdown.
- Записать в
memory/YYYY-MM-DD-slug.md:
- При ошибке вызова LLM записать сырой фрагмент стенограммы (по аналогии с
_raw_archiveв MemoryStore).
Точка интеграции в loop.py
Текущий обработчик /new:
Дополнение в конфиг (schema.py)
ToolsConfig рядом с vector_memory:
Измененные файлы
veles/agent/memory.py— добавлен классSessionMemoryWriter(~80 строк).veles/agent/loop.py— инициализацияself.session_memory_writer+ 1 строка в/new.veles/config/schema.py— добавленаSessionMemoryConfig.
Фаза 2: Сброс памяти перед сжатием контекста
Цель: Перед тем какmaybe_consolidate_by_tokens начнет архивировать сообщения, запустить выделенный ход LLM для записи важных фактов в memory/YYYY-MM-DD.md.
Новый класс: MemoryFlusher
Файл: veles/agent/memory.py (добавить в существующий файл)
Логика
- Условие срабатывания:
estimated_tokens > context_window - threshold_tokens. - Защита: Пропускать, если для этой сессии в текущем цикле сжатия сброс уже выполнялся.
- Дедупликация: Прочитать текущий
memory/YYYY-MM-DD.md, чтобы не дублировать информацию. - Вызвать LLM с системным промптом:
- Если ответ
[silent]— пропустить запись. - Иначе — дозаписать в
memory/YYYY-MM-DD.md:
Точка интеграции
ВMemoryConsolidator.maybe_consolidate_by_tokens() (memory.py), добавить вызов флеша перед циклом консолидации:
Измененные файлы
veles/agent/memory.py— добавлен классMemoryFlusher(~70 строк), измененMemoryConsolidator.__init__для его приема.veles/agent/loop.py— передача экземпляраMemoryFlusherвMemoryConsolidator.veles/config/schema.py— добавленаMemoryFlushConfig.
Фаза 3: Индексация файлов памяти
Цель: РасширитьVectorMemoryManager для индексации memory/MEMORY.md и memory/*.md, сделав их доступными для поиска наравне с документацией.
Изменения в VectorMemoryManager
Файл: veles/agent/vector_memory.py
1. Расширение _discover_files()
Добавляем поиск в папке memory/ с зарезервированным именем проекта _memory.
2. Добавление метода search_memory()
Удобный метод для поиска только по файлам памяти (фильтр project='_memory').
Измененные файлы
veles/agent/vector_memory.py— расширено обнаружение файлов, добавлен методsearch_memory().
Фаза 4: Инструмент memory_search
Цель: Дать агенту инструмент для поиска по его собственным файлам памяти.
Новый файл: veles/agent/tools/memory_search.py
Инструмент memory_search позволяет агенту искать по MEMORY.md и датированным логам в папке memory/, используя гибридный поиск. Это критически важно для восстановления контекста прошлых диалогов, решений и предпочтений.
Регистрация в loop.py
Добавить регистрацию нового инструмента в _register_default_tools() после vector_search.
Обновление системного промпта (context.py)
Обновить описание рабочего пространства в _get_identity(), указав на наличие инструментов поиска по памяти.
Архитектура после реализации
Veles получает многослойную систему памяти:- MEMORY.md: Долгосрочные, отобранные факты (всегда в промпте).
- Датированные логи: Автоматически создаваемые резюме сессий (доступны через поиск).
- Поиск по памяти: Инструмент
memory_searchдля доступа к истории. - Векторная база: Единое хранилище для документации проектов и личной памяти агента.
Жизненный цикл сессии
- При приближении к лимиту контекста важные факты сбрасываются в дневной лог.
- При завершении сессии создается ее краткое резюме.
- В новой сессии агент может мгновенно найти детали прошлых обсуждений, используя поиск, при этом не перегружая основной контекст.
План работ и оценка
| Фаза | Функция | Объем кода | Файлы | Оценка |
|---|---|---|---|---|
| 1 | Датированные логи сессий | ~80 строк | memory.py, loop.py | 2-3 часа |
| 2 | Флеш перед сжатием | ~70 строк | memory.py, loop.py | 2-3 часа |
| 3 | Индексация памяти | ~20 строк | vector_memory.py | 1 час |
| 4 | Инструмент memory_search | ~50 строк | tools/memory_search.py | 1-2 часа |
Зависимости
- Фазы 3 и 4 требуют включенной векторной памяти (
tools.vector_memory.enabled: true). - Фазы 1 и 2 работают независимо (записывают обычные markdown-файлы).
- Фаза 4 зависит от Фазы 3.
