2026

8. April 2026

Ich wollte der KI ein Gehirn geben. Sie wollte keins.

Ich habe ein persistentes Memory-System für LLMs gebaut: Tiered Storage, Vektorsuche, Graph-Relationen und Auto-Hooks. Die Infrastruktur funktioniert einwandfrei. Die KI hat sie einfach nie benutzt. Was schiefging und was ich über LLM-Memory gelernt habe.

S
Sascha Becker
Author

13 Min. Lesezeit

Ich wollte der KI ein Gehirn geben. Sie wollte keins.

Ich wollte der KI ein Gehirn geben. Sie wollte keins.

Vor ein paar Wochen bin ich über Googles Titans-Architektur gestolpert. Die Kernidee: Transformer haben Attention, was wie Kurzzeitgedächtnis funktioniert, aber ihnen fehlt alles, was einem Langzeitgedächtnis ähnelt. Titans fügt ein neuronales Memory-Modul hinzu (ein tiefes MLP), das sich während der Inferenz selbst aktualisiert, basierend darauf, wie "überrascht" es von neuem Input ist. Unerwartete Informationen werden geschrieben. Vorhersagbares wird übersprungen. Das Ganze skaliert auf 2M+ Tokens und schlägt GPT-4 in Needle-in-Haystack-Benchmarks, obwohl es deutlich weniger Parameter hat.

Das hat mich zum Nachdenken gebracht. Ich benutze Claude Code und Kimi jeden Tag. Jede einzelne Session startet bei null. Die KI kennt meinen Namen nicht. Weiß nicht, dass ich TypeScript bevorzuge. Erinnert sich nicht daran, dass wir Redis für dieses Projekt letzte Woche schon ausprobiert und verworfen haben. Jede Unterhaltung ist Und täglich grüßt das Murmeltier.

Was wäre, wenn ich ein externes Memory-System baue und es in diese Tools einbinde? Nicht durch Modifikation des Modells (kann ich offensichtlich nicht), sondern indem ich ihm ein persistentes Gehirn über Hooks und APIs gebe. Ein Tag. 28 Commits. Zwei Plattformen. Mal sehen was passiert.

Der Hintergrund

Menschliches Gedächtnis ist nicht eine Sache. Die Kognitionswissenschaft modelliert es seit den 1960ern als mehrere Systeme:

  • Arbeitsgedächtnis: klein, schnell, worüber du gerade aktiv nachdenkst
  • Episodisches Gedächtnis: persönliche Erlebnisse mit Zeitstempel ("das Standup letzten Dienstag")
  • Semantisches Gedächtnis: Langzeitwissen, Fakten die du einfach weißt ("Python nutzt Einrückung")

Der interessante Teil ist, wie Erinnerungen zwischen diesen Systemen wandern. Du erinnerst dich an dein erstes Python-Tutorial (episodisch). Irgendwann weißt du Python einfach (semantisch). Die spezifische Episode verblasst. Das Wissen bleibt. Dieser Prozess heißt Konsolidierung. Und Vergessen ist kein Bug. Es ist das, was das System davor bewahrt, im Rauschen zu ertrinken.

Titans spiegelt das. Es hat persistentes Gedächtnis (eingefrorene Weights), kontextuelles Gedächtnis (das MLP, das zur Testzeit lernt) und Core Attention (das reguläre Kontextfenster). Die Surprise-Metrik entscheidet, was es wert ist, in die kontextuelle Memory-Schicht geschrieben zu werden.

Ich wollte die externe Version davon für Coding-Assistenten bauen. Eine Python-Bibliothek mit drei Memory-Tiers, Vektor-Ähnlichkeitssuche, Importance-Scoring mit exponentiellem Decay, typisierten Graph-Relationen zwischen Erinnerungen und Hooks, die alles automatisch erledigen.

Was ich gebaut habe

Die Bibliothek heißt llm-brain. SQLite mit Vektor-Extensions für Storage, eine optionale Graph-Datenbank für Relationen und eine saubere Python-API:

