Dreidimensionales Gedächtnissystem
Überblick
Das Gedächtnissystem des Arbeitsbereichs verwendet eine dreidimensionale Architektur und speichert und verwaltet Wissen in den drei Dimensionen Konto, Unternehmen und Sitzung. Das Gedächtnis ist tief in die Konversation integriert – bei jeder Konversation werden relevante Erinnerungen abgefragt und in den Kontext eingespeist, und nach jedem Interaktionsdurchgang werden automatisch neue Erinnerungen extrahiert.
Technische Grundlage: mem0 REST API + Neo4j-Wissensgraph.
Dreidimensionale Architektur
| Dimension | Geltungsbereich | Schreibweise | Verwaltungsrechte | Konversationseinspeisung |
|---|---|---|---|---|
| Kontoebene | userId (organisationsübergreifend) | Manuelles Hinzufügen + automatische Extraktion aus der Konversation | Vom Benutzer selbst verwaltet | „Benutzerprofil" wird in den System-Prompt eingespeist |
| Unternehmensebene | orgId (organisationsisoliert) | Manuelle Pflege durch Administrator | Nur Administratoren des Arbeitsbereichs | „Unternehmensprofil" wird in den System-Prompt eingespeist |
| Sitzungsebene | runId (einzelne Sitzung) | Automatische Extraktion in jedem Durchgang | Automatisch verwaltet | Semantische Abfrage innerhalb der Sitzung |
Gedächtnis auf Kontoebene
- Organisationsübergreifende Freigabe: An userId gebunden, in allen Organisationen des Benutzers verfügbar
- Schreibweise:
- Manuell: Über die Gedächtnisverwaltungsoberfläche oder per Befehl in der Konversation hinzufügen
- Automatisch: In der Konversation werden merkenswerte Informationen automatisch erkannt
- Verwaltungsoberfläche: APP-Einstellungen → Gedächtnis
- Detaillierte Dokumentation: Gedächtnisverwaltung
Gedächtnis auf Unternehmensebene
- Organisationsisolation: An orgId gebunden, nur für Mitglieder der aktuellen Organisation sichtbar
- Verwaltungsrechte: Nur Administratoren des Arbeitsbereichs können es pflegen
- Verwaltungsoberfläche: Bereichsverwaltung → Erweiterte Einstellungen → Unternehmensgedächtnis
- Detaillierte Dokumentation: Erweiterte Einstellungen – Unternehmensgedächtnis
Gedächtnis auf Sitzungsebene
- Einzelne Sitzung: An runId gebunden, nur innerhalb der aktuellen Sitzung gültig
- Extraktion in jedem Durchgang: Nach jedem Konversationsdurchgang werden automatisch Erinnerungen analysiert und extrahiert
- Keine Verwaltung erforderlich: Das System verarbeitet dies automatisch
Mechanismus der Gedächtnisextraktion
Explizite Befehle (Konfidenz 0,99)
Der Benutzer fordert den Agent direkt auf, Informationen zu merken oder zu vergessen:
| Aktion | Auslöse-Schlüsselwörter |
|---|---|
| Gedächtnis hinzufügen | „merken", „notieren", „Gedächtnis speichern", „im Gedächtnis speichern", „remember", „store in memory" |
| Gedächtnis löschen | „Gedächtnis löschen", „vergiss", „vergessen", „forget this", „remove from memory" |
Implizite Erkennung (Konfidenz 0,5–0,93)
Das System erkennt persistente Fakten in der Konversation automatisch über reguläre Ausdrucksmuster:
| Signaltyp | Beispiel | Konfidenz |
|---|---|---|
| Persönliches Profil | „Ich heiße Zhang San", „Ich bin Frontend-Entwickler", „my name is" | 0,93 |
| Persönlicher Besitz | „Ich habe eine Katze", „Ich halte", „I own" | 0,90 |
| Persönliche Präferenz | „Ich verwende gerne TypeScript", „I prefer" | 0,88 |
| Assistentenstil | „Bitte antworte künftig auf Chinesisch", „always use", „Präferenz für das Antwortformat" | 0,86 |
Konfidenzschwellen
| Modus | Schwellenwert | Beschreibung |
|---|---|---|
| strict | 0,85 | Konservativer Modus, extrahiert nur Erinnerungen mit hoher Konfidenz |
| standard (Standard) | 0,65 | Ausgewogener Modus |
| relaxed | 0,50 | Aggressiver Modus, mehr Inhalte werden gemerkt |
Automatische Ausschlussregeln
Die folgenden Inhalte werden nicht als Erinnerungen extrahiert:
- Reine Fragen (mit Fragezeichen endend, mit Fragewort beginnend)
- Smalltalk/Begrüßungsfloskeln
- Inhalte in Codeblöcken
- Zeitkritische/zeitgebundene Informationen (Datum, Nachrichten, temporäre Zustände)
- Nicht persistente Themen (Bug-Berichte, Fehlermeldungen)
Wissensgraph
Backend-Speicherung (Neo4j)
Gedächtnisbeziehungen werden in Form von Tripeln in der Neo4j-Graphdatenbank gespeichert:
(source Entität) --[relationship]--> (target Entität)
N-Hop-Nachbarschaftsabfrage (1–4 Hops):
MATCH path = (n {name: $entity})-[*1..depth]-(m)
WHERE ALL(node IN nodes(path) WHERE node.user_id = $user_id)
UNWIND relationships(path) AS rel
RETURN source, relationship, target
Die Cypher-Abfrage stellt sicher, dass niemals Benutzergrenzen überschritten werden.
Frontend-Visualisierung
Verwendung von react-force-graph-2d zur Darstellung eines kräftegerichteten Graphen:
| Knotentyp | Farbe | Beschreibung |
|---|---|---|
| Hub | Violett #6d28d9 |
Zentraler Knoten von Benutzer/Organisation |
| Fact | Blau #2563eb |
Gedächtniseintrag |
| Entity | Bernsteinfarben #f59e0b (Standard) |
Extrahierte Entität; die konkrete Farbe wird per djb2-Hash auf eine 10-Farben-Palette abgebildet |
Optimierung des Graph-Renderings (Update 2026-04) NEW
Die neue Version des Graphen führt zwei Dichte-Schwellenwerte ein, um zu vermeiden, dass sich bei zu vielen Knoten die Beschriftungen überlappen:
| Schwellenwert-Konstante | Wert | Bedeutung |
|---|---|---|
PILL_READABILITY_MIN_SCALE |
1.5 | Bei einer Skalierung kleiner als 1,5x werden keine Textbeschriftungen gerendert |
PILL_MIN_SCREEN_AREA_PER_NODE |
3000 | Wenn die Bildschirmfläche pro Knoten weniger als 3000 Pixel beträgt, werden keine Beschriftungen gerendert |
Erst wenn beide Bedingungen gleichzeitig erfüllt sind, werden Beschriftungen angezeigt. Andernfalls werden nur Punkte gerendert.
Stabilisierung der Entity-Type-Farben:
- Über den
djb2-Hash wird der Entitätstyp → Farbindex berechnet - Entitäten desselben Typs behalten in verschiedenen Ansichten und zu verschiedenen Zeitpunkten stets dieselbe Farbe
- Die 10-Farben-Palette unterstützt die zyklische Wiederverwendung für unbegrenzt viele Typen
Bug-Fix: Bei der Zuordnung der Graphbeziehungen wurden die Felder sourceTypes / targetTypes zuvor verworfen, sodass alle Knoten auf die graue Fallback-Farbe zurückfielen. Dieser Bug wurde behoben (siehe sidecar/src/mem0Service.ts).
Mehrstufiges Drill-down
Durch Klicken auf einen Knoten lassen sich dessen zugehörige Entitäten aufklappen und das Wissensnetz Schicht für Schicht vertiefen. Die Graph-Engine unterstützt:
neighborhood()– N-Hop-NachbarschaftsabfrageshortestPath()– kürzester Pfad zwischen zwei EntitätenextractEntitiesFromText()– Extraktion von Entitätsnamen aus Text
Zusammenspiel von Gedächtnis und Konversation
Zeitpunkte der Gedächtnisabfrage
| Zeitpunkt | Aktion |
|---|---|
| Neue Konversation | Abfrage des Kontoprofil-Gedächtnisses + Unternehmensprofil-Gedächtnisses, Zusammenfügen im System-Prompt |
| Benutzer sendet Nachricht | Das Werkzeug memory_query ruft relevante Erinnerungen semantisch ab |
| Grapherweiterung | searchWithGraphExpansion – semantischer Abruf + 1-Hop-Grapherweiterung, gibt relevante Entitäten und Kanten zurück |
Einspeiseposition des Gedächtnisses
Im System-Prompt werden zwei Gedächtnisprofile eingespeist:
Du bist der GPTBots-KI-Assistent...
## Benutzerprofil
- Der Benutzer ist Frontend-Entwickler
- Bevorzugt die Verwendung von TypeScript
- ...
## Unternehmensprofil
- Das Unternehmen verwendet den React-Technologie-Stack
- Projektcode Project Alpha
- ...
Gedächtniswerkzeuge
Der Agent kann über die folgenden Werkzeuge aktiv Erinnerungen abfragen und verwalten:
| Werkzeug | Aktion | Beschreibung |
|---|---|---|
| memory_query | list / search / graph_traverse | Auflisten, semantische Suche, Graphdurchlauf |
| memory_manage | add / update / delete | Erinnerungen hinzufügen, ändern, löschen |
| conversation_search | search | Historische Konversationen durchsuchen |
| recent_chats | list | Aktuelle Konversationen auflisten |
Kontoübergreifende Gateway-Isolation NEW
Wenn ein Knoten mit Enterprise-Geltungsbereich kontoübergreifend aufgerufen wird:
- Gedächtnis auf Kontoebene (userId-gebunden): ❌ nicht zugänglich
- Gedächtnis auf Unternehmensebene (orgId-gebunden): ✅ zugänglich
- Gedächtnis auf Sitzungsebene (innerhalb dieser Sitzung): ✅ zugänglich
Über das Flag isRemoteSession wird in der Abfragephase von mem0Service eine zwangsweise Filterung durchgesetzt – kontoübergreifende Aufrufe können die persönlichen Erinnerungen des Eigentümers des Zielknotens nicht lesen.
Designziel: Schutz der persönlichen Privatsphäre bei gleichzeitiger uneingeschränkter kollaborativer Freigabe von Wissen auf Organisationsebene. Siehe Multi-Knoten-Architektur.
mem0-Fähigkeiten
Das Gedächtnis-Backend bietet auf Basis von mem0 die folgenden Automatisierungsfähigkeiten:
| Fähigkeit | Beschreibung |
|---|---|
| Automatische Aktualisierung | Neue Informationen überschreiben alte Informationen (z. B. „Ich mag Python" → „Ich mag TypeScript") |
| Automatisches Zusammenführen | Ähnliche Erinnerungen werden zu einem vollständigeren Eintrag zusammengeführt |
| Automatisches Vergessen | Bei widersprüchlichen Informationen werden alte Versionen automatisch bereinigt |
Timeout-Schutz
| Aktion | Timeout |
|---|---|
| Gedächtnisabfrage/-verwaltung | 25 Sekunden |
| Operationen des Gedächtnisses auf Sitzungsebene | 5 Sekunden (schnelles Timeout, blockiert die Konversation nicht) |
| Abruf von Graphbeziehungen | 3 Sekunden (nach Timeout elegantes Herabsetzen) |
Was das für den Benutzer bedeutet
Das Gedächtnissystem ermöglicht es dem Agent, „dich zu kennen". Ohne Gedächtnis ist der Agent bei jeder Konversation wie ein Fremder beim ersten Treffen; mit Gedächtnis kennt der Agent deine Präferenzen, deinen Projekthintergrund und deine Arbeitsgewohnheiten.
Wie sich die drei Dimensionen in der Praxis zeigen:
- Kontogedächtnis: „Du hast gesagt, du magst TypeScript" → Der Agent verwendet in den Konversationen aller Organisationen bevorzugt TypeScript
- Unternehmensgedächtnis: Der Administrator hat „Das Unternehmen verwendet die PostgreSQL-Datenbank" hinzugefügt → Wenn alle Mitglieder der Organisation mit dem Agent über Datenbanken sprechen, empfiehlt der Agent standardmäßig eine PostgreSQL-Lösung
- Sitzungsgedächtnis: Du sagst in dieser Konversation „Das aktuelle Projekt heißt Project Alpha" → In dieser Konversation merkt sich der Agent das, in einer neuen Konversation nicht unbedingt
So kannst du das Gedächtnis verwalten:
- Für persönliche Präferenzen: Sage in der Konversation „Merke dir, dass ich das Dark-Theme bevorzuge", oder füge es unter APP-Einstellungen → Gedächtnis manuell hinzu
- Für Unternehmenswissen: Wende dich an den Administrator, damit es unter Bereichsverwaltung → Erweiterte Einstellungen → Unternehmensgedächtnis hinzugefügt wird
- Wenn du feststellst, dass eine Erinnerung falsch ist: Sage in der Konversation „Vergiss die frühere Präferenz zu Python", oder lösche sie direkt in der Gedächtnisverwaltung
- Vorhandene Erinnerungen ansehen: Unter APP-Einstellungen → Gedächtnis kannst du die Liste und den Graphen durchsehen
Verwandte Dokumentation
- Gedächtnisverwaltung – Gedächtnisverwaltungsoberfläche auf APP-Seite
- Erweiterte Einstellungen – Unternehmensgedächtnis – Verwaltung des Gedächtnisses auf Unternehmensebene
- Werkzeugverwaltung – gedächtnisbezogene Werkzeuge (memory_query, memory_manage)
- Multi-Knoten-Architektur – Mechanismus der kontoübergreifenden Gateway-Isolation
