Ein KI-Assistent, der alles aufschreibt und nie etwas vergisst, liegt irgendwann mit voller Überzeugung falsch. Ich habe das an meinem eigenen Assistenten erlebt. Monatelang habe ich nicht gemerkt, dass die Dateien, aus denen er sein Wissen zieht, nicht mehr stimmten. Der Grund war nicht zu wenig Inhalt. Es stand alles darin, und nie verschwand etwas.

Ich glaube, das betrifft jedes System, das jeden Tag etwas aufschreibt, aber nie verdaut und nie vergisst. Der Fehler meldet sich nämlich nicht. Du merkst ihn erst, wenn du wieder genau hinschaust.

Das Gedächtnis meines Assistenten besteht aus über hundert Markdown-Dateien, also einfachen Textdateien. Jede davon war an ihrem Tag wahr. Zusammen ergeben sie ein Gedächtnis, das mit voller Überzeugung falsch liegt. Diesen Stapel hatte ich einmal den Aktenschrank genannt. Was der Aktenschrank tat, solange ich nicht hineinsah, habe ich erst spät bemerkt.

Mein Assistent las den überholten Plan zuerst

Gemerkt habe ich es an einer Empfehlung. Der Assistent schlug mir vor, ein lokales Modell auf einer bestimmten Maschine laufen zu lassen. Genau diese Maschine hatten wir Monate zuvor dafür ausgeschlossen, sie war zu klein. Diese Entscheidung stand in den Dateien. Der überholte Plan von davor stand auch dort. Gelesen hat der Assistent den überholten zuerst.

Als ich einmal darauf achtete, sah ich es überall. Der Assistent gab eine Entscheidung mit einem Stand wieder, den ich seitdem zweimal korrigiert hatte. Ein Thema lag in fünfzehn Dateien. Die Antwort hing davon ab, welche davon zufällig zuerst gelesen wurde. Nichts davon war kaputt. Es gab keinen Fehler und keine Warnung. Jede einzelne Erinnerung war an dem Tag wahr gewesen, an dem ich sie geschrieben hatte.

Ich nenne das memory rot. Gemeint ist: Wissen, das einmal aufgeschrieben wurde, wird mit der Zeit falsch, und das System wehrt sich nicht dagegen. Das ist kein Bug, sondern der Normalfall. Ein System, das jeden Tag etwas aufschreibt, nie verdaut und nie vergisst, liegt irgendwann falsch, gerade weil es so fleißig mitschreibt.

Der erste Scan fand 64 Probleme

Ich habe mir einen kleinen Scanner gebaut und ihn auf mein eigenes Setup losgelassen. Die erste Zahl war mir unangenehm. Rund 5.300 Tokens landeten in jedem einzelnen Chat, bevor ich ein Wort getippt hatte. Ein Token ist eine kleine Texteinheit. Gemeint ist also Hintergrundtext, den der Assistent in jedem Gespräch automatisch mitliest. Das ist der Teil des Gedächtnisses, der immer geladen wird, und ich hatte ihn nie an einem einzigen Ort aufgelistet gesehen.

Der erste volle Scan fand 64 Probleme. Manche Dateien waren ausdrücklich als verworfen markiert und flossen trotzdem in die Antworten des Assistenten ein. Drei Dateien waren aus der zentralen Übersicht gefallen. Finden konnte sie nur, wer von ihrer Existenz wusste. Dazu kamen Beinahe-Duplikate und tote Links. Und dieselbe Datei lag an zwei Orten, mit zwei Versionen der Wahrheit.

Mein Lieblingsfund hat eine Annahme widerlegt, von der ich nicht wusste, dass ich sie hatte: dass die neueste Datei die richtige ist. Zweimal steckte die reichere, korrekte Version in der älteren Kopie. Das Datum einer Datei sagt also nicht, ob sie stimmt. Das entscheidet der Inhalt.

Die naheliegenden Lösungen scheitern alle an derselben Stelle

Ich habe drei davon nacheinander probiert.

Weniger zu speichern hilft nicht. Über das Speichern lernt das System, wer du bist. Wer es weniger schreiben lässt, bekommt am Ende einen Assistenten, der generisch bleibt.

Altes automatisch zu löschen hilft auch nicht. Ob etwas veraltet ist, hängt an seiner Bedeutung, nicht an seinem Alter. Meine Vorlieben vom März stimmen noch. Ein Projektstand von letzter Woche stimmt womöglich nicht mehr.

Das Aussortieren dem Modell selbst zu überlassen, während es liest, scheitert ebenfalls. Genau das kann es nicht, und es soll es auch nicht können. Ein Modell muss seinem Gedächtnis vertrauen können.

Ein Gedächtnis braucht einen Stoffwechsel

