Мнемозина для агента Гермеса: быстрое начало работы с локальной памятью

Локальная память Hermes с контролируемой записью.

Содержимое страницы

Mnemosyne — это локальный провайдер памяти для Hermes Agent, хранящий рабочую память, структурированные факты, временные данные и эпизодическую историю в локальной базе SQLite — без хостинг-сервисов, без обязательных сетевых вызовов и с необычно гранулярным контролем над записью.

Его наиболее полезное свойство — это не качество самого извлечения. Это объём контроля, который он предоставляет над путём записи: автосохранение разговора можно ограничить по ролям или отключить полностью, логирование результатов инструментов по умолчанию выключено, явные операции «запомнить» и «забыть» остаются доступными в любом случае, а в новых выпусках добавлена опциональная подавление самоэха вблизи границ сжатия контекста. Такая комбинация делает его разумным выбором, когда вы хотите постоянную память, не превращая автоматически каждый разговор в перманентные знания.

Дисциплина в пути записи важна, потому что у агентской памяти есть хорошо задокументированный режим отказа: собственные выводы модели могут быть захвачены, извлечены позже так, словно это были наблюдения, и использованы для обоснования ещё более сильной версии самих себя. Самоусиливающие циклы памяти в ИИ-агентах подробно рассматривает этот режим отказа; данное руководство сфокусировано на конкретной конфигурации Mnemosyne, которая ограничивает его на практике. Для того, чтобы понять, как Mnemosyne соотносится с другими бэкендами памяти Hermes, смотрите Сравнение провайдеров памяти для агентов.

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

Mnemosyne за одну минуту

Типичный провайдер памяти выполняет какую-то версию следующих шагов: захват, извлечение, хранение, извлечение, затем инъекция в будущий промпт. Mnemosyne добавляет несколько различных слоёв вокруг этого базового цикла: рабочую память, семантический и лексический поиск, структурированные факты, временную информацию, связи сущностей, эпизодическую память, консолидацию, канонические факты и валидацию памяти. Хранение осуществляется в локальном SQLite с FTS5 и опциональным векторным поиском, что делает его значительно более инспектируемым, чем облачный только-память продукт, и более способным, чем простой файл MEMORY.md.

Кратко, в сравнении с остальными провайдерами экосистемы Hermes: Holographic проще и целенаправленно ориентирован на хранилище фактов; Hindsight делает акцент на гибридном поиске, графах знаний и рефлексии; Honcho делает акцент на моделировании пиров и пользователей с диалектическим рассуждением; Mem0 делает акцент на автоматическом извлечении фактов на базе LLM; а Mnemosyne сочетает локальное хранилище SQLite, гибридный поиск, консолидацию, структурированные факты и необычно гранулярный контроль удержания. Полный разбор, включая требования к инфраструктуре и заметки по самораспространению для каждого провайдера, находится в Сравнение провайдеров памяти для агентов.

Текущие версии

На сентябрь 2026 года стабильный релиз на PyPI — это mnemosyne-memory 3.15.1, при этом ветка 4.0 доступна как предварительный релиз. Для продакшн-установки Hermes начинайте со стабильной версии, если вам конкретно не нужен фикс или функция из 4.0 и вы готовы протестировать миграцию базы данных и изменение поведения. Проверьте вашу установленную версию с помощью:

hermes mnemosyne version

Установка Mnemosyne в Hermes

Сначала активируйте собственное виртуальное окружение Hermes, если вы использовали стандартную локальную установку:

source ~/.hermes/hermes-agent/venv/bin/activate

Для поддержки локальных эмбеддингов установите основное пакетное ядро с расширением embeddings плюс обёртку плагина Hermes:

python -m pip install \
  "mnemosyne-memory[embeddings]" \
  mnemosyne-hermes

Зарегистрируйте плагин:

mnemosyne-hermes install

Если вы заменяете существующую регистрацию плагина:

mnemosyne-hermes install --force

Активируйте провайдера и перезапустите шлюз:

hermes config set memory.provider mnemosyne
hermes gateway restart

Проверьте с помощью:

hermes memory status

Ожидаемый вывод выглядит подобным образом:

Provider: mnemosyne

Plugin: installed
Status: available

Установка в Docker и на персистентных серверах

Если Hermes работает внутри персистентного Docker или образа, установленного по-образовому, устанавливайте плагин в боковое виртуальное окружение на смонтированном домашнем каталоге Hermes, а не в пересобираемое окружение Python контейнера, чтобы плагин пережил пересборку образов:

