Memory Layer: Wo Agenten Daten speichern und abrufen

Layer, die relevante Memory zwischen Schritten und Sessions unter Kontrolle von Limits, Qualitaet und Privacy speichert und zurueckgibt.
Auf dieser Seite
  1. Idee in 30 Sekunden
  2. Problem
  3. Loesung
  4. Wie Memory Layer Funktioniert
  5. Im Code sieht es so aus
  6. So sieht es waehrend der Ausfuehrung aus
  7. Wann es passt - und wann nicht
  8. Passt
  9. Passt nicht
  10. Typische Probleme und Ausfaelle
  11. Wie es mit anderen Mustern zusammenspielt
  12. Wie sich das von Agent Runtime unterscheidet
  13. Kurz gesagt
  14. FAQ
  15. Was als Naechstes

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.

Diagram
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

PYTHON
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

TEXT
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

SituationWarum Memory Layer passt
✅Agent arbeitet mit Nutzer ueber mehrere SessionsMemory speichert wichtige Fakten und entfernt wiederholte Rueckfragen.
✅Personalisierung der Antwort wird benoetigtLayer liefert Nutzerpraeferenzen und Einschraenkungen vor dem LLM-Schritt.
✅Agent fuehrt langen multi-step Workflow in einem Run ausLayer haelt Zwischenfazit und wichtige Fakten ohne den Kontext staendig aufzublasen.
✅Kontext waechst schnell und hat LimitsStatt voller Historie bekommt der Agent nur top-k relevante Fakten.

Passt nicht

SituationWarum Memory Layer nicht passt
❌One-shot Anfrage ohne Fortsetzung des DialogsSeparate Memory-Layer fuegt Komplexitaet ohne spuerbaren Nutzen hinzu.
❌Benoetigt werden Fakten mit schneller Aenderung: Preise, Status, Verfuegbarkeit, Live-DatenHier ist fresh retrieval oder tool call besser als Memory-Verlass.
❌Produkt-Policy verbietet Datenspeicherung zwischen SessionsLangzeit-Memory verletzt Privacy- und Compliance-Anforderungen.

In solchen Faellen reicht oft ein Modellaufruf:

PYTHON
response = llm(prompt)

Typische Probleme und Ausfaelle

ProblemWas passiertWie man vorbeugt
Veraltete MemoryAgent nutzt alten Fakt und gibt falsche AntwortTTL, Eintragsversionen und periodische Aktualisierung
Falsche PersonalisierungAgent personalisiert zu selbstsicher auf Basis schwacher oder veralteter MemoryFrischepruefung des Fakts, Confidence-Schwelle und Nutzerklaerung vor Personalisierung
Rauschen in MemoryZu viele schwach nuetzliche Eintraege kommen in den KontextWrite-Regeln, Ranking und top_k-Limit
Leak zwischen NutzernAgent liest Memory eines anderen Nutzers oder TenantsIsolation per user_id/tenant_id und Zugriffschecks
Vergiftete MemoryGefaehrliche oder falsche Anweisung landet in MemorySanitization, vertrauenswuerdige Quellen, manuelle Pruefung kritischer Eintraege
Kontextlimit-OverflowMemory-Volumen im Kontext wird zu gross fuer LLMKompression, 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 RuntimeMemory Layer
Was sie steuertDen gesamten AgentenzyklusMemory-Schreiben, Suche und Qualitaet
Wann sie arbeitetBei jedem Schritt des Execution-LoopsWaerend Memory-Lesen/Schreiben
Was sie zurueckgibtNaechsten Zustand oder finale AntwortRelevante Fakten fuer den Kontext
HauptrisikoFalsche Schleifen- und LimitkontrolleVeraltete, verrauschte oder unsichere Eintraege

Agent Runtime ist der "Dirigent" des gesamten Prozesses.

Memory Layer ist das "Gedaechtnis des Systems", das Antwortkonsistenz stuetzt.

Kurz gesagt

Kurzfazit

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.
⏱ 9 Min. Lesezeit ‱ Aktualisiert 7. MĂ€rz 2026Schwierigkeit: ★★★
Integriert: Production ControlOnceOnly
Guardrails fĂŒr Tool-Calling-Agents
Shippe dieses Pattern mit Governance:
  • Budgets (Steps / Spend Caps)
  • Tool-Permissions (Allowlist / Blocklist)
  • Kill switch & Incident Stop
  • Idempotenz & Dedupe
  • Audit logs & Nachvollziehbarkeit
Integrierter Hinweis: OnceOnly ist eine Control-Layer fĂŒr Production-Agent-Systeme.
Autor

Diese Dokumentation wird von Engineers kuratiert und gepflegt, die AI-Agenten in der Produktion betreiben.

Die Inhalte sind KI-gestĂŒtzt, mit menschlicher redaktioneller Verantwortung fĂŒr Genauigkeit, Klarheit und Produktionsrelevanz.

Patterns und Empfehlungen basieren auf Post-Mortems, Failure-Modes und operativen Incidents in produktiven Systemen, auch bei der Entwicklung und dem Betrieb von Governance-Infrastruktur fĂŒr Agenten bei OnceOnly.