Startseite / Artikel / Kurze Fenster, lange Erinnerungen: Aufbau externer Abrufmechanismen für LLM-Agenten

Kurze Fenster, lange Erinnerungen: Aufbau externer Abrufmechanismen für LLM-Agenten

Kontextgrenzen, Vektor-LTM, Entwürfe für LangChain-Buffer+Retriever, hybride Speicher sowie Sicherheit, Privatsphäre und Skalierbarkeit in der Produktion.

1952 Wörter

Kontextfenster sind kurzfristiger RAM, keine Lebensgeschichte

Für große Sprachmodelle ist das Kurzzeitgedächtnis das Kontextfenster: Anweisungen, die neueste Abfrage sowie alle Informationen, die in einer Anfrage Platz finden. Nachdem der Aufruf abgeschlossen ist, speichert das Modell selbst nichts, es sei denn, die Anwendung sendet den vorherigen Text erneut. Größere Fenster helfen – fortschrittliche Systeme bieten Hunderttausende bis etwa eine Million Token an – doch Kosten und Latenz steigen mit jedem zusätzlichen Token, und lange Eingaben leiden unter dem Problem, dass „der Mittelteil verloren geht“, da Modelle die Ränder besser wiedergeben können als den Mittelpunkt.

Bevor vollständiges Langzeitgedächtnis verfügbar ist, fassen Teams oft frühere Nachrichten zusammen oder behalten nur die letzten k Nachrichten. Zusammenfassungen verringern die Anzahl der Token; schräg verlaufende Fenster sind einfach, führen aber zum Verlust früherer Einschränkungen.

Warum Agenten eine langlebige externe Speicherung benötigen

Ein Agent, der nur dem Fenster vertraut, vergisst Präferenzen über Sessions hinweg und verliert die Einschränkungen für lange Aufgaben. Das Langzeitgedächtnis ist ein dauerhafter, suchbarer Speicher, der um das Modell herum aufgebaut ist: Benutzerprofile, gelernte Fakten sowie Zusammenfassungen früherer Arbeiten. Das Kurzzeitgedächtnis sorgt dafür, dass ein einzelnes Gespräch kohärent bleibt; das Langzeitgedächtnis ermöglicht eine langlebige Abrufbarkeit. Retrieval-augmented Generation (RAG) ist das übliche Muster – relevante Auszüge werden abgerufen, in die Anfrage eingefügt und das Modell darf ohne das Hineinpacken aller Informationen in die Parameter logisch arbeiten.

Vektordatenbanken als Rückgrat

Der Text wird zu Embedding-Vektoren; Suchverfahren nach Ähnlichkeit (Kosinus, euklidisch und ähnliche) finden Nachbarn im semantischen Raum – nicht nur Ergebnisse basierend auf Schlüsselwörtern. Lebenszyklus: Neue Beobachtungen zusammen mit Metadaten einbetten und speichern; den neuen Prompt einbetten und die top-k Ergebnisse abrufen; den Prompt erweitern und generieren. Die Gestaltungsoptionen sind entscheidend: Rohdaten der Gesprächsschritte speichern (getreu, mit Störungen) gegenüber von von LLMs verfassten Zusammenfassungen (kompakt, mit Verlusten) sowie extrahierten Entitäten. Die Speicherung kann bei jedem Gesprächsschritt, am Ende der Sitzung oder über asynchrone Filter ausgelöst werden. Die Qualität der Embeddings, Indexe im HNSW-Stil sowie die Abrufzeit bestimmen maßgeblich, wie reaktiv das System wirkt, noch bevor die Generierung beginnt.

LangChain-Entwurf: Puffer plus Abrufmechanismus

Aus Sicht des Kurzzeitgedächtnisses: ConversationBufferMemory behält die aktuelle Transkription im Prompt bei.

from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
from langchain_openai import OpenAI

# 1. Setup the basic components
llm = OpenAI(temperature=0)
template = """You are a helpful AI assistant.

{history}
Human: {input}
AI:"""
prompt = PromptTemplate.from_template(template)

# 2. Instantiate short-term memory
memory = ConversationBufferMemory(memory_key="history")

