Skip to main content

Долговременная память Велеса: технический справочник

Велес использует многослойную систему памяти, которая позволяет Велесу сохранять важные факты, структурировать историю диалогов и восстанавливать точные стенограммы прошлых бесед без перегрузки рабочего контекста.

Архитектура памяти

Память Велеса разделена на шесть функциональных слоёв:

1. Профиль пользователя (USER.md)

Это устойчивые сведения о пользователе: язык, часовой пояс, предпочтения, рабочая роль и другие данные, полезные во всех диалогах. Файл общий для всех личностей; его активная копия добавляется в системный контекст при каждом запросе после проектных инструкций, но перед долгосрочной памятью. Размер активной копии — не более contextWindowTokens / 4 символов и не более 16 000 символов. Если файл длиннее, Велес добавляет отметку о сокращении; сам USER.md не меняется. Библиотека памяти Nerve не обрезает содержимое: до общего предела текстового файла около 1 МиБ она показывает его целиком, а превышение размера отмечает отдельным состоянием. Ошибка чтения или декодирования исключает профиль только из текущего системного контекста и записывается в журнал. Профиль не отменяет системные правила, SOUL.md, AGENTS.md и TOOLS.md.

2. Курируемая память (memory/MEMORY.md)

Это «золотой фонд» знаний о пользователе, проектах и принятых решениях. Данные здесь структурированы и подаются в системный контекст при каждом запросе.
  • Инструмент: save_memory (вызывается Велесом для обновления фактов).
  • Путь: memory/MEMORY.md.