export HERMES_HOME=/opt/data
VENV="$HERMES_HOME/.mnemosyne/venv"
python3 -m venv "$VENV"
"$VENV/bin/python" -m pip install --upgrade "mnemosyne-memory[embeddings]" mnemosyne-hermes
"$VENV/bin/mnemosyne-hermes" install --mode wrapper --python "$VENV/bin/python"
hermes config set memory.provider mnemosyne

Боковое виртуальное окружение должно использовать ту же главную/побочную версию Python, что и работающий шлюз Hermes — не указывайте на нерелевантный python3 из PATH. После этого перезапустите фактический контейнер или сервис и проверьте с помощью "$VENV/bin/mnemosyne-hermes" status наряду с hermes memory status.

Не отключайте весь набор инструментов памяти Hermes

Держите два концепта отдельно: собственную встроенную память Hermes (MEMORY.md / USER.md, подробно описанную в Система памяти агента Hermes) и внешний провайдер (Mnemosyne). Не выполняйте бездумно hermes tools disable memory при настройке внешнего провайдера — в зависимости от версии Hermes эта команда может также скрыть инструменты внешних провайдеров памяти. Используйте конфигурацию провайдера, как показано ниже.

Базовый статус и инспекция

hermes memory status
hermes mnemosyne stats
hermes mnemosyne stats --global
hermes mnemosyne inspect "query"

Экспортируйте переносимый резервный копию:

hermes mnemosyne export \
  --output ~/mnemosyne-backup.json

База данных обычно находится в ~/.hermes/mnemosyne/data/mnemosyne.db. Поскольку это SQLite, инспекция и резервное копирование просты с использованием стандартных инструментов. Для остальных команд шлюза, сессий и диагностики, упомянутых в этом руководстве, Шпаргалка по CLI агента Hermes является более быстрым справочником, чем копание в выводе --help.

Политика удержания по умолчанию заслуживает внимания

Первый механизм контроля, который стоит понять, — это sync_roles. Текущие значения по умолчанию в Mnemosyne уже более консервативны, чем в ранних выпусках — автоматическая синхронизация Hermes по умолчанию срабатывает только на пользовательских ходах, а не на обоих (пользовательском и ассистентском) — но для строгого режима только явного удержания полное отключение автосохранения ходов оправдывает дополнительный шаг. Отредактируйте ~/.hermes/config.yaml:

memory:
  provider: mnemosyne

  mnemosyne:
    sync_roles: []

Пустой список означает, что обычные ходы разговора не сохраняются автоматически функцией sync_turn(). Явные операции mnemosyne_remember продолжают работать в любом случае — обычный разговор перестаёт автоматически поступать в память, тогда как явная команда «запомни это» всё ещё достигает Mnemosyne.

Отключите автоматическое логирование результатов инструментов

Mnemosyne также может логировать выполнения инструментов как память. Для консервативной настройки оставьте это отключённым в ~/.hermes/.env:

MNEMOSYNE_LOG_TOOLS=0

Это уже значение по умолчанию, но явная установка документирует политику, а не полагается на предположения о значениях по умолчанию. После этого перезапустите Hermes:

hermes gateway restart

С комбинацией sync_roles: [] и MNEMOSYNE_LOG_TOOLS=0 оба основных автоматических пути записи — автосохранение разговора и автосохранение результатов инструментов — выключены.

Оставьте автоматический поиск

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

Добавьте постоянное инструктирование для агента

Конфигурация провайдера блокирует автоматический захват на уровне провайдера, но модель всё ещё может решить самостоятельно вызвать явный инструмент записи. Добавьте явную политику в SOUL.md:

## Политика долгосрочной памяти

Mnemosyne — это провайдер долгосрочной памяти.

Не записывайте ничего в Mnemosyne, если пользователь явно не попросил вас
запомнить, сохранить, удержать или сохранить эту информацию.

Если информация кажется полезной для будущих сессий, но пользователь явно не
запросил её запомнить, попросите разрешения, прежде чем вызывать
mnemosyne_remember или другой инструмент записи Mnemosyne.

Не создавайте постоянные памяти на основе собственных рассуждений, предположений,
резюме, интерпретаций, выводов или предполагаемых предпочтений.

Не создавайте постоянные памяти на основе вывода инструментов, если пользователь явно
не попросил запомнить этот результат.

