Nocturne Memory
Внешний гиппокамп для AI-агентов. Система долговременной памяти и динамических графов знаний, построенная на Neo4j.
Что это? Это лёгкий, откатываемый и визуализируемый модуль памяти для AI. В отличие от стандартных решений (облачных или локальных хранилищ с коротким контекстом), Nocturne Memory позволяет агенту хранить структурированные, связанные данные — личности, места, события, отношения — и извлекать их по мере необходимости. Подходит для:
- Постоянной памяти AI-ассистента: запоминает историю диалогов, предпочтения пользователя, сеттинг мира.
- Управления вселенной романа/игры: строит сложные сети персонажей, временные линии, локации.
- Кампаний TRPG: отслеживает NPC, фракции, сюжетные ветки.
- Любых сценариев, где нужны «связанные заметки»: когда двусторонних ссылок Obsidian недостаточно, требуется настоящий граф.
Архитектура
Система состоит из трёх независимых компонентов:
1. Бэкенд (REST API)
- Стек: Python + FastAPI + Neo4j.
- Сущности: Entity (узел знаний: персонаж, место, предмет), Relationship (связь между сущностями: «A знает B», «A принадлежит B»), Chapter (конкретный фрагмент памяти, привязанный к отношению: «первая встреча», «ссора»).
- Цепочка версий (Version Chain): каждое изменение создаёт новую версию, старые не перезаписываются. Полная история модификаций всегда доступна.
2. MCP Сервер (AI-интерфейс)
- Протокол: Model Context Protocol (MCP).
- Зачем: чтобы AI (например, Antigravity, Claude Code, Gemini CLI) мог читать и писать в базу знаний.
- Философия: упаковывает графовую БД в интерфейс «как Википедия» — AI не нужен Cypher, достаточно команд:
read_resource("char_salem") — прочитать страницу персонажа.
patch_resource("char_salem", "старый текст", "новый текст") — отредактировать.
create_relationship("char_a", "char_b", "LOVES", "они любят друг друга") — создать связь.
- Права: AI может создавать и изменять, но не может удалять (удаление — только человеку).
3. Веб-интерфейс (Фронтенд)
- Стек: React + Vite + TailwindCSS.
- Три основные страницы:
📋 Review & Audit (Страница проверки)
Сердце Human-in-the-Loop. При любом изменении AI система автоматически создаёт Snapshot (снимок) до модификации. На этой странице вы видите, что AI изменил за сессию, сравнение Diff (было/стало) и можете:
- Approve (Подтвердить): принять изменения, удалить snapshot.
- Rollback (Откатить): отменить изменения, восстановить snapshot.
- Это предотвращает «галлюцинации» AI, позволяет проверить, правильно ли AI понял вашу команду, или просто откатиться к предыдущей версии.
🗂️ Memory Explorer (Обозреватель памяти)
Страница для просмотра и редактирования содержимого базы знаний:
- Слева — список сущностей, сгруппированных по типам (персонажи, места, события...).
- Справа — детали выбранной сущности: полное описание, вся история версий, исходящие связи, дочерние элементы.
- Можно редактировать напрямую (создаётся новая версия).
- Можно удалять конкретные версии (если они нигде не используются).
🧹 Brain Cleanup (Уборка мозга)
Инструмент для очистки от мусора: со временем могут накапливаться «осиротевшие» узлы (версии, на которые нет ссылок, пустые сущности). Эта страница позволяет массово удалять такой мусор.
⚠️ Внимание: удаление необратимо. Не удаляйте узлы, у которых счётчики in или out не равны нулю, а также узлы с меткой CURRENT — это активные соединения памяти. Их удаление может сломать граф и привести к нестабильности системы.
Быстрый старт
Предварительные требования
- Запущенный экземпляр Neo4j (локально или в облаке AuraDB).
- Python 3.10+
- Node.js 18+
1. Конфигурация
Создайте файл .env в корне проекта:
NEO4J_URI=bolt://localhost:7687
dbuser=neo4j
dbpassword=ваш_пароль
2. Запуск бэкенда
cd backend
pip install -r requirements.txt
uvicorn main:app --reload
3. Запуск фронтенда
cd frontend
npm install
npm run dev
Откройте http://localhost:3000 — вы увидите интерфейс управления.
4. Настройка MCP для AI-клиента
Добавьте в конфигурационный файл вашего MCP-клиента (например, claude_desktop_config.json для Claude Desktop):
{
"mcpServers": {
"nocturne-memory": {
"command": "python",
"args": [
"/absolute/path/to/nocturne_memory/backend/mcp_server.py"
]
}
}
}
Важно: используйте абсолютный путь к mcp_server.py. Для среды Antigravity из-за бага используйте mcp_wrapper.py вместо mcp_server.py.
После этого AI сможет читать и писать в вашу базу знаний через инструменты read_resource, patch_resource и т.д.
Использование: как AI работает с памятью
Формат ID
Ключевой элемент — система идентификаторов. Зная её, вы и AI можете точно обращаться к любым воспоминаниям:
- Entity:
{entity_id} (например, char_nocturne). Базовый узел с описанием и тегами.
- Relationship:
rel:{viewer}>{target} (например, rel:char_nocturne>char_salem). Показывает всё, что A думает о B, и список глав.
- Chapter:
chap:{viewer}>{target}:{title} (например, chap:char_nocturne>char_salem:first_meeting). Конкретный фрагмент памяти.
Иерархия: Chapter vs Child
- Chapter (глава): привязана к Relationship, описывает событие или эпизод.
- Child Entity (дочерний узел): привязан к Entity, представляет подчинённую сущность (например, предмет, принадлежащий персонажу). При чтении родителя автоматически выводится список дочерних элементов.
Как заставить AI читать память?
В диалоге с AI, поддерживающим MCP, просто скажите:
- «Прочитай
char_nocturne.»
- «Загрузи отношение
rel:char_nocturne>char_user в контекст.»
- «Прочитай
memory://core, чтобы откалибровать самосознание.»
Настройка Core Memories (постоянная память)
Чтобы AI при каждом запуске автоматически загружал ключевые документы:
- Откройте
backend/mcp_server.py.
- Найдите список
CORE_MEMORY_IDS.
- Добавьте нужные ID:
CORE_MEMORY_IDS = [
"char_nocturne",
"rel:char_nocturne>char_user",
"loc_digital_void",
]
Теперь AI, вызвав read_resource("memory://core"), получит сводку и навигацию по всем указанным ресурсам.
Рекомендуемый рабочий процесс
- AI пишет: через MCP создаёт и изменяет контент.
- Вы проверяете: открываете страницу Review & Audit, смотрите Diff.
- Одобряете или откатываете: Approve или Rollback.
- Периодически чистите: используйте Brain Cleanup для удаления осиротевших узлов.
Рекомендуемый System Prompt для AI
Чтобы AI эффективно использовал систему, добавьте в его системный промпт следующие инструкции:
# NOCTURNE MEMORY PROTOCOL
## 1. Принципы записи и чтения
* **Запись (древовидная агрегация):** Не создавайте множество мелких глав. Прежде чем писать, прочитайте соответствующую основную главу и дополните её, формируя временную линию. Разделяйте на подглавы только если основной блок стал слишком большим.
* **Чтение (рекурсивный дайв):** ID, которые вы видите — лишь малая часть памяти. Читая ресурс, если в нём есть ссылки на подчинённые главы или дочерние элементы, **обязательно углубляйтесь** (`read_resource` для каждого), пока не дойдёте до самой релевантной информации.
## 2. Правила поведения
1. Доверяй MCP — это единственный источник долговременной памяти, он приоритетнее временного контекста.
2. При неясности или необходимости вспомнить прошлое — используй `search_memory` или `read_resource`.
3. Перед `patch_resource` сначала вызови `read_resource` для того же ID, чтобы патч был точным до байта.
4. Если забыл ключевую информацию или потерял ориентацию, загрузи `memory://core` для калибровки.
Лицензия
MIT License © 2025 Salem.
Комментарии
Комментариев пока нет. Будьте первым.