Das Denkmodell, das bei mir schließlich funktioniert hat, ist biologisch. Ein Gedächtnissystem muss drei Dinge gleichrangig können: aufnehmen, verdauen, loslassen. Aufnehmen heißt aufschreiben. Verdauen heißt, Einträge zusammenzuführen und zu korrigieren. Loslassen heißt, Überholtes zu archivieren. Mein System konnte nur das Erste.

Praktisch läuft das bei mir in drei Rhythmen. In jedem Chat schreibe ich frei, aber nach ein paar Schreibregeln. Ich aktualisiere zum Beispiel die bestehende Datei, statt eine zweite daneben anzulegen. Ändert sich ein Fakt, korrigiere ich ihn an Ort und Stelle, statt die neue Version woanders hinzuschreiben.

Jede Woche läuft ein deterministischer Scan, der jedes Mal nach denselben festen Regeln prüft. Er findet Probleme in der Dateistruktur: verwaiste Dateien, tote Links, Duplikate und Dateien, die als überholt markiert sind. Jeden Monat folgt ein kurzes Ritual. Darin destilliere ich abgeschlossene Episoden zu dauerhaftem Wissen und archiviere sie dann.

Zwei Regeln tragen das meiste Gewicht. Erstens wird nie gelöscht. Überholte Dateien werden markiert und wandern in ein Archiv mit eigener Übersicht. So bleibt die Historie auffindbar, ohne irgendetwas zu steuern. Zweitens bekommt jeder Fakt genau eine Heimat-Datei, und alles andere verweist nur dorthin. Ändert sich etwas, gibt es einen Ort zu korrigieren statt fünfzehn.

Eine einzige Zahl zeigt mir, ob das System nur noch aufnimmt. Sie zählt die Tokens, die in jeden Chat geladen werden, bevor ich etwas tippe. Wächst sie Monat für Monat, nimmt das System auf, ohne zu verdauen. Ob der Inhalt stimmt, misst diese Zahl allerdings nicht, nur seinen Umfang.

Eine Korrektur bleibt jetzt bestehen

Das Aufräumen selbst waren drei Aufräum-Chats mit dem Assistenten. Der Scanner meldet Probleme, ich entscheide, was sich ändert, und der Assistent setzt es um. So ging es von 64 Problemen auf null. Dazu habe ich rund sechzig Funde bewusst als in Ordnung markiert, jeden mit schriftlicher Begründung. Seitdem hält der wöchentliche Scan diesen Stand.

Die interessantere Veränderung lässt sich in keine Grafik packen. Mein Assistent liegt nicht mehr mit Überzeugung bei Dingen falsch, die wir längst korrigiert hatten. Stelle ich heute einen Fakt richtig, bleibt er richtig. Die Korrektur landet in der einen Heimat-Datei, und die alte Aussage wird dort markiert, wo sie steht.

Den ganzen Ansatz habe ich als kleinen Field Guide aufgeschrieben. Dazu gehört der Scanner als lesbare Referenz-Implementierung, rund 700 Zeilen Python. Beides liegt auf GitHub: memory-metabolism. Der Guide erklärt den Ansatz. Den Code gibt es, damit du nachprüfen kannst, dass ich nicht nur etwas behaupte.

Fazit

Wer einen Agenten mit Gedächtnis betreibt, dem würde ich zwei Dinge raten. Erstens würde ich zuerst auditieren und erst danach aufräumen. Schon das Wissen, was in jeden Chat geladen wird und was es kostet, verändert, wie du Memory überhaupt schreibst.

Zweitens würde ich von Anfang an damit rechnen, dass Wissen mit der Zeit falsch wird. Das ist kein eigenes Versagen. Es beginnt früher, als du denkst. Bei meinem Setup war es nach etwa drei Monaten so weit.

Am Ende bleibt für mich ein Prinzip. Erinnern, Verdauen und Vergessen brauchen den gleichen Rang, jeweils in ihrem eigenen Rhythmus. Ein System, das nur erinnert, liegt nach genug Monaten falsch, auch über dich.

Weißt du, wie viele Tokens dein Agent in jeden Chat lädt, bevor du etwas tippst? Und wann hast du zuletzt geprüft, ob das Geladene noch stimmt?

Selbst ausprobieren

Der Scanner braucht Python 3.12 und uv. Das Repo bringt einen Demo-Speicher mit. So kannst du ihn ausprobieren, bevor du ihn auf dein eigenes Setup loslässt:

Code
git clone https://github.com/adrianfoehl/memory-metabolism
cd memory-metabolism/memgc
uv sync
uv run memgc audit --config ../examples/demo/memgc.yaml   # was lädt in jeden Chat, und was kostet es?
uv run memgc scan  --config ../examples/demo/memgc.yaml   # veraltet, doppelt, nicht mehr auffindbar

Der Scanner findet nur Kandidaten. Was davon wirklich weg kann, entscheidet ein Mensch.