
Wenn man „KI-Agent mit Gedächtnis“ sagt, stellen sich viele eine einzige Vektordatenbank und magisches Retrieval vor. In der Praxis reicht das fast nie aus.
Bei Wolna, meinem Telegram-Agenten, ist das Gedächtnis wie mehrere verschiedene Schichten aufgebaut. Denn in einem echten Dialog müssen drei Aufgaben gleichzeitig gelöst werden: langfristige Fakten speichern, aktuellen Kontext griffbereit halten und das Modell nicht mit überflüssigen Token überladen.
Das Gedächtnis von Wolna besteht grob aus 4 Teilen:
- Permanente Blöcke in Letta. Das sind zwei Basisblöcke mit jeweils etwa 3.000 Zeichen.
Der erste ist ein Porträt des Nutzers: wer er ist, was er tut, was ihm wichtig ist, welche Interessen und stabilen Kontexte er hat.
Der zweite ist das Profil von Wolna selbst: Kommunikationsstil, Verhaltensregeln, wie sie auf Korrekturen reagiert und was sie im Dialog für wichtig hält.
- Archivgedächtnis. Diese Schicht ist für detaillierte Fakten gedacht, die nicht ständig im Prompt gehalten werden müssen, aber schnell auffindbar sein sollten. Die Suche erfolgt semantisch, darüber gibt es ein Re-Ranking nach Aktualität, damit ein alter, aber ähnlicher Fakt nicht einen aktuelleren überlagert.
- Tägliches episodisches Log. Nach jedem Dialog extrahiert das System kurze Fakten und schreibt sie in eine Markdown-Datei. Dort landen Entscheidungen, Präferenzen, explizite Reaktionen. Beim Start einer neuen Sitzung werden nur die letzten 3 Tage und nur in komprimierter Form in den Kontext zurückgegeben.
- Beziehungsgraph in Neo4j. Separat wird ein Netzwerk von Entitäten aufgebaut: Personen, Projekte, Unternehmen, Themen, Werkzeuge, Ereignisse. Wenn ich in einer Nachricht etwas Bekanntes erwähne, versucht Wolna, die zugehörigen Entitäten und Beziehungen darum herum abzurufen. Im Grunde ist dies keine Schicht des „Faktengedächtnisses“, sondern des „Strukturgedächtnisses“.
Die Kernidee ist, dass diese Schichten nicht gleichmäßig in das Modell eingemischt werden.
Wenn eine Sitzung zurückgesetzt oder der Kontext verkleinert wird, baut Wolna das Bild neu auf. Im normalen Verlauf schleppt sie nicht den gesamten Memory-Dump mit, sondern verwendet einen Basiscache und den dynamischen Kontext der Nachricht.
Das ist sowohl für die Qualität als auch für die Geschwindigkeit wichtig. Wenn man dem Modell immer das gesamte Gedächtnis auf einmal füttert, beginnt es in seiner eigenen Vergangenheit zu ertrinken. Wenn man dagegen nur eine kurze Zusammenfassung behält, geht das Gefühl der Kontinuität im Gespräch verloren.
Besonders gefällt mir, wie die Aktualisierung des Gedächtnisses nach der Antwort funktioniert. Sie erfolgt asynchron im Hintergrund. Das heißt, der Nutzer hat bereits die Nachricht erhalten, während das System parallel mehrere Dinge erledigt:
- Fakten aus dem Austausch extrahieren,
- das tägliche Log ergänzen,
- den Dialog an Letta senden, um das Langzeitgedächtnis zu aktualisieren,
- und den Entitätsgraphen aktualisieren.
Dabei gibt es einige nützliche Begrenzer. Zum Beispiel können zu kurze Austausche gar nicht in die Faktenextraktion gelangen. Und die Anzahl der Fakten hängt von der Länge des Dialogs ab. Das ist eine einfache Sache, schützt das Gedächtnis aber gut vor Müll.
Eine weitere wichtige Schicht sind die Session-Snapshots. Wenn ein Gespräch endet, speichert das System einen kurzen JSON-Snapshot: Zusammenfassung, letzte Äußerungen, Anzahl der Züge, manchmal Beobachtungen zur Stimmung oder zum Verhaltensmuster. Beim nächsten Reset kann dieser Snapshot einmalig in den Kontext zurückgegeben werden, und man hat das Gefühl, dass der Agent nicht „mit einer leeren Tafel aufgewacht“ ist.
Separat hat Wolna eine Reflexionsschicht über dem Gedächtnis.
Wenn eine Frage lautet: „Wie hat sich Vlads Einstellung zur Arbeit verändert?“ oder „Wie ist seine Entwicklung in Bezug auf die Gesundheit?“, ist eine einfache Suche zu schwach: Sie liefert Bruchstücke, aber kein Verständnis.
Dafür gibt es
memory_reflect. Es ruft zunächst eine Reihe relevanter Erinnerungen durch semantische Suche ab, übergibt sie dann an das Modell mit der separaten Aufgabe, aus den verstreuten Aufzeichnungen eine zusammenhängende Erzählung zu erstellen. Am Ende erhält man eine kurze Interpretation von 2–5 Absätzen.Und natürlich muss das Gedächtnis gewartet werden. Sonst wird jedes Memory-System schnell zu einem digitalen Abstellraum. Daher gibt es einen separaten Wartungsprozess.
Kurz gesagt, das Gedächtnis von Wolna ist nicht ein Prompt, nicht eine Datenbank und nicht ein Retrieval. Es ist die Routenführung verschiedener Gedächtnistypen mit unterschiedlicher Lebensdauer, unterschiedlichen Kosten und unterschiedlicher Art der Injektion in den Kontext.
❗️❗️❗️❗️❗️❗️❗️❗️ / Nicht in der Russischen Föderation verboten
Kommentare
0Noch keine Kommentare.
Melde dich an, um mitzudiskutieren.