# 3. Create the memory-enabled chain
conversation_chain = LLMChain(
    llm=llm,
    prompt=prompt,
    memory=memory,
    verbose=False # Set to True to see the constructed prompt
)

# First interaction
conversation_chain.predict(input="Hi, my name is Alex.")
# Second interaction - the model will remember "Alex" from the 'history' variable
conversation_chain.predict(input="What's my name?")

Langefristige Variante: VectorStoreRetrieverMemory im Vergleich zu Redis, Chroma oder ähnlichen Systemen holt semantisch verwandte frühere Dokumente ab.

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.memory import VectorStoreRetrieverMemory

# Assume 'docs' is a list of LangChain Document objects loaded from a persistent source.
# For this sketch, we'll use an in-memory FAISS vector store.
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))

# 4. Instantiate long-term memory
long_term_memory = VectorStoreRetrieverMemory(
    retriever=retriever,
    memory_key="relevant_docs" # Use a different key for long-term context
)

Kombinieren Sie beides im Prompt-Template – aktuelle Historie plus relevant_docs – damit die Kette die Dokumente abruft, den Chat lädt, formatiert und anschließend das Modell aufruft.

The following is a friendly conversation between a human and an AI.

Relevant pieces of information from past conversations:
{relevant_docs}

Current conversation:
{history}
Human: {input}
AI:

Führen Sie Debugging durch, indem Sie herausfinden, was das Modell tatsächlich gesehen hat: verbose=True, protokollieren Sie die abgerufenen Teile und überprüfen Sie das Speicherobjekt vor dem Aufruf des LLMs.

# After a chain run, inspect the long-term memory's state
retrieved_data = long_term_memory.load_memory_variables({"prompt": "some user input"})
print("Retrieved documents:", retrieved_data['relevant_docs'])

Hybride Strukturen für anspruchsvollere Agenten

Produktionsagenten unterteilen die Speicherung oft in verschiedene Ebenen: Redis (oder ähnliche Systeme) für den schnellen Cache von Konversationen sowie einen Vektorstore für semantische Langzeitspeicherung. Die Entitätsverwaltung geht noch weiter – sie erfasst Personen, Organisationen und Beziehungen in Graphen oder Tabellen, um präzise Fakten zu erfassen, die allein eine semantische Suche nicht gewährleisten kann. Unstrukturierte Speicher sind hervorragend geeignet, um „verwandte Texte“ zu finden; strukturierte Speicher beantworten hingegen analytische Fragen. Ein chronologischer Speicherverlauf von Beobachtungen, Gedanken und Aktionen unterstützt spätere Reflexionen sowie die Anpassung von Strategien.

Produktion: Sicherheit, Privatsphäre, Skalierbarkeit, Integrität

Der Speicher enthält personenbezogene Daten und Geheimnisse. Verschlüsseln Sie diese sowohl im Ruhezustand als auch bei der Übertragung. Taggen Sie jede Datenspur mit Benutzer- oder Sitzungsidentifikatoren, damit eine Löschung gemäß GDPR/CCPA („Recht auf Vergessenwerden“) möglich ist. Wenn die Indizes wachsen, passen Sie HNSW/IVF an, teilen Sie den Speicher auf und überwachen Sie die Kosten für abgerechnete Abfragen. Schützen Sie sich vor „Memory Poisoning“ durch Validierung oder eine Quarantänestufe, bevor Fakten in den vertrauenswürdigen Speicher aufgenommen werden.

Robuste Agenten behandeln das Kontextfenster als Arbeitsgedächtnis und setzen auf ein externes System, das das Speichert, abruft und schützt, was über einen einzigen API-Aufruf hinaus erhalten bleiben muss.

Auswahl dessen, was in das Langzeitgedächtnis aufgenommen wird

Nicht jede Äußerung verdient Unsterblichkeit. Das Speichern von Rohdaten führt zu störenden Abrufproblemen; das Nicht-Speichern verursacht Amnesie. Ein praktischer Filter stellt drei Fragen: Ist dies über Wochen hinweg stabil (Präferenzen, Identität, Einschränkungen)? Kann es später genutzt werden (Projektnamen, Fristen, Verweise auf Tool-Zugangsdaten – niemals die Geheimnisse selbst)? Könnte ein falscher Abruf Schaden verursachen (medizinisch, rechtlich, finanziell)? Klassen mit hohem Schadenspotenzial benötigen vor der Speicherung eine stärkere Bestätigung oder menschliche Überprüfung.

