mnemo — локальный слой памяти для LLM с графом знаний

· 2 мин чтения
memory knowledge-graph rust local-first llm
📂 Исходный код на GitHub

Local-first AI memory layer для любого LLM. Персистентный граф знаний, извлечение сущностей, семантический поиск. Работает с Ollama, OpenAI, Anthropic или любым OpenAI-совместимым бэкендом.

mnemo — локальный слой памяти для LLM с графом знаний

Задача

LLM-приложения, построенные на кастомных пайплайнах, не имеют персистентной памяти между сессиями. mnemo решает эту проблему — локальный помощник на Rust, который извлекает сущности из текста, строит граф знаний в SQLite и подставляет релевантный контекст в будущие промпты. Без облака, без Python, без vendor lock-in.

Репозиторий: https://github.com/zaydmulani09/mnemo

Как работает

Пайплайн состоит из двух основных потоков:

  1. Ingest — отправляете сырой текст (реплика чата, документ, заметку) через POST /ingest. mnemo прогоняет его через LLM, извлекает именованные сущности (люди, инструменты, места, концепции) и связи между ними. Сущности дедуплицируются по имени+тип, алиасы мержатся, всё пишется в SQLite. Ин-memory граф на petgraph обновляется атомарно.

  2. Retrieve — через POST /retrieve запускается 6-стадийный пайплайн: полнотекстовый поиск по чанкам → поиск по именам сущностей → расширение через граф (BFS) → фильтрация по отношениям → скоринг и ранжирование → сборка строки context_prompt. Эту строку вы подставляете в system prompt вашего LLM.

Граф — ключевое отличие. Результаты, полученные через расширение графа, получают коэффициент 0.5x, поэтому прямые совпадения всегда ранжируются выше выводных.

Архитектура

Четыре Rust-крейта:

Крейт Тип Назначение
mnemo-core lib Извлечение сущностей, графовые операции, retrieval, DB-слой
mnemo-api bin Axum REST API — тонкий слой хендлеров над mnemo-core
mnemo-cli bin CLI-инструмент через blocking reqwest
mnemo-bench bin Бенчмарки (12 наборов)

Быстрый старт

Docker + Ollama (полностью бесплатно):

git clone https://github.com/zaydmulani09/mnemo
cd mnemo
docker compose up -d
docker exec mnemo-ollama ollama pull llama3
curl http://localhost:8080/health

Бинарник (Ollama или OpenAI отдельно):

cargo install --path crates/mnemo-api
export MNEMO_LLM_BASE_URL=http://localhost:11434/v1
mnemo-api

Python SDK:

pip install mnemo-sdk
from mnemo import MnemoClient

client = MnemoClient()
client.ingest("Я строю Rust-векторную базу данных vecdb")
print(client.get_context("над чем я работаю?"))

API

Основные эндпоинты:

Метод Путь Описание
POST /ingest Сохранить текст, извлечь сущности
POST /retrieve Получить ранжированный контекст
GET /entities Список сущностей (пагинация)
GET /entities/:id/neighbors Соседи в графе знаний
POST /search Полнотекстовый поиск
GET /stats Статистика: сущности, чанки, граф
DELETE /wipe Удалить всю память

Полная документация API с curl-примерами: docs/api.md

Конфигурация

Переменные окружения или TOML-файл:

db_path = "mnemo.db"
port = 8080

[llm]
provider = "ollama"
base_url = "http://localhost:11434/v1"
model = "llama3"
api_key = "ollama"
timeout_secs = 30
max_retries = 3
max_tokens = 2048
temperature = 0.1

Переменные окружения имеют приоритет над TOML. Поддерживаемые провайдеры: ollama, openai, anthropic, custom.

CLI

cargo install --path crates/mnemo-cli

mnemo ingest "Я использую Neovim и тёмную тему"
mnemo search "какой редактор я использую?"
mnemo entities
mnemo entity <uuid> --neighbors
mnemo stats

Производительность

Apple M2, SQLite WAL, debug-сборка (release в 3–5 раз быстрее):

Операция Задержка Пропускная способность
Вставка сущности ~0.12 ms ~8 300 ops/s
Полнотекстовый поиск ~0.28 ms ~3 500 ops/s
Соседи графа (depth=2) ~0.89 ms ~1 100 ops/s
Полный retrieval-пайплайн ~4.2 ms ~238 ops/s

Чем отличается от альтернатив

  • Единый статический бинарник на Rust (не Python-демон)
  • SQLite — данные переживают рестарты
  • petgraph — многохоповый обход графа
  • Нулевая зависимость от облака
  • Любой OpenAI-совместимый LLM-бэкенд
  • Ранжированный retrieval с графовым расширением

Кому подходит — разработчикам кастомных LLM-пайплайнов, которым нужна локальная, структурированная, контролируемая память. Кому нет — тем, кто использует managed-агентов с уже встроенной памятью.

Лицензия: MIT. 122 Rust-теста, 21 Python-тест, 12 бенчмарков.

Источник: https://github.com/zaydmulani09/mnemo