При сохранении одобренной памяти сохраняйте то, что пользователь действительно сказал.
Не приукрашивайте её выведенным контекстом или выводами.

Чтение и извлечение памяти Mnemosyne разрешены без запроса разрешения.

Перезапустите шлюз и начните новую сессию:

hermes gateway restart
/new

Это политика, применяемая моделью, а не жёсткая граница разрешений — она дополняет конфигурацию провайдера выше, а не заменяет её.

Что насчёт memory.write_approval?

Hermes поддерживает memory.write_approval: true для записей во встроенных MEMORY.md / USER.md, и Mnemosyne реализует собственную специфичную для провайдера стадию для явных записей в новых выпусках. Это многообещающе, но есть архитектурное замечание, которое стоит серьёзно отнестись: Hermes пока не предоставляет единого, независимого от провайдера контракта одобрения для всех внешних провайдеров памяти, а реализация pending/apply в Mnemosyne специфична для провайдера, а не является частью общего стандарта. Не предполагайте, что одобрение работает корректно просто потому, что ключ конфигурации присутствует — протестируйте его на ваших точных версиях Hermes и Mnemosyne. До того, как независимое от провайдера одобрение созреет, комбинация sync_roles: [], MNEMOSYNE_LOG_TOOLS=0 и политики явных записей в SOUL.md выше даёт вам надёжную базовую линию, при этом путь одобрения тестируется отдельно, если вы планируете на него опираться.

Включите подавление самоэха

Текущая версия Mnemosyne также предлагает опциональное подавление самоэха:

MNEMOSYNE_SELF_ECHO_ENABLED=1

Поместите это в ~/.hermes/.env, затем перезапустите:

hermes gateway restart

Подавление самоэха целенаправлено направлено на границы сжатия контекста — его цель состоит в уменьшении случаев, когда память, только что созданная провайдером, немедленно подаётся обратно агенту, как будто это был независимый контекст. Это намеренно является решением best-effort и не заменяет фильтрацию записей: механизмы контроля записи предотвращают попадание сомнительных памяти в систему изначально, тогда как механизмы подавления самоэха предотвращают прямое возвращение недавнего вывода провайдера. Оба важны, и ни один не заменяет другой.

Консервативная конфигурация Mnemosyne

Собирая всё вместе, начальная конфигурация для самораспространяемого персонального инженерного агента выглядит так. В ~/.hermes/config.yaml:

memory:
  provider: mnemosyne

  mnemosyne:
    sync_roles: []

В ~/.hermes/.env:

MNEMOSYNE_LOG_TOOLS=0
MNEMOSYNE_SELF_ECHO_ENABLED=1

И в SOUL.md, как минимум:

Храните долгосрочную память только когда пользователь явно запрашивает это.
Не переводите выводы, сгенерированные моделью, или вывод инструментов в постоянную
память без явного разрешения.
flowchart LR U[User conversation] -.->|blocked| M[(Mnemosyne)] T[Tool results] -.->|blocked| M R["Explicit: remember this"] -->|mnemosyne_remember| M Q[Future question] -->|recall| M

Тестируйте, что обычный разговор не сохраняется

Сначала проверьте базовый счётчик:

hermes mnemosyne stats

Начните новую сессию Hermes и скажите простое фактическое утверждение, не прося агента запомнить его, например:

PurpleOtter использует порт 48123.

Затем поищите его:

hermes mnemosyne inspect "PurpleOtter"

Ожидается: Results for 'PurpleOtter': 0. Также перепроверьте hermes mnemosyne stats — количество элементов рабочей памяти не должно увеличиться из-за этого обычного хода.

Тестируйте явную память

Теперь скажите утверждение того же вида, но явно попросите о сохранении:

Запомни, что BlueKoala использует порт 17321.

Осмотрите его, затем начните новую сессию и попросите вернуть его:

hermes mnemosyne inspect "BlueKoala"
/new
Какой порт использует BlueKoala?

Hermes должен корректно извлечь значение — эта пара тестов изолирует политику пути записи (ничто не попадает без запроса) от механизма извлечения (то, что попадает, надёжно возвращается).

Тестируйте логирование инструментов

С установленным MNEMOSYNE_LOG_TOOLS=0, попросите Hermes выполнить отличительную, уникальную команду:

Используй инструмент терминала, чтобы выполнить:
echo tool-canary-834729

Затем поищите строку-канарейку:

hermes mnemosyne inspect "tool-canary-834729"