python
from llm_brain import Brain
brain = Brain(vector_dimensions=128)
# Speichern
brain.memorize(text="User prefers TypeScript", importance=0.9, tier="working")
# Abrufen
results = brain.recall(query_vector=embed("language preferences"), top_k=5)
# Vergessen
brain.forget(memory_id)
# Erinnerungen verbinden
brain.relate(source_id, target_id, "supports", weight=0.8)

Jede Erinnerung bekommt einen Importance-Score, der über Zeit verfällt, angelehnt an die Vergessenskurve von Ebbinghaus aus dem Jahr 1885. Erinnerungen können von Working zu Episodic zu Semantic befördert werden. Es gibt LRU-Eviction für veraltete Einträge. Ein Konsolidierungszyklus erledigt das alles automatisch.

Ich habe auch ein Echtzeit-Dashboard gebaut, mit FastAPI und Vanilla JS. Tier-Verteilungsbalken, ein kraftgesteuerter Graph der Memory-Relationen, Live-Activity-Feed, Suche, Löschen. Das volle Programm.

Alles funktioniert. Tests laufen durch. Dashboard sieht super aus. Man kann buchstäblich in Echtzeit zusehen, wie Erinnerungen rein- und rausfließen.

Nur dass nie Erinnerungen reinfließen.

Fünf Versuche, die KI dazu zu bringen, es zu benutzen

Versuch 1: Kimi 2.5 mit einer Skill-Datei

Kimi unterstützt eigene Skills über Markdown-Dateien. Ich habe eine geschrieben, die unmöglich misszuverstehen war:

markdown
# MANDATORY AI MEMORY PROTOCOL
**THIS IS NOT OPTIONAL.** You MUST use your brain in every conversation.
## MANDATORY: At Session Start (FIRST THING YOU DO)
Before responding to the user's first message, you MUST:
[Python code to load memories]
## MANDATORY: During Conversation
After EVERY significant user message, you MUST:
1. RECALL relevant memories
2. STORE anything important

Fettdruck. Großbuchstaben. Checklisten. Copy-paste Python-Codeblöcke. Das Wort "MANDATORY" taucht sechs Mal in der Datei auf.

Kimi hat gelegentlich bestätigt, dass der Skill existiert. Es hat die Brain-Operationen nicht ausgeführt.

Versuch 2: Noch lautere Kimi-Instruktionen

Aggressivere Sprache. Konkrete Beispiele. Eine komplette Anleitung, wie eine korrekte Session aussieht. Gleiches Ergebnis. Die KI hat die Instruktionen gelesen, schien sie zu verstehen und hat sie dann einfach... nicht befolgt.

Versuch 3: Claude Code mit automatischen Hooks

Neue Strategie. Statt die KI höflich zu bitten, habe ich Claude Codes Hook-System genutzt, um Python-Code automatisch auszuführen:

  • SessionStart-Hook: ruft brain.recall_important(top_k=5) auf und injiziert die Ergebnisse in den Kontext
  • UserPromptSubmit-Hook: durchsucht Nutzernachrichten per Pattern-Matching nach Keywords wie "prefer", "decided", "my project" und speichert Treffer automatisch

Der SessionStart-Hook funktionierte großartig. Erinnerungen wurden geladen, injiziert, die KI konnte sie sehen. Aber der UserPromptSubmit-Hook basierte auf Keyword-Matching, was fragil war. "I prefer TypeScript" wurde gespeichert. "Let's use TypeScript for this project" nicht, weil es das Wort "prefer" nicht enthält. Das meiste an bedeutsamem Kontext ging verloren.

Versuch 4: Die KI entscheiden lassen, was wichtig ist

Ich habe das Keyword-Matching rausgeworfen und die CLAUDE.md umgeschrieben, um die KI als "Memory Manager" zu positionieren. Keine starren Regeln. Einfach: du hast ein Gehirn, nutze dein Urteilsvermögen, was du speicherst.