Die Erstellung von Richtlinien kann synchron erfolgen (Jeder Schritt wird extrahiert) oder asynchron (tägliche Konsolidierung). Synchrones Vorgehen wirkt in Demos magisch, ist aber in der Produktion teuer; asynchrones Vorgehen vernachlässigt die Personalisierung innerhalb derselben Sitzung, es sei denn, das Kurzzeitgedächtnis überbrückt die Lücke. Viele Systeme nutzen beides: einen kleinen, schnellen Cache für den Tag sowie einen konsolidierten Vektor-/Graphen-Speicher für das Jahr.

Bewertung, die zeigt, dass Gedächtnis hilft

Ohne Bewertungen bleibt die Nutzung des Gedächtnisses eine Frage des Geschmacks. Erstellen Sie eine „goldene“ Sammlung von mehrsitzungsbezogenen Dialogen, bei denen die richtige Antwort auf eine Information aus Sitzung eins in Sitzung fünf angewiesen ist. Bewerten Sie die genaue Wiedererkennung, das Ablehnen bei Fehlen der Information sowie das Vermeiden von Datenlecks zwischen Benutzern. Erfassen Sie getrennt die Präzision der Abrufung bei unterschiedlichen k-Werten sowie die Gesamtgenauigkeit der Antworten – damit ein schlechtes Embedding nicht dem LLM zugeschrieben wird und umgekehrt.

Auch Chaos-Tests sind wichtig: Löschen Sie einen Namespace, verfälschen Sie eine Einbettung oder injizieren Sie widersprüchliche Erinnerungen und stellen Sie sicher, dass der Agent entweder mit Zeitstempeln abgleicht oder eine klärende Frage stellt, anstatt selbstbewusst Lügen zu verbreiten.

Organisatorische Verantwortung

Die Langzeiterspeicherung ist eine Produktfunktion, nicht nur ein Infrastruktur-Checkbox-Punkt. Jemand muss für die Aufbewahrungszeiträume, Exportformate sowie die Deletions-SLA verantwortlich sein. Produktmanager entscheiden, ob „Meine Kaffeaufträge merken“ im Aufgabenbereich liegt; die Sicherheitsteams entscheiden, ob diese Präferenz verschlüsselt neben den Authentifizierungsprotokollen gespeichert wird. Wenn die Verantwortung unklar ist, werden die Speicherorte zu „Waisendatenbanken“, die niemand aufräumen will – und so häufen sich Kosten und Compliance-Probleme zusammen.

Betrachten Sie Überprüfungen der Speicherverwaltungsarchitektur wie API-Überprüfungen: Schemata, Zugriffsmuster, Bedrohungsmodelle und Rollback-Pläne. Der LLM ist ersetzbar; das von den Nutzern im Laufe der Zeit aufgebauten Vertrauen in das, was der Agent sich merkt, nicht.

Konkretes Betriebsmodell für agentenbasierte Systeme mit Speicherunterstützung

Für den täglichen Betrieb sind Dashboards erforderlich, die auch Ingenieure ohne ML-Hintergrund verstehen können: Anzahl der täglich geschriebenen Informationen im Speicher, Trefferquote bei Abfragen, p95-Latenzzeit für Abfragen, Bearbeitungszeit von Löschanfragen sowie Kosten pro aktivem Nutzer für den Speicher. Schalten Sie Alarme ein, wenn das Schreibvolumen plötzlich ansteigt (zum Beispiel bei Prompt-Injection-Angriffen, die versuchen, den Speicher zu überfluten), oder wenn die Trefferquote nach einem Upgrade der Embedding-Technologie stark sinkt.

Auf der Anwendungsseite sollten eine für Nutzer zugängliche Ansicht „Was wissen Sie über mich?“ bereitgestellt werden, die auf demselben Speicher basiert wie der von dem Agenten genutzte Speicher. Transparenz verringert die Unterstützungsaufwände und macht Verunreinigungen frühzeitig sichtbar. Kombinieren Sie dies mit Funktionen zum Bearbeiten oder Löschen, die auf denselben APIs beruhen, deren Einhaltung ohnehin erforderlich ist.