Ожидается: 0 results. Это гораздо более сильный тест, чем просто доверять тому, что переменная окружения учитывается везде.

Инспекция базы данных

Поскольку хранение осуществляется в SQLite, внутренняя схема напрямую доступна для инспекции:

sqlite3 ~/.hermes/mnemosyne/data/mnemosyne.db '.tables'

В зависимости от версии вы можете увидеть таблицы, такие как working_memory, episodic_memory, facts, consolidated_facts, gists, graph_edges, memoria_facts и memory_embeddings. Это важно при тестировании удаления — система памяти может успешно удалить строку рабочей памяти, оставив за ней производный факт, эссе или графовый объект. В Mnemosyne были реальные баги в этой области, связанные с осиротевшими производными записями, и в новых выпусках были усилены как удаление, так и диагностика. Предпочитайте поддерживаемые пути удаления и doctor/repair провайдера ручному удалению строк SQLite, если вы полностью не понимаете текущую схему.

Удаление рабочей памяти, связанной с сессией

Один нюанс: рабочие памяти Mnemosyne могут быть связаны с сессией, поэтому строка с scope = session может быть не видна для самостоятельного удаления, работающего в сессии default. При отладке осматривайте scope напрямую:

SELECT id, session_id, scope, content
FROM working_memory;

Провайдеру или API необходим правильный scope сессии, чтобы изменять записи, локальные для сессии, — ещё одна причина предпочитать поддерживаемые административные инструменты чистым правкам SQL.

Консолидация: не спешите с sleep()

Mnemosyne может консолидировать рабочую память в более долгоживущие представления, что полезно, но является операцией изменения. Перед включением агрессивной автоматической консолидации осмотрите, что на самом деле захватывается, убедитесь, что обычные ходы не попадают в память неожиданно, проверьте удаление от начала до конца и создайте резервную копию базы данных. Затем экспериментируйте с:

hermes mnemosyne sleep

Недавние изменения в Mnemosyne сделали обработку конфликтов более консервативной — одна лишь семантическая близость больше не доказывает, что одна память должна недействителензовать другую, что является именно тем направлением, в котором должна двигаться система постоянной памяти агента, как описано в Самоусиливающие циклы памяти в ИИ-агентах.

Резервное копирование перед обновлениями

Создайте переносимый экспорт перед любым значительным изменением:

hermes mnemosyne export \
  --output ~/mnemosyne-backup.json

Для важных установок также копируйте локальную базу данных или каталог данных перед крупными обновлениями. Mnemosyne 4.x в настоящее время является веткой предварительного релиза, поэтому обновление до главной версии заслуживает большей осторожности, чем рутинное обновление патча.

Итоговая рекомендуемая настройка

Для долгоживущей установки Hermes, где точность памяти важнее, чем запоминание всего, постоянная конфигурация выглядит так: локальное хранение Mnemosyne включено, автоматический поиск включён, автосохранение разговора выключено, автосохранение сообщений ассистента выключено, логирование результатов инструментов выключено, явное запоминание и забывание включены, подавление самоэха включено, поиск по сессиям включён, и человеческий просмотр для чувствительных записей желателен, как только путь одобрения протестирован. Это заставляет Mnemosyne функционировать в основном как курируемое хранилище долгосрочной памяти, а не как архив транскриптов — цель состоит не в том, чтобы заставить Hermes помнить всё, что он когда-либо говорил, а в том, чтобы он запоминал то, что останется истинным, когда начнётся следующая сессия. Если вы запускаете несколько профилей с разными провайдерами или политиками удержания, [Продакшн-настройка агента Hermes](https://www.glukhov.org/ru/ai-systems/hermes/production-setup/ “Профиль-приоритетная конфигурация Hermes для инженеров, исследователей и операторов.”}) описывает подключение на уровне профилей для сохранения их согласованности. Если вы предпочитаете запускать память как отдельный Docker-сервис с графом знаний и операцией отражения, [Hindsight для агента Hermes](https://www.glukhov.org/ru/ai-systems/hermes/hindsight-for-hermes-local-llms/ “Развёртывание Hindsight для агента Hermes с Docker и PostgreSQL. Подключение локальных эмбеддингов Qwen3 и пере-ранжирования через Ollama или llama.cpp, без облачных вычислений.”}) — это руководство по внешнему, основанному на Docker провайдеру.

Подписаться

Получайте новые материалы про системы, инфраструктуру и AI engineering.