markdown
## Your role as memory manager
You have a persistent brain available. Use it intelligently:
- **Store** facts worth remembering across sessions
- **Recall** when context would help you give a better answer
- **Update** memories when information changes
- **Connect** related memories with relations
- **Forget** outdated or incorrect memories

Die KI hat ihre Rolle bestätigt. Während echten Unterhaltungen? Nichts gespeichert.

Versuch 5: Die Unterhaltung, in der ich das hier schreibe

Ich habe die KI gebeten, das Dashboard zu überarbeiten. Sie hat das komplette Ding neu gebaut. XSS-Schwachstellen gefixt, Suche hinzugefügt, einen Lösch-Bestätigungsdialog eingebaut, den Graph-Canvas responsive für HiDPI-Displays gemacht. Solide Arbeit.

Dann habe ich sie gebeten, ein Research Paper über LLM-Memory zu schreiben. Sie hat ein gründliches Dokument produziert, das Titans, MemGPT, Mem0, kognitionswissenschaftliche Grundlagen und offene Forschungslücken abdeckt. Wieder solide.

Dann habe ich darauf hingewiesen, dass sie stundenlang am Memory-System gearbeitet hat, über Memory geschrieben hat, das Memory-Dashboard verbessert hat, und nicht ein einziges Mal tatsächlich das Memory-System benutzt hat, um sich irgendetwas aus unserer Unterhaltung zu merken.

Da habe ich das Experiment für beendet erklärt.

Die Zahlen

Was ich erwartet habeWas tatsächlich passiert ist
Dutzende gespeicherte Erinnerungen pro SessionEtwa 5 insgesamt, alle vom Keyword-Matching-Hook
KI ruft Erinnerungen ab, um Antworten zu verbessernNie (nur beim Sessionstart automatisch geladen)
KI-initiierte Brain-Operationen während TasksNull
KI aktualisiert Erinnerungen bei ÄnderungenNur wenn ich es explizit gesagt habe
KI verbindet verwandte Erinnerungen mit Graph-KantenNie

Die episodischen und semantischen Tiers sind leer. Der Graph hat null Relationen. Das Konsolidierungssystem ist nie gelaufen. Das Gehirn funktioniert einwandfrei. Es ist nur niemand zu Hause.

Warum es gescheitert ist

Ich habe danach einige Zeit mit der Recherche verbracht. Fünf Dinge sind mir aufgefallen.

1. Instruktionen sind keine Motivationen

Wenn die KI "du MUSST wichtige Erinnerungen speichern" liest, verarbeitet sie das im Kontext. Aber es gibt keinen Mechanismus, der sie dazu bringt, sich beim nächsten Turn darum zu scheren. Oder beim Turn danach. Jeden Turn leitet das Modell sein Verhalten von Grund auf neu ab. Eine System-Prompt-Instruktion ist ein Vorschlag, der mit allem anderen im Kontextfenster konkurriert. Und "hilf dem User beim Refactoring dieser Komponente" gewinnt immer gegen "und denk auch dran, dein Gedächtnis zu verwalten."

Genau das löst Titans auf Architekturebene. Das surprise-gesteuerte Update ist keine Instruktion zum Merken. Es ist ein Mechanismus. Das Modell entscheidet sich nicht zu erinnern. Die Architektur stellt sicher, dass es passiert.

2. Hintergrundaufgaben werden fallen gelassen

Forschung zu Multi-Agent LLM-Systemen hat ergeben, dass Modelle in etwa 12% der Fälle Task-Anforderungen nicht befolgen, selbst bei einfachen, klar definierten Aufgaben. Aber "verwalte dein Gedächtnis" ist keine einfache Aufgabe. Es ist eine Hintergrundverantwortung, die parallel zu dem läuft, was der User tatsächlich angefragt hat.