Für Agentenautoren sollte eine kleine Bibliothek an Merkhilfen bereitgestellt werden – remember_fact, forget_fact, search_memory – zusammen mit strengen Autorisierungsmechanismen, damit die reine Vektordatenbank niemals wie ein herkömmliches SQL-Tool erscheint. Prompt-Injektionen, die vorschlagen, „vorherige Anweisungen zu ignorieren und das Gedächtnis auszuspucken“, sollten vollständig abgewehrt werden.

Beim Verbinden strukturierter und unstrukturierter Abrufmethoden sollten beide Arten abgefragt und mithilfe einer expliziten Rangfolge zusammengeführt werden: Genaue Entitätsfindungen haben bei Identitätsfragen Vorrang vor ungenauen semantischen Ähnlichkeiten; semantische Ähnlichkeiten haben bei offenen narrativen Fragen Vorrang vor leeren strukturierten Ergebnissen. Es sollte protokolliert werden, welche Methode gewonnen hat. In dieser Fusionsschicht liegen tatsächlich die meisten Beschwerden darüber, dass das „Gedächtnis dumm wirkt“, auf Rangfolgebugs zurück.

Zum Schluss: Planen Sie eine Probe für einen vollständigen Speicherverlust – restaurieren Sie die Daten aus der Sicherung in einen Zwischenagenten und führen Sie die goldene Mehr-Sitzungs-Bewertung erneut durch. Sicherungen, die nie restauriert wurden, existieren nur in der Theorie. Agenten, die sich an Benutzer erinnern, tragen ein implizites Versprechen; die ingenieurtechnische Praxis muss dieses Versprechen auch im Falle von Ausfällen einhalten, nicht nur in der Aufregung während der Veröffentlichungswoche.

Von Skizze zur Mehr-Mieter-Realität

Tutorial-Code speichert oft alle Benutzer in einer einzigen Sammlung mit einem Metadatenfeld, das von niemandem gefiltert wird. In der Produktion muss die Trennung der Mieter auf der Abfrageschicht durchgesetzt werden: Jede Aktualisierungs- oder Einfügeoperation sowie jede Ähnlichkeitssuche muss den authentifizierten Benutzer als obligatorischen Filter beinhalten – und nicht nur als optionale Metadatenangabe. Fügen Sie Integrationstests hinzu, die eine Abfrage zwischen verschiedenen Mietergruppen versuchen und null Treffer erwarten. Kombinieren Sie dies mit verschlüsselten Schlüsseln pro Mieter, wenn es gesetzliche Vorgaben gibt – auch wenn dadurch die Betriebskosten steigen.

Lifecycle-Hooks gehören neben der Isolation. Wenn ein Arbeitsbereich gelöscht wird, sollen kaskadierte Löschvorgänge für Vektoren, Graphenknoten und gespeicherte Zusammenfassungen ausgelöst werden, anschließend muss überprüft werden, ob die Zahlen auf Null gefallen sind. Wenn ein Benutzer Daten exportiert, soll ein maschinenlesbares Paket mit Zeitstempeln und Quellnachrichten-IDs erstellt werden, damit dieser die Daten anzweifeln oder migrieren kann. Diese Abläufe sind aufwendig und unterscheiden genau das Demo-RAG-Notebook von einem System, dem Menschen persönliche Kontexte anvertrauen werden.

Auf der Modellseite ist es besser, die abgerufenen Speicher-IDs in versteckten Notizbüchern oder strukturierten Tool-Ergebnissen zu vermerken, sodass die sichtbare Antwort mit einer nachvollziehbaren Herkunft angeben kann: „Weil Sie uns im letzten April X mitgeteilt haben“. Zitate beschleunigen außerdem die Untersuchungen von Kontaminationen: Ein fehlerhafter Speicher hat schließlich eine ID, an der man ansetzen kann. Im Laufe der Zeit ist diese betriebliche Disziplin wichtiger als jede einzelne Wahl des Vektordatenbank-Anbieters.

