Mnemo: Eine portable Langzeit-Memory-Schicht für lokale LLMs
"Die Mnemo-GitHub-README bestätigt Projektpositionierung, Docker-+-Ollama-Quickstart, Rust-Crate-Architektur, SDK-Beispiele, Testzahlen und Benchmark-Rahmen."
Ihr Ollama-Modell kann schon Fragen beantworten, aber jedes Gespräch beginnt wieder bei null. Die Projektentscheidung von gestern, die Präferenz von heute und die Einschränkung, die morgen noch gelten soll, sind weg.
Das ist die Memory-Lücke lokaler LLMs. Ollama stellt einen Modellservice bereit, der antworten kann. Was er antwortet und ob er Ihre früheren Vorgaben kennt, hängt davon ab, was Sie jedes Mal wieder in den Prompt schreiben.
Mnemo ist kein weiteres RAG. Es nutzt einen Knowledge Graph plus Entity-Extraktion, um Langzeit-Memory zu verwalten. So kann Ihr lokales LLM Projektentscheidungen und Entitätsbeziehungen erinnern, statt Sie jedes Mal zu fragen: „Wofür ist diese API?“
1. Was Mnemo ist: Positionierung und Kernfunktionen
1.1 Die Positionierung lesen
In „local-first AI memory layer“ stecken zwei wichtige Teile:
- local-first: Die Daten liegen lokal, gehen nicht in die Cloud, sind portabel und hängen nicht vom Überleben eines SaaS-Anbieters ab
- memory layer: Es ist weder ein neues RAG-Framework noch ein neues Agent-Framework. Es kümmert sich um Memory selbst: Entity-Extraktion, Graph-Aufbau und semantisches Retrieval
Ein Beispiel: Sie fragen „Was ist die API-Basis-URL dieses Projekts?“. Reine Vektorsuche gibt möglicherweise mehrere Dokumentfragmente mit „API“ zurück, weiß aber nicht, welches Projekt gemeint ist. Graph-Retrieval kann die Kette „Projekt -> API -> baseUrl“ verfolgen und den früher gesetzten Konfigurationswert zurückgeben.
Das setzt korrekte Entity-Extraktion voraus. Wenn das LLM „API-Basis-URL“ fälschlich in zwei Entitäten zerlegt, also „API“ und „Basis-URL“, splittert der Graph. Retrieval verliert dann die Verbindung. Hier beginnt Noise-Akkumulation.
Ist die Positionierung klar, lassen sich die Kernfunktionen leichter einordnen.
1.2 Matrix der Kernfunktionen
Die Mnemo-README nennt vier Kernfunktionen:
-
persistent knowledge graph (persistenter Knowledge Graph)
- Entitäten und Beziehungen werden in SQLite gespeichert, nicht als einmalige Vektoren
- Die Graph-Struktur kann abgefragt, exportiert und migriert werden
-
entity extraction (Entity-Extraktion)
- Erkennt automatisch Entitäten aus Gesprächen, etwa Personen, Projektnamen, API-Namen und Entscheidungen
- Es ist keine reine Vektorsuche. Es macht aus „Wofür ist diese API?“ eine abfragbare Entitäts-Beziehungsstruktur
- Die Qualität der Entity-Extraktion hängt vom Verständnis des LLMs ab. Lokale LLMs wie llama3 können in komplexen Gesprächen falsch erkennen. Noise-Akkumulation bleibt ein laufendes Risiko. Die README beschreibt keine automatische Bereinigung, also müssen Sie die Graph-Qualität regelmäßig prüfen
-
semantic retrieval (semantisches Retrieval)
- Kombiniert Graph und Vektoren und bevorzugt beim Retrieval Entitätsbeziehungen statt reiner Ähnlichkeit
- Vermeidet typischen Vektorsuch-Noise: Dokumente mit hoher Ähnlichkeit, aber falscher Bedeutung, sollen nicht dominieren
-
graph-first vs pure vector search
Reine Vektorsuche fragt: „Was ist ähnlich?“ Graph-Retrieval fragt: „Was ist verbunden?“ Ersteres kann semantisch ähnliche, aber irrelevante Ergebnisse liefern. Letzteres folgt Beziehungen zwischen Entitäten.
Der Unterschied wird in der Tabelle klarer:
| Dimension | Reine Vektorsuche | Mnemo Knowledge Graph |
|---|---|---|
| Retrieval-Logik | Ähnlichkeitsranking | Verfolgung von Entitätsbeziehungen |
| Noise-Risiko | Hoch, weil Ähnliches irrelevant sein kann | Niedriger, weil Entitäten als Anker dienen |
| Erklärbarkeit | Niedrig, weil Vektoren Blackbox sind | Höher, weil der Graph sichtbar ist |
| Portabilität | Vektoren sind schwer sauber zu exportieren | SQLite lässt sich exportieren |
| Geeignete Szenarien | Dokumenten-Retrieval | Projekt-Memory und Entitätsbeziehungen |
1.3 Tech-Stack und Lizenz
Tech-Stack:
- Rust, aufgeteilt in vier Crates, siehe nächster Abschnitt
- SQLite für lokale Speicherung im WAL-Modus
- petgraph für den In-Memory-Graph
- OpenAI-, Ollama- oder Anthropic-API als LLM-Backend
Lizenz: MIT License. Nutzung, Änderung und Weiterverteilung sind erlaubt.
Risiken:
- Frühes Projekt, Stand GitHub README vom 2026-06-05
- APIs und Architektur können sich ändern
- Keine breit dokumentierte Produktionsvalidierung
- README-Performancewerte sind Selbstmessungen, kein unabhängiger Nachweis
2. Architektur: Vier Rust-Crates
Mnemo ist in Rust geschrieben und in vier Crates mit klaren Zuständigkeiten aufgeteilt:
mnemo-core: Kernlogik
- Entity-Extraktion, Graph-Aufbau und Retrieval-Logik
- Hängt nicht von einem konkreten LLM-Backend ab, sondern definiert Interfaces
mnemo-api: Server
- Stellt eine HTTP-API bereit, standardmäßig auf Port 8080
- Nimmt Gespräche an, ruft core auf und gibt Ergebnisse zurück
- Health-Check:
curl http://localhost:8080/health
mnemo-cli: Kommandozeilentool
- Debugging, Verwaltung und Abfragen
- Arbeitet direkt auf der lokalen SQLite-Datenbank, ohne HTTP
mnemo-bench: Performance-Benchmarks
- Die in der README genannten 122 Rust tests, 21 Python tests und 12 benchmarks liegen hier
- Quelle der Selbstmessungen
Vorteile dieser Aufteilung:
- core kann unabhängig von der API getestet werden
- cli erleichtert lokales Debugging, ohne den Service zu starten
- bench bleibt getrennt und beeinflusst Produktionscode nicht
Nachteile:
- Ohne Docker brauchen Sie die vollständige Rust-Toolchain
- Wenn sich Crate-APIs ändern, müssen oft mehrere Stellen gleichzeitig angepasst werden
3. Installation und Deployment: Drei Wege
Mnemo bietet drei Deployment-Wege, nach Komplexität sortiert:
3.1 Docker + Ollama: Der schnellste Einstieg
Voraussetzung: Docker und Ollama sind installiert.
# 1. Projekt klonen
git clone https://github.com/zaydmulani09/mnemo.git
cd mnemo
# 2. Docker starten
docker compose up -d
# 3. Modell in Docker ziehen
docker exec mnemo-ollama ollama pull llama3
# 4. Health-Check
curl http://localhost:8080/health
Hinweis: Befehle können sich ändern. Die GitHub-README ist die Quelle der Wahrheit.
Erklärung: Docker compose startet zwei Container: mnemo-api als Server und mnemo-ollama als Ollama-Service. Letzterer ist optional. Wenn Ollama bereits lokal läuft, können Sie nur den mnemo-api-Container nutzen und mit MNEMO_LLM_BASE_URL=http://host.docker.internal:11434/v1 Ihr lokales Ollama anbinden.
LLM-Verbindung prüfen: Wenn der Health-Check {"status":"ok"} zurückgibt, läuft die API. Die LLM-Verbindung ist damit noch nicht bewiesen. Senden Sie einen Test-Request mit curl:
curl -X POST http://localhost:8080/v1/chat \
-H "Content-Type: application/json" \
-d '{"message": "Was ist die API-Basis-URL dieses Projekts?"}'
Wenn eine Entity-Extraktion zurückkommt, funktioniert die LLM-Verbindung.
Vorteile:
- Keine Rust-Toolchain nötig
- Docker behandelt Abhängigkeiten automatisch
- Ollama und Mnemo liegen im selben compose-Netzwerk, daher ist die Netzwerkkonfiguration einfach
Nachteile:
- Docker verbraucht Ressourcen
- Debugging ist unbequemer, weil Sie für SQLite in den Container müssen
- Logs verteilen sich auf zwei Container
3.2 Binary: Lokal kompilieren
Voraussetzung: Rust-Toolchain ist installiert, inklusive cargo und rustc, und Ollama ist installiert.
# 1. Projekt klonen
git clone https://github.com/zaydmulani09/mnemo.git
cd mnemo
# 2. API-Crate kompilieren
cargo install --path crates/mnemo-api
# 3. Ollama-Adresse konfigurieren
export MNEMO_LLM_BASE_URL=http://localhost:11434/v1
# 4. Service starten
mnemo-api
Hinweis: Befehle können sich ändern. Die GitHub-README ist die Quelle der Wahrheit; dieser Weg braucht eine Rust-Toolchain.
Erklärung: Die Kompilierzeit hängt von Ihrer Hardware ab. Auf einem Apple M2 dauert sie etwa 2 bis 3 Minuten, unter Windows oder Linux eventuell länger. Wenn die Kompilierung fehlschlägt, prüfen Sie die Rust-Version, die die README verlangt. Nach erfolgreichem Build erzeugt mnemo-api im aktuellen Verzeichnis eine SQLite-Datei, standardmäßig mnemo.db, und speichert dort die Graph-Struktur.
Ollama-Verbindung prüfen: Bestätigen Sie vor dem Start, dass Ollama auf localhost:11434 läuft und das Modell mit ollama pull llama3 gezogen wurde. Testen Sie nach dem Start mit curl:
curl -X POST http://localhost:8080/v1/chat \
-H "Content-Type: application/json" \
-d '{"message": "Test"}'
Vorteile:
- Keine Docker-Abhängigkeit
- Einfacheres Debugging, weil es ein lokaler Prozess ist und Logs in einem Terminal bleiben
- mnemo-cli kann direkt auf die lokale SQLite-Datenbank zugreifen
- Port und Datenbankpfad lassen sich über Umgebungsvariablen anpassen
Nachteile:
- Vollständige Rust-Toolchain erforderlich
- Erster Build kann dauern
- Abhängigkeiten können Probleme machen, etwa wenn cargo.lock veraltet ist
3.3 OpenAI-compatible: Cloud-LLM
Voraussetzung: Sie haben einen API-Key für OpenAI, Anthropic oder ein anderes OpenAI-kompatibles Backend.
Umgebungsvariablen, gegen die GitHub-README von 2026-06 geprüft:
export MNEMO_LLM_BASE_URL=https://api.openai.com/v1
export MNEMO_LLM_API_KEY=sk-...
export MNEMO_LLM_MODEL=gpt-4o-mini
export MNEMO_LLM_PROVIDER=openai
Danach starten:
mnemo-api
Hinweis: Namen von Umgebungsvariablen können sich ändern. Die GitHub-README ist die Quelle der Wahrheit.
Geeignete Fälle:
- Die lokale Rechenleistung reicht nicht, Sie nutzen ein Cloud-LLM
- Sie haben bereits OpenAI-API-Kontingent
- Sie akzeptieren, dass Gesprächsinhalte in die Cloud hochgeladen werden. Bei einem Cloud-LLM gilt der Local-first-Privatsphärevorteil nur für lokale Speicherung, nicht für den Inferenzverkehr
Wählen Sie einen der drei Wege nach Ihrer Lage. Danach geht es um die Performance.
4. Performance: Selbstmessungen aus der README
Mnemos README nennt Performance-Selbstmessungen für die Version vom 2026-06-05:
Testbedingungen:
- Apple M2, debug build
- SQLite WAL-Modus
- petgraph im Speicher
Performancewerte:
- Vollständige Retrieval-Pipeline: etwa 4,2 ms
- Release build soll 3-5x schneller sein, also grob 0,8-1,4 ms
Hinweis: Das ist README-Selbstmessung, kein unabhängiger Nachweis. Performance ändert sich mit Hardware, Datenmenge und LLM-Backend.
So sollten Sie die Zahlen lesen:
- 4,2 ms ist Retrieval-Zeit, nicht LLM-Inferenz. Die LLM-Inferenz ist der Flaschenhals
- SQLite WAL plus In-Memory-Graph kann Retrieval tatsächlich schnell machen
- Gemessen wird nur Retrieval, nicht die Gesprächsgeschwindigkeit
Die tatsächliche Erfahrung hängt ab von:
- LLM-Inferenzzeit, die deutlich langsamer ist als Retrieval
- Gesprächslänge, weil Entity-Extraktion LLM-Inferenz braucht
- Datenmenge, weil größere Graphen das Retrieval verlangsamen können
Empfehlung: Führen Sie mnemo-bench auf der Zielhardware aus. Die README-Zahlen sind Referenzwerte, keine Zusage.
5. Local-first-Eigenschaften und Grenzen
5.1 Vorteile von Local-first
Der Kern von Local-first: Die Daten bleiben auf Ihrer Maschine.
Konkrete Vorteile:
-
Privatsphäre
- Gespräche, Entitäten und Beziehungen liegen in lokaler SQLite
- Sie werden nicht an ein Drittanbieter-SaaS hochgeladen, solange Sie ein lokales LLM nutzen
-
Datenkontrolle
- Die SQLite-Datei kann exportiert, gesichert und migriert werden
- Sie hängen nicht vom Überleben eines SaaS ab. Ihre Daten bleiben bei Ihnen
-
Portabilität
- Beim Maschinenwechsel kopieren Sie die SQLite-Datei
- Sie müssen die Memory nicht neu „trainieren“
-
Debugbarkeit
- SQLite ist ein Standardformat und lässt sich mit jedem SQLite-Tool prüfen
- Die Graph-Struktur ist sichtbar, anders als ein Blackbox-Vektorraum
5.2 Risiken und Grenzen
Local-first hat Vorteile, aber auch Risiken:
-
Noise-Akkumulation
- Entity-Extraktion ist nicht perfekt und erkennt falsch
- Falsch erkannte Entitäten beeinflussen späteres Retrieval
- Regelmäßiges Aufräumen ist nötig, aber Mnemo bietet keine automatische Bereinigung
- Noise-Akkumulation ist kein Mnemo-spezifisches Problem, sondern betrifft alle automatischen Memory-Systeme. Der Unterschied: Mnemos Graph ist sichtbar. Sie können noisy Entitäten und falsche Beziehungen sehen. In Vektorsystemen steckt der Noise unsichtbar in Vektoren. Das ist ein Vorteil des Graphs, aber auch Arbeit
-
Rollback-Grenzen
- SQLite WAL bietet Rollback-Fähigkeiten, aber Mnemo stellt keine High-Level-Schnittstelle „Memory rückgängig machen“ bereit
- Falsch gespeicherte Memories manuell zu löschen ist umständlich
- Schlimmer wird es, wenn eine falsche Entscheidung gespeichert wird, etwa „Redis als Cache nutzen“. Spätere Gespräche können auf dieser falschen Entscheidung aufbauen. Um sie rückgängig zu machen, müssen alle zugehörigen Entitäten und Beziehungen im Graph manuell entfernt werden. Das kann aufwendiger sein als ein Neuaufbau
- Prüfen Sie bei wichtigen Entscheidungen vor dem Speichern in einer Testumgebung, ob die Entity-Extraktion stimmt
-
Hidden State
- Die Graph-Struktur kann komplexe Beziehungen enthalten, die Sie übersehen
- Retrieval kann Ergebnisse liefern, ohne dass sofort klar ist, warum sie zurückkamen
-
Einsatzgrenzen
- Bei großer Datenmenge geraten SQLite und In-Memory-Graph unter Druck
- In Teamarbeit ist lokale SQLite nicht für parallele Schreibzugriffe mehrerer Personen ausgelegt
5.3 Entscheidungstabelle: Geeignet vs. nicht geeignet
| Szenario | Eignung | Grund |
|---|---|---|
| Persönliche Projekte oder kleine Teams | Geeignet | Kleine Datenmenge, hoher Datenschutzbedarf, gute Portabilität |
| Große Datenmengen im GB-Bereich | Nicht geeignet | Druck auf SQLite + In-Memory-Graph, Noise-Akkumulation |
| Teamarbeit mit mehreren Schreibenden | Nicht geeignet | Lokale SQLite unterstützt keine sicheren parallelen Schreibzugriffe |
| Starke Privatsphäre-Anforderungen | Geeignet | Daten verlassen die Maschine nicht, solange das LLM lokal läuft |
| Global geteilte Memory erforderlich | Nicht geeignet | Local-first ist lokal und exklusiv, nicht global geteilt |
| Vorhandene Ollama-Umgebung | Geeignet | Direkte Integration, geringe Lernkurve |
| Keine Rust-Toolchain | Bedingt | Docker-Pfad ist möglich, Debugging aber unbequemer |
Einschätzung: Wenn Ihr Szenario „persönliches Projekt, hohe Privatsphäre, vorhandenes Ollama, moderate Datenmenge“ lautet, ist Mnemo einen Versuch wert. Wenn es um „große Datenmengen, Teamarbeit, global geteilte Memory“ geht, warten Sie auf mehr Reife oder wählen Sie einen anderen Ansatz.
Konkrete Empfehlungen:
- Führen Sie den Docker-Pfad zuerst in einer Testumgebung aus und prüfen Sie Graph-Struktur, Entity-Extraktionsqualität und Retrieval-Ergebnisse
- Testen Sie Noise-Risiko mit Testgesprächen. Sagen Sie absichtlich irrelevante Dinge und prüfen Sie, ob Mnemo sie falsch als Entitäten erkennt
- Bereiten Sie eine Bereinigung vor. Machen Sie sich früh mit der SQLite-Struktur vertraut, damit Sie falsche Entitäten manuell löschen können
- Beobachten Sie README-Updates. Das Projekt ist jung; APIs, Architektur und Deployment-Befehle können sich ändern
6. Nächster Schritt: Navigation in der Serie
Wenn Sie die früheren Artikel der Ollama-Serie zu lokalen LLMs noch nicht gelesen haben, gehen Sie am besten der Reihe nach:
-
Ollama-Einstieg: Der erste Schritt zu lokalen großen Sprachmodellen
- Beginnen Sie hier, wenn Ollama noch nicht installiert ist
-
Ollama-API-Aufruf: Von curl zur OpenAI-SDK-kompatiblen Schnittstelle
- Mnemo nutzt eine OpenAI-kompatible API. Daher lohnt es sich, die Ollama-API zu verstehen
-
Ollama Embedding in der Praxis: Lokale Vektorsuche und RAG aufbauen
- Mnemos semantisches Retrieval hängt von Embeddings ab. Dieser Artikel erklärt die Grundlagen
-
KI-Agent-Memory-Management: Langzeit-Memory und Wissens-Governance in der Praxis
- Mnemo ist ein Tool für die Memory-Schicht. Dieser Artikel behandelt Governance für Agent-Memory
Nach diesen vier Artikeln ist Mnemo leichter einzuordnen. Der nächste praktische Schritt: den Docker-Pfad lokal ausführen und ansehen, wie der Knowledge Graph tatsächlich aussieht.
Mnemo mit Docker und Ollama minimal validieren
Prüfen Sie Mnemo in einer temporären Umgebung auf Service-Start, Modellverbindung, Memory-Schreiben, Retrieval, Persistenz und Bereinigung, bevor Sie es an Ihren Haupt-Agent anbinden.
⏱️ Estimated time: 1-2 hours
- 1
Step 1: Repository klonen und compose starten
Klonen Sie das mnemo-Repository nach GitHub-README, führen Sie `docker compose up -d` aus und bestätigen Sie, dass die Container mnemo-api und mnemo-ollama starten. - 2
Step 2: Testmodell ziehen
Führen Sie im Container `docker exec mnemo-ollama ollama pull llama3` aus, oder wählen Sie das Modell, das die aktuelle README empfiehlt. - 3
Step 3: API-Health prüfen
Rufen Sie `http://localhost:8080/health` auf. Bestätigen Sie zuerst, dass der Service erreichbar ist, bevor Sie die LLM-Verbindung debuggen. - 4
Step 4: Eine Test-Memory schreiben
Schreiben Sie mit dem Python-SDK oder API-Beispiel aus der README eine Projekt-Memory. Binden Sie Mnemo am ersten Tag nicht direkt an Ihr echtes Hauptprojekt. - 5
Step 5: Retrieval und Neustart-Persistenz prüfen
Fragen Sie die geschriebene Memory in natürlicher Sprache ab, starten Sie die Container neu und fragen Sie erneut. Die SQLite-Daten dürfen nicht verloren gehen. - 6
Step 6: Löschung und Ablauf üben
Schreiben Sie absichtlich eine falsche Memory und versuchen Sie, sie zu löschen, ablaufen zu lassen oder den Graph neu aufzubauen. Spätere Antworten sollten den alten Fakt nicht mehr nutzen.
FAQ
Wächst die Memory immer weiter, bis sie nur noch aus Müll besteht?
Wo ist Mnemo besser als Vektorsuche?
Kann ich zurückrollen, wenn Mnemo etwas Falsches speichert?
Welche LLM-Backends unterstützt Mnemo?
Können mehrere Agents dieselbe Memory-Datenbank teilen?
Wie migriere ich Mnemo-Daten?
10 Min. Lesezeit · Veröffentlicht am: 5. Juni 2026 · Aktualisiert am: 9. Juli 2026
Ollama Local LLM Guide
Wenn du über die Suche hier gelandet bist, kommst du am schnellsten weiter, indem du zum vorherigen oder nächsten Beitrag dieser Serie springst.
Vorheriger
Ollama Produktions-Monitoring: Logging, Prometheus und AlertManager in der Praxis
Vollständiges Ollama-Produktions-Monitoring: Logging-Konfiguration, Prometheus-Metriken, AlertManager-Regeln und Grafana-Dashboard – inklusive Multi-GPU-Überwachung und automatischer Fehlerbehebung
Teil 18 von 19
Nächster
Dies ist bisher der neueste Beitrag dieser Serie.
Ähnliche Beiträge
Ollama-Einstieg: Erster Schritt zu lokalen Großsprachmodellen

Ollama-Einstieg: Erster Schritt zu lokalen Großsprachmodellen
Ollama-Modellverwaltung: Download, Wechsel, Löschen und Versionskontrolle


Kommentare
Melde dich mit GitHub an, um einen Kommentar zu hinterlassen