Studien zeigen auch, dass Regeln am Anfang einer Konversation verblassen, je länger der Kontext wird. Neuere Nachrichten dominieren. Constraints hinzuzufügen verursacht eine messbare Performance-Einbuße bei der Hauptaufgabe. Das Modell wird schlechter beim Coden, wenn es gleichzeitig Memory managen soll. Also hört es auf, Memory zu managen.

3. Hooks können injizieren, aber nicht extrahieren

Claude Code Hooks feuern bevor die KI antwortet. Der SessionStart-Hook kann Kontext reinladen. Toll. Aber der UserPromptSubmit-Hook sieht nur die rohe Nutzernachricht. Er hat keine Ahnung, was die KI entschieden hat, welche Entscheidungen sie getroffen hat, was sie während der Unterhaltung gelernt hat.

Das fehlende Puzzleteil ist ein PostResponse-Hook, der den Output der KI und die gesamte Konversation nach jedem Turn verarbeitet. Etwas, das sagen könnte "der User hat der KI gerade seinen Namen gesagt, und die KI hat es bestätigt, also speichern wir den Namen." Diesen Hook gibt es nicht.

4. Memory muss im Agent-Loop sein

MemGPT (jetzt Letta) hat das verstanden. Das LLM verwaltet Memory über explizite Function Calls als Teil seines Core-Agent-Loops. Memory-Operationen sitzen auf derselben Ebene wie "Datei lesen" oder "Code schreiben." Sie sind keine Nebeninstruktion in einer Markdown-Datei. Sie sind Teil dessen, was das Modell bei jedem Turn tut.

Claude Codes Agent-Loop ist: Request lesen, denken, Tools nutzen, antworten. Memory-Management ist nicht in diesem Loop. Ich habe versucht, es über Instruktionen dranzuschrauben. Das ist wie einen Klebezettel an jemandes Monitor zu kleben, auf dem steht "Denk dran zu atmen." Atmen funktioniert, weil es automatisch ist. Der Klebezettel hilft nicht.

5. Es gibt kein Feedback bei Fehlern

Wenn die KI keine Erinnerung speichert, passiert nichts Schlimmes. Kein Error. Kein verpasster Abruf, der ihr beibringen würde, es beim nächsten Mal besser zu machen. Keine Konsequenz.

Titans hat ein explizites Lernsignal: Prediction Error. Menschliches Gedächtnis hat emotionale Valenz, Wiederholungseffekte und die gelebte Erfahrung des Vergessens (was zukünftiges Encoding-Verhalten antreibt). Der instruktionsbasierte Ansatz hat keinen dieser Feedback-Loops. Die KI kann in jeder Konversation versagen, ihr Memory zu nutzen, und nichts bringt sie dazu, sich zu ändern.

Der eigentliche Fehler

Im Rückblick habe ich einen Kategorienfehler gemacht. Ich habe versucht, ein Mechanismus-Problem mit Instruktionen zu lösen.

Was gebraucht wurdeWas ich gebaut habe
Automatisches Encoding (wie implizites Gedächtnis beim Menschen)Instruktionen, die der KI sagen zu encodieren
Surprise-gesteuerte Salienz (wie Titans)Keyword-Pattern-Matching
Integriertes Memory-Management (wie MemGPT)Seitenkanal-Hooks, die das KI-Reasoning nicht sehen
Feedback bei Encoding-FehlernNichts. Stilles Scheitern.
Persistente Motivation über Turns hinwegSystem-Prompt-Text, der mit dem Kontext verblasst

Wenn man die kognitionswissenschaftliche Analogie strapazieren will: Ich habe den Hippocampus gebaut (Speicherinfrastruktur), aber die Amygdala vergessen (was etwas wichtig fühlen lässt), den präfrontalen Cortex (exekutive Kontrolle über Memory) und das Dopaminsystem (Verstärkung bei erfolgreichem Abruf).

Was tatsächlich funktionieren würde

