Die meisten Gedächtnis-Benchmarks fragen, ob ein Agent das Richtige erinnert. Kaum einer stellt die Frage, die eine Prüferin wirklich umtreibt: Was wusste der Agent zum Zeitpunkt T — und stimmte das damals?
Das Gedächtnis eines Agenten kann auf eine subtilere Weise fehlschlagen als durch Halluzination: es kann anachronistisch sein. Er handelt auf der Grundlage einer Tatsache, die letzten Monat galt und jetzt falsch ist. Eine Adresse ändert sich, ein Preis wird überholt, eine Richtlinie wird zurückgezogen. Ein Gedächtnissystem, das den alten Wert einfach überschreibt, verliert die Fähigkeit zu erklären, warum der Agent letzte Woche tat, was er tat — und genau in dem Moment, in dem etwas schiefgeht, braucht man diese Erklärung.
Zwei Fragen ziehen in entgegengesetzte Richtungen. „Was gilt jetzt?" will Latest-wins-Semantik: die neueste Tatsache ersetzt die alte. „Was glaubten wir zum Zeitpunkt T?" will As-of-Semantik: die Welt rekonstruieren, wie der Agent sie in diesem Augenblick sah. Reine Vektor-Speicher beantworten die erste durch Überschreiben; die zweite können sie gar nicht beantworten, weil das alte Embedding beim Schreiben des neuen zerstört wurde.
Die Lösung besteht darin, Zeit nicht länger als eine einzige Achse zu behandeln. Bi-temporale Systeme führen zwei unabhängige Zeitachsen: die Gültigkeitszeit — das Fenster, in dem eine Tatsache in der Welt galt — und die Transaktionszeit — das Fenster, in dem das System selbst diesen Datensatz hielt. Die erste beantwortet „wann war das so?", die zweite „wann haben wir es erfahren?".
Zeps Graphiti-Engine macht das konkret, indem sie auf jeder Kante vier Zeitstempel speichert:
| Feld | Zeitachse | Bedeutung |
|---|---|---|
t_valid | Gültigkeitszeit | wann die Tatsache in der Welt wahr wurde |
t_invalid | Gültigkeitszeit | wann sie aufhörte, wahr zu sein |
t_created | Transaktionszeit | wann das System sie aufnahm |
t_expired | Transaktionszeit | wann das System sie ablöste |
Wenn neue Information einer bestehenden Kante widerspricht, deren Gültigkeitsintervall sich überschneidet, löscht das System die alte Kante nicht — es invalidiert sie, indem es t_invalid der alten Kante auf t_valid der neuen setzt. Die neue Tatsache gewinnt fortan; die alte bleibt bestehen, zeitlich begrenzt. Nichts geht verloren, sodass der Graph historische Fragen weiterhin beantworten kann.
Mit diesen Kanten wird aus „Was glaubte der Agent zum Zeitpunkt T?" eine gewöhnliche Intervallabfrage statt eines Rekonstruktionsprojekts.
// Was glaubte der Agent am 1. September 2026 über Alices Arbeitgeber?
MATCH (a:Entity {name: 'Alice'})-[r:WORKS_FOR]->(o:Entity)
WHERE r.t_valid <= datetime($asOf)
AND (r.t_invalid IS NULL OR datetime($asOf) < r.t_invalid)
RETURN o.name AS arbeitgeber, r.t_valid AS seit
Dieselbe Form rekonstruiert einen ganzen Überzeugungszustand — jede zum Zeitpunkt $asOf gültige Kante —, was man abspielt, um sechs Wochen später „warum tat der Agent das?" zu beantworten. Ein Latest-only-Speicher hat kein Gegenstück; die Antwort wurde überschrieben.
Zep und Graphiti melden messbare Zugewinne gegenüber einer zustandslosen Basis, und das Zeitmodell ist der Grund: Die Suche kann vor dem Ranking nach Gültigkeitsfenster filtern, sodass veraltete Tatsachen gar nicht erst in den Kontext gelangen.
| System | DMR (Genauigkeit) | LongMemEval |
|---|---|---|
| MemGPT | 93,4% | Basislinie |
| Zep / Graphiti | 94,8% | bis zu +18,5% Genauigkeit, −90% Latenz |
Die Suche selbst ist hybrid — Vektorähnlichkeit, BM25 und Graph-Traversierung — bewusst ohne LLM im Reranking-Loop, damit die Latenz planbar bleibt. Das ist kein Einzelentwurf: Engram modelliert Agentengedächtnis als bi-temporale Engine, DYNA paart episodische Gedächtnisnetze mit temporalen Graphen, und TVA und PETGraphDB adressieren versionsbewusste Speicherung direkt. Die Richtung konvergiert.
Hier wird es unangenehm. Die Agentengedächtnis-Literatur hat eine dokumentierte Lücke: Es gibt keine Benchmark, die zeitliches Schließen — „was wusste der Agent zum Zeitpunkt T?" — neben den üblichen Recall- und Genauigkeitswerten bewertet. Ebenso fehlt ein Standard für multimodales Agentengedächtnis und für das Teilen von Gedächtnis zwischen mehreren Agenten. Das Werkzeug ist der Messung davongelaufen.
Eine Benchmark, die diese Lücke schließt, müsste mindestens fünf Verhaltensweisen bewerten:
Bestehende Benchmarks messen, ob der Agent die aktuelle Antwort erinnert. Sie bestrafen keinen Anachronismus — selbstsicheres Handeln auf einer letzte Woche abgelaufenen Tatsache —, und genau das ist der Fehlermodus, der Audits tatsächlich zum Kippen bringt.
Bi-temporales Gedächtnis ist nicht kostenlos. Der Speicher wächst, weil jede Kante vier Zeitstempel und ihre überholte Historie trägt. Abfragen werden schwieriger: Intervallprädikate unterlaufen naive Indizes für Punktabfragen, man braucht zeitbewusste Speicherung. Die Eingabereihenfolge zählt: Transaktionszeit verlangt eine monotone Uhr, und wenn Ereignisse außer der Reihe eintreffen, muss die Gültigkeitszeit rekonstruiert statt zugewiesen werden.
Und der Invalidierungsschritt ist nur so gut wie sein Widerspruchsdetektor, der bei Zep ein LLM ist. Eine falsche Invalidierung ist teuer — sie pensioniert eine Tatsache, die noch galt — und schwer zu bemerken, weil der Graph danach gesund aussieht. Behandeln Sie die Invalidierung wie jede andere modellgetriebene Mutation: protokollieren, umkehrbar machen, stichprobenartig prüfen.
Fügen Sie die zweite Zeitachse hinzu, bevor Sie das Audit brauchen. Ein bi-temporaler Graph verwandelt „Was weiß der Agent?" in „Was wusste der Agent, wann und warum?" — die Version der Frage, die Debugging, Vorfallanalyse und Aufsicht gleichermaßen stellen. Die Engine existiert; was fehlt, ist eine Benchmark, die es nicht belohnt, gestern gefragt und heute geantwortet zu haben.