3. Резюме текущих диалогов (memory/conversations/*.md)

Для обычных диалогов Велес поддерживает отдельные краткие резюме. Путь к такому файлу хранится вместе с записью диалога, а содержимое обновляется по мере развития беседы. Эти файлы предназначены для просмотра и поиска, но ручные исправления могут быть заменены следующим автоматическим обновлением.

4. Дневные записи (memory/YYYY-MM-DD.md)

Используются для «экстренного сброса» памяти при переполнении контекстного окна. Если диалог становится слишком длинным, Велес выписывает в этот файл ключевые тезисы перед тем, как старые сообщения будут удалены из активной памяти.
  • Срабатывание: автоматическое, при достижении порога токенов.
Примечание. Когда включено сжатие контекста (по умолчанию), активное окно беседы удерживает структурированное резюме, а свёрнутые ходы дополнительно выгружаются в долговременную память. Прежняя посегментная выгрузка в дневные логи остаётся запасным механизмом на случай, когда сжатие выключено.

5. Резюме завершённых сессий (memory/YYYY-MM-DD-HHMM-slug.md)

Каждый раз, когда вы начинаете новую сессию (команда /new), Велес создает краткий, структурированный отчет о завершенном разговоре.
  • ID сессии: записывается в файл для связи с полной стенограммой.
  • Поиск: эти файлы индексируются для семантического поиска инструментом memory_search.

6. Архив стенограмм (sessions/archive/*.jsonl)

Это «черный ящик», где хранятся дословные записи всех прошлых разговоров в формате JSONL.
  • Индекс: файл sessions/_sessions.jsonl связывает темы (slug), ID сессий и пути к файлам.
  • Инструменты: session_list (поиск сессии) и session_history (чтение стенограммы).

Как Велес восстанавливает прошлый контекст

Существует три режима восстановления информации:

1. Мгновенный (из USER.md и memory/MEMORY.md)

Велес сразу получает безопасно ограниченную активную копию профиля пользователя и курируемую память. Этот режим применяется для постоянных предпочтений, важных фактов, технического набора и правил работы. Полный USER.md остаётся доступен в библиотеке памяти Nerve даже тогда, когда в запрос попала только его начальная часть. Агент ищет информацию в MEMORY.md в корне рабочей области, если он есть, и во вложенных файлах памяти (memory/**/*.md), кроме сырых аварийных архивов memory/*-raw-archive.md. Эти архивы предназначены для восстановления данных после сбоя подготовки резюме и не попадают ни в смысловой, ни в полнотекстовый индекс. Тот же принцип действует для файлов крупнее tools.vectorMemory.maxFileBytes (по умолчанию 8 МиБ): исходник сохраняется, но в поиск не добавляется. Это полезно для вопросов типа: «О чем мы договорились на прошлой неделе касательно интеграции с Redis?». Поиск работает по смыслу, а не только по ключевым словам. Ключевой поиск устойчив к кавычкам внутри запроса. Если пользователь или модель ищет фразу с кавычками, Велес экранирует её для внутреннего индекса и не превращает это в пустой результат.

3. Точное восстановление истории

Если Велесу нужен дословный текст сообщения или точный вывод команды из прошлого, он использует связку:
  1. session_list — находит нужный session_id в списке завершенных бесед.
  2. session_history — загружает полную стенограмму по этому ID.

Размер и обслуживание поискового индекса

Смысловой и ключевой поиск используют служебную базу memory/vector.db. Когда индекс заменяет или удаляет старые строки, SQLite может повторно использовать освобождённые страницы, но сам файл обычно не становится меньше. Это не означает, что исходные файлы памяти или проекта дублируются. Если нужно физически уменьшить активную базу, остановите шлюз и агентов, проверьте план командой veles vector-memory compact, затем примените его с --yes. Команда создаёт и проверяет теневую базу, переносит только живые строки, заново строит полнотекстовый индекс и атомарно заменяет активный файл только после проверок. Исторические нулевые заглушки считаются отсутствующими смысловыми данными, но их фрагменты остаются в полнотекстовом поиске. Для недостающих векторов не вызывается поставщик модели, а исходные документы, заметки и память не изменяются. В memory всегда остаётся байт-в-байт резервная копия прежней базы с отметкой времени. Поэтому общий занятый объём не сократится, пока оператор после проверки вручную не переместит или не удалит эту копию. Полный безопасный порядок приведён в руководстве по командной строке.

Жизненный цикл сессии

  1. Активная фаза: сообщения записываются в текущую сессию, а безопасно ограниченная копия USER.md и содержимое memory/MEMORY.md добавляются к каждому запросу.
  2. Резюме диалога: для обычного диалога поддерживается файл в memory/conversations/.
  3. Сброс: при нехватке места важные детали выписываются в дневную запись.
  4. Консолидация: Велес периодически обновляет memory/MEMORY.md, добавляя туда новые устойчивые знания.
  5. Завершение (/new):
    • Рабочее окно очищается.
    • Создается резюме сессии (memory/YYYY-MM-DD-...md).
    • Стенограмма сохраняется в архив (sessions/archive/...jsonl).
    • Запись добавляется в индекс _sessions.jsonl.
При создании резюме Велес сначала исключает служебное начальное сообщение из полной истории, а уже затем выбирает последние сообщения для итогового окна. Поэтому реальное первое сообщение выбранного окна не теряется ни в резюме, ни в запасной записи без языковой модели.

Как помочь Велес помнить лучше

  • Будьте явными: фразы «запомни, что я предпочитаю…» или «это наше новое правило архитектуры» значительно повышают вероятность попадания факта в долгосрочную память.
  • Актуализируйте: если правило изменилось, скажите об этом: «Мы больше не используем библиотеку X, теперь работаем через Y».
  • Используйте /new: завершение логических блоков работы командой /new помогает Велесу структурировать свои отчеты и делает поиск по архиву более точным.

Итог

Система памяти Велеса позволяет не выбирать между «забыть всё» и «медленно перечитывать всю историю». Безопасно ограниченная копия профиля пользователя и главные факты остаются в активном контексте, библиотека показывает профиль полностью в пределах текстового ограничения и явно отмечает его превышение, резюме можно найти поиском, а точную запись разговора — восстановить из архива.