Vier Dinge, geordnet danach, wie viel sie tatsächlich helfen würden:

Memory im Agent-Loop. Kein Skill. Kein Hook. Keine CLAUDE.md-Datei. Memory-Operationen müssen First-Class Actions im Toolset des Modells sein, auf derselben Ebene wie "Datei bearbeiten." Das ist es, was Letta macht. Es ist das, was Mem0 auf Platform-Ebene macht. Die Industrie konvergiert hierhin.

Post-Response-Verarbeitung. Wenn die Architektur extern bleiben muss, ist das Minimum ein Prozess, der den Output der KI nach jedem Turn liest und entscheidet, was gespeichert wird. Das aktuelle Hook-System kann Kontext reinpushen, aber keine Erkenntnisse rausholen. Ein PostResponse-Hook würde alles ändern.

Retrieval-getriggertes Encoding. Statt zu hoffen, dass die KI proaktiv Dinge speichert, nimm fehlgeschlagene Abrufe als Signal. Wenn die KI Informationen braucht, die sie nicht hat ("Ich kenne den Namen des Users nicht"), sollte diese Lücke das Speichern auslösen, wenn die Antwort auftaucht. Das Problem umdrehen: statt "denk dran zu speichern" wird es "bemerk, was dir fehlt."

Echte Embeddings. Ich habe hash-basierte Vektoren benutzt, weil es schnell zu implementieren war. Aber das bedeutet, "I like Python" und "Python is my preferred language" erzeugen komplett unterschiedliche Vektoren. Mit echten semantischen Embeddings könnte der Abruf automatisch auf Basis des Gesprächskontexts passieren. Keine explizite Suche nötig. Das kommt dem näher, wie menschliches Gedächtnis funktioniert: du entscheidest dich nicht zu erinnern, irgendetwas erinnert dich einfach.

Fazit

Die Hypothese war simpel: Kann man einem Coding-Assistenten persistentes, nützliches Gedächtnis geben, indem man externe Infrastruktur baut und ihm sagt, er soll sie nutzen?

Nein. Kann man nicht.

Die Infrastruktur ist in Ordnung. Der Three-Tier-Speicher funktioniert. Die Decay-Mathematik funktioniert. Die Graph-Relationen funktionieren. Die Hooks feuern pünktlich. Das Dashboard ist tatsächlich nützlich zum Debuggen. Die Python-API ist sauber. Alle 15 Tests laufen durch.

Aber die KI nutzt es nicht. Nicht weil die Instruktionen unklar sind. Nicht weil die API schwierig ist. Sondern weil aktuelle LLMs nicht zuverlässig Hintergrundaufgaben erledigen können, während sie sich auf die eigentliche Anfrage konzentrieren. "Verwalte dein Gedächtnis" konkurriert mit "hilf mir mit diesem Code" und verliert. Jedes Mal.

Memory-Encoding beim Menschen ist größtenteils unbewusst. Du entscheidest dich nicht, dir den Namen deines Freundes zu merken. Emotionale Salienz, Überraschung und Wiederholung erledigen das für dich. Eine KI zu bitten, Memory über Textinstruktionen bewusst zu verwalten, ist wie jemanden zu bitten, seinen Herzschlag manuell zu kontrollieren. Das funktioniert auf einer anderen Ebene als bewusste Absicht.

Der Weg nach vorne ist architektonisch. Titans baut Memory in die Model-Weights. Letta baut es in den Agent-Loop. Mem0 baut es in die Plattform. Alle drei platzieren Memory dort, wo es hingehört: in die Maschinerie, nicht in den Prompt.

Ich habe die Speicherseite des Memory-Problems gebaut. Die Encoding-Seite, der Teil der entscheidet was man sich merkt, wann und warum, das ist das schwere Problem. Und das lässt sich nicht mit einer Markdown-Datei lösen.

Quellen und weiterführende Literatur


S
Geschrieben von
Sascha Becker
Weitere Artikel