Idee in 30 Sekunden
Memory Layer ist nicht nur ein Faktenspeicher, sondern eine kontrollierte Layer fuer Auswahl, Schreiben und Rueckgabe von Memory.
Der Agent sollte nicht die ganze Historie in jede Anfrage geben. Er liest aus Memory nur, was fuer den naechsten Schritt wirklich hilft. Memory Layer sollte nicht blind alles ansammeln. Ihre Aufgabe ist: wenig, aber treffend zurueckgeben.
Wann noetig: wenn der Agent nicht nur einen Schritt, sondern eine Serie von Schritten oder Sessions bearbeitet, in denen Konsistenz und Personalisierung wichtig sind.
LLM kann nur sehen, was im aktuellen Kontext ist. Memory Layer entscheidet, was aus der Vergangenheit zurueckkommt.
Problem
Ohne separate Memory-Layer arbeitet der Agent fast immer "von null".
Das erzeugt typische Probleme:
- Agent fragt erneut nach, was er schon weiss;
- Antworten werden zwischen Sessions inkonsistent;
- zu viel unnoetige Historie landet im Kontext;
- wichtige Fakten gehen im Rauschen verloren;
- in Memory sammeln sich Duplikate oder konfligierende Versionen desselben Fakts;
- Agent personalisiert Antworten auf Basis veralteter oder schwach bestaetigter Daten.
Ergebnis: Kosten, Latenz und Fehler in Antworten steigen.
Loesung
Memory Layer als separate Layer fuer Memory-Operationen hinzufuegen: was speichern, was in Kontext geben, was loeschen.
Sie trennt die Logik "wie erinnern" von "wie denken", dadurch laeuft der Agent stabiler.
Analogie: wie Notizen eines Managers ueber einen Kunden.
Ein Manager haelt nicht das gesamte Nachrichtenarchiv im Kopf. Er holt kurze relevante Notizen: was fuer dieses Gespraech wichtig ist.
Memory Layer macht dasselbe und liefert dem Agenten nur noetige Memory zum richtigen Zeitpunkt.
Wie Memory Layer Funktioniert
Memory Layer ist eine kontrollierte Layer zwischen Agent Runtime und memory store, die entscheidet, was gelesen, geschrieben und entfernt wird.
Beschreibung des kompletten Flows: Retrieve â Rank â Inject â Write â Compact
Retrieve
Runtime fragt Memory Layer nach Fakten fuer den aktuellen Schritt.
Rank
Layer waehlt die relevantesten Eintraege nach Thema, Aktualitaet und Wichtigkeit.
Inject
Ausgewaehlte Memory wird vor dem LLM-Call in den Kontext eingefuegt.
Write
Nach dem Agentenschritt entscheidet die Layer, ob ein neuer Fakt gespeichert wird, unter Beruecksichtigung von Nutzen, Stabilitaet, Sensitivitaet, Quelle und TTL.
Compact
Alte oder doppelte Eintraege werden nach TTL/Limit-Regeln komprimiert, aktualisiert oder geloescht.
Dieser Zyklus wiederholt sich in jedem Schritt und hilft dem Agenten, zwischen Schritten und Sessions konsistent zu bleiben.
Im Code sieht es so aus
class MemoryLayer:
def __init__(self, store, max_items_per_user=200):
self.store = store
self.max_items_per_user = max_items_per_user
def retrieve(self, user_id: str, query: str, top_k: int = 4):
# Nur relevante Memory zurueckgeben, nicht die ganze Historie.
items = self.store.search(
user_id=user_id,
query=query,
limit=top_k,
min_score=0.7,
exclude_expired=True,
)
return [item["text"] for item in items]
def write(
self,
user_id: str,
observation: str,
tags: list[str],
source: str = "user",
sensitivity: str = "low",
ttl_days: int = 30,
):
if not self._worth_storing(
observation=observation,
tags=tags,
source=source,
sensitivity=sensitivity,
ttl_days=ttl_days,
):
return
self.store.insert(
user_id=user_id,
text=observation,
tags=tags,
source=source,
sensitivity=sensitivity,
ttl_days=ttl_days,
)
self.store.enforce_limit(user_id=user_id, max_items=self.max_items_per_user)
def _worth_storing(
self,
observation: str,
tags: list[str],
source: str,
sensitivity: str,
ttl_days: int,
) -> bool:
text = observation.strip()
if len(text) < 20:
return False
# Kurze Service-Phrasen nicht speichern.
if text.lower() in {"ok", "danke", "erledigt", "fertig"}:
return False
# Sensible Daten nicht in Standard-Memory schreiben.
if sensitivity == "high":
return False
# Nur definierten Quellen vertrauen.
if source not in {"user", "tool", "policy"}:
return False
# Memory muss stabil und nuetzlich sein, nicht zufaelliges Rauschen.
stable_tags = {"preference", "constraint", "profile", "goal"}
if not any(tag in stable_tags for tag in tags):
return False
if ttl_days < 1 or ttl_days > 365:
return False
return True
So sieht es waehrend der Ausfuehrung aus
Anfrage: "Erstelle mir einen Ernaehrungsplan fuer die Woche"
Step 1
Agent Runtime: ruft Memory Layer.retrieve(...) auf
Memory Layer: gibt relevante Fakten zurueck -> ["Erdnussallergie", "vegetarische Ernaehrung"]
Agent Runtime: fuegt diese Fakten in Context ein
Agent Runtime: ruft LLM.decide(...) auf
Step 2
LLM: gibt zurueck -> final_answer (Plan ohne Erdnuesse und Fleisch)
Agent Runtime: uebergibt neue Beobachtung an Memory Layer.write(...)
Memory Layer: speichert Fakt -> "Nutzer will Budget bis $80/Woche"
Memory Layer hilft dem Agenten, Wichtiges nicht zu vergessen und Kontext nicht mit unnoetigen Details zu ueberladen.
Wann es passt - und wann nicht
Memory Layer ist nuetzlich, wenn der Agent Fakten zwischen Schritten oder Sessions erinnern muss. Fuer einmalige Anfragen ist sie oft unnoetig.
Passt
| Situation | Warum Memory Layer passt | |
|---|---|---|
| â | Agent arbeitet mit Nutzer ueber mehrere Sessions | Memory speichert wichtige Fakten und entfernt wiederholte Rueckfragen. |
| â | Personalisierung der Antwort wird benoetigt | Layer liefert Nutzerpraeferenzen und Einschraenkungen vor dem LLM-Schritt. |
| â | Agent fuehrt langen multi-step Workflow in einem Run aus | Layer haelt Zwischenfazit und wichtige Fakten ohne den Kontext staendig aufzublasen. |
| â | Kontext waechst schnell und hat Limits | Statt voller Historie bekommt der Agent nur top-k relevante Fakten. |
Passt nicht
| Situation | Warum Memory Layer nicht passt | |
|---|---|---|
| â | One-shot Anfrage ohne Fortsetzung des Dialogs | Separate Memory-Layer fuegt Komplexitaet ohne spuerbaren Nutzen hinzu. |
| â | Benoetigt werden Fakten mit schneller Aenderung: Preise, Status, Verfuegbarkeit, Live-Daten | Hier ist fresh retrieval oder tool call besser als Memory-Verlass. |
| â | Produkt-Policy verbietet Datenspeicherung zwischen Sessions | Langzeit-Memory verletzt Privacy- und Compliance-Anforderungen. |
In solchen Faellen reicht oft ein Modellaufruf:
response = llm(prompt)
Typische Probleme und Ausfaelle
| Problem | Was passiert | Wie man vorbeugt |
|---|---|---|
| Veraltete Memory | Agent nutzt alten Fakt und gibt falsche Antwort | TTL, Eintragsversionen und periodische Aktualisierung |
| Falsche Personalisierung | Agent personalisiert zu selbstsicher auf Basis schwacher oder veralteter Memory | Frischepruefung des Fakts, Confidence-Schwelle und Nutzerklaerung vor Personalisierung |
| Rauschen in Memory | Zu viele schwach nuetzliche Eintraege kommen in den Kontext | Write-Regeln, Ranking und top_k-Limit |
| Leak zwischen Nutzern | Agent liest Memory eines anderen Nutzers oder Tenants | Isolation per user_id/tenant_id und Zugriffschecks |
| Vergiftete Memory | Gefaehrliche oder falsche Anweisung landet in Memory | Sanitization, vertrauenswuerdige Quellen, manuelle Pruefung kritischer Eintraege |
| Kontextlimit-Overflow | Memory-Volumen im Kontext wird zu gross fuer LLM | Kompression, Deduplikation und kurze Zusammenfassungen statt roher Historie |
Die meisten Memory-Layer-Probleme werden ueber klare Write-Regeln, gutes Ranking und Zugriffskontrolle geloest.
Wie es mit anderen Mustern zusammenspielt
Memory Layer steuert nicht den ganzen Agenten. Sie ist nur fuer qualitativ gute Memory-Arbeit in jedem Schritt zustaendig.
- Agent Runtime â Runtime entscheidet wann Memory abgefragt wird, und Memory Layer entscheidet was gelesen, geschrieben oder geloescht wird.
- Tool Execution Layer â Tool-Calls koennen Memory ueber die kontrollierte Execution-Layer lesen oder aktualisieren.
- Memory-Augmented Agent â dieses Muster basiert direkt auf Memory Layer.
- RAG Agent â RAG holt externes Wissen, waehrend Memory Layer interne Erfahrung des konkreten Agenten/Nutzers haelt.
Anders gesagt:
- Agent Runtime definiert wann der Agent auf Memory zugreift
- Memory Layer definiert was gespeichert und was zurueckgegeben wird
Wie sich das von Agent Runtime unterscheidet
| Agent Runtime | Memory Layer | |
|---|---|---|
| Was sie steuert | Den gesamten Agentenzyklus | Memory-Schreiben, Suche und Qualitaet |
| Wann sie arbeitet | Bei jedem Schritt des Execution-Loops | Waerend Memory-Lesen/Schreiben |
| Was sie zurueckgibt | Naechsten Zustand oder finale Antwort | Relevante Fakten fuer den Kontext |
| Hauptrisiko | Falsche Schleifen- und Limitkontrolle | Veraltete, verrauschte oder unsichere Eintraege |
Agent Runtime ist der "Dirigent" des gesamten Prozesses.
Memory Layer ist das "Gedaechtnis des Systems", das Antwortkonsistenz stuetzt.
Kurz gesagt
Memory Layer:
- speichert wichtige Fakten zwischen Schritten und Sessions
- gibt nur relevante Eintraege in den Kontext zurueck
- komprimiert oder loescht veraltete Memory nach Regeln
- schuetzt Daten durch Zugriffsisolation und Write-Regeln
FAQ
Q: Reicht es nicht, die ganze Historie in den Prompt zu geben?
A: Fuer kurze Szenarien manchmal ja. In langen Dialogen ist das aber teuer, langsam und verrauscht. Memory Layer liefert kurze relevante Memory statt vollem Log.
Q: Worin unterscheidet sich short-term von long-term Memory?
A: Short-term wird fuer den aktuellen Run oder die Session gebraucht. Long-term speichert wichtige Fakten zwischen Sessions und wird spaeter wiederverwendet.
Q: Kann man jeden Agentenschritt in Memory schreiben?
A: Technisch ja, aber schlechte Praxis. Besser nur nuetzliche Fakten nach Write-Regeln speichern, sonst wird Memory schnell zu Rauschen.
Q: Ersetzt Memory Layer RAG oder Tool-Calls?
A: Nein. Memory Layer speichert interne Fakten und Erfahrung des Agenten/Nutzers. Fuer frische externe Daten sind meist retrieval oder Tool-Calls noetig.
Was als Naechstes
Memory ist nur dann nuetzlich, wenn sie kontrolliert bleibt. Als Naechstes sieh dir an, wo Memory mit Ausfuehrung und Policy verbunden wird:
- Agent Runtime - wie runtime Memory in jede Iteration einbindet.
- Multi-Tenant - wie Kontext und Daten zwischen Kunden nicht vermischt werden.
- Policy Boundaries - wie Zugriff auf sensible Memory begrenzt wird.
- Production Stack - wie Memory-Qualitaet, Audit und operativer Kontrollrahmen zusammenkommen.