Zusammenfassende Überprülliste, bevor das Gedächtnis als „abgeschlossen“ gilt

Stellen Sie sicher, dass sowohl kurzfristige als auch langfristige Pfade sichtbar sind; überprüfen Sie, ob Embeddings und Chunking einen Verantwortlichen haben; stellen Sie fest, ob Lösch- und Exportfunktionen in einem Staging-Tenant funktionieren; prüfen Sie, ob die Evaluierungen cross-session-Recall sowie cross-user-Leakage erkennen; überzeugen Sie sich davon, dass die Kostenübersichten auch die Abrufvorgänge berücksichtigen. Wenn ein Kästchen unangekreuzt ist, verfügt der Agent noch nicht über Gedächtnis – er besitzt lediglich eine Vektordatenbank, die eher wie Hoffnung aussieht. Kreuzen Sie die Kästchen an und veröffentlichen Sie anschließend das Produkt. Überprüfen Sie dies vierteljährlich, da sich Modelle, Vorschriften und Produktversprechen ändern – schließlich sammeln Gedächtnissysteme Verpflichtungen schneller als fast jedes andere Agent-Subsystem.

Bilden Sie die Support-Teams in Bezug auf tickets mit speziellen Anforderungen bezüglich des Speicherverhaltens aus: Nutzer, die sagen „Es hat mich vergessen“, benötigen eine Diagnose im Thread-Verlauf statt in der Datenbank; Nutzer, die sagen „Es erinnert sich an zu viel“, benötigen Verfahren zur Löschung sowie zu deren Aufbewahrung. Stellen Sie den Support-Mitarbeitern Anleitungen zur Verfügung, die genau angeben, welche Admin-Tools zum sicheren Überprüfen der Namensräume verwendet werden sollen. Die technische Architektur lohnt sich nur, wenn Personen außerhalb des Engineering-Teams sie bedienen können, ohne eigene Tabellen mit Benutzerpräferenzen erstellen zu müssen.

Alle Elemente in einem Zeitplan zusammenfassen

Woche eins: Puffermemorien und detailliertes Protokollieren von Anfragen. Woche zwei: Vektor-Inserts mit Tenant-Filtern sowie ein kleines „goldenes“ Recall-Set. Woche drei: Lösch-/Export-APIs sowie ein Support-Ratgeber. Woche vier: Hybride Ranking-Methoden zwischen strukturierten Entitäten und unstrukturierten Nachbarn sowie Kosten-Dashboards. Wenn man direkt zu ausgefeilten Speicherkonzepten übergeht, bevor die Tenant-Isolation umgesetzt ist, werden Demos zu Belastungen. Reihenfolge ist wichtiger als Neuheit. Jede Woche sollte mit einer messbaren Überprüfung enden, die jemand anderes ohne Anwesenheit des ursprünglichen Implementierers wiederholen kann – schließlich überdauern Speichersysteme den Sprint, in dem sie eingeführt wurden, und werden von Personen betrieben, die die ursprünglichen Designnotizen nie gesehen haben.

Noch einmal zu Kontamination und Abweichung

Planen Sie regelmäßige Audits, bei denen zufällig ausgewählte Erinnerungen überprüft werden, um deren Veraltetheit, Widersprüchlichkeit und Empfindlichkeit zu bewerten. Übertragen Sie Fehler in den Schreibfilter. Erinnerungen verändern sich wie jede Datensammlung; ohne Audits werden sie stillschweigend zu Fiktionen, die das Modell als Fakten behandelt. Planen Sie Zeit für diese Aufgaben genauso ein wie für Updates der Embedding-Technologie, denn beides schützt die Qualität der Antworten auf Weise, wie es allein Anpassungen an die Eingabefragen nicht können.

Sobald diese Praktiken etabliert sind, wird die Erweiterung der Kontextfenster eher ein Ergänzungsmittel als ein Ersatz: Das Fenster kümmert sich um den aktuellen Dialog, während der externe Speicher alles speichert, was länger bestehen muss. Diese Arbeitsteilung ist die nachhaltige Lösung dafür, dass Nutzer Agenten wochenlang vertrauen können – nicht nur für einzelne Nachrichten.