\n\n\n\n Ich habe das Agentengedächtnis gemeistert: So habe ich es gemacht - AgntDev \n

Ich habe das Agentengedächtnis gemeistert: So habe ich es gemacht

📖 12 min read2,235 wordsUpdated Mar 27, 2026

Hallo zusammen, hier ist Leo von agntdev.com! Heute möchte ich etwas erkunden, das seit Wochen in meinem Kopf herumschwirrt, etwas, mit dem ich in meinen eigenen Nebenprojekten kämpfe: die oft übersehene Kunst des Agentenspeichermanagements, insbesondere in langlaufenden oder zustandsorientierten Agentensystemen. Wir verbringen so viel Zeit mit der Überlegung zu Prompt-Engineering, Tool-Integration und Orchestratoren, aber was ist mit den Dingen, die unsere Agenten tatsächlich lernen und entwickeln? Hier kommt der Speicher ins Spiel.

Es ist 2026, und wir sind über den anfänglichen Hype von „wirf einfach ein großes Sprachmodell darauf“ hinaus. Wir bauen tatsächliche Anwendungen, nicht nur Demos. Und in diesen Anwendungen ist ein Agent, der nach jeder Interaktion alles vergisst, ehrlich gesagt ziemlich nutzlos. Ich meine, stell dir vor, du führst ein Gespräch mit jemandem, der alle fünf Minuten Amnesie hat. Frustrierend, oder? Das ist das Benutzererlebnis, das wir oft unbeabsichtigt mit schlecht verwaltetem Agentenspeicher liefern.

Meine eigene Reise in dieses Thema begann vor ein paar Monaten, als ich versuchte, einen persönlichen Assistenten-Agenten für die Verwaltung meines Schreibworkflows zu erstellen. Die Idee war einfach: Er sollte meine Artikelideen, Forschungshinweise, den Fortschritt beim Entwerfen verfolgen und mir sogar beim Brainstorming helfen. Die erste Iteration war… nun ja, sagen wir, es war wie das Gespräch mit einem neuen Praktikanten jeden Morgen. „An welchem Artikel arbeitest du?“ „Hast du diesen Abschnitt fertiggestellt?“ „Was war nochmal die Frist?“ Ärgerlich. Mir wurde klar, dass ich, obwohl ich alle fancy Tools und LLM-Integrationen hatte, nicht wirklich darüber nachgedacht hatte, wie dieser Agent den Kontext aufrechterhalten und über Tage, sogar Wochen, einen nützlichen internen Zustand aufbauen würde.

Heute möchte ich also darüber sprechen, wie man über einfache Gesprächshistorien hinausgeht und zu ausgeklügelteren, praktischen Ansätzen für das Management von Agentenspeichern übergeht. Es geht nicht um theoretische Arbeiten; es geht darum, was tatsächlich funktioniert, wenn man echte Agenten erstellt, die mehr als nur die letzten drei Wendungen eines Chats erinnern müssen.

Das Problem mit der reinen „Kontextfenster“-Speicherung

Die meisten von uns beginnen mit der einfachsten Form des Speichers: dem Einfüllen der gesamten Gesprächshistorie in das Kontextfenster des LLM. Es ist einfach, funktioniert bei kurzen Interaktionen, und für viele grundlegende Chatbots ist es vollkommen in Ordnung. Aber es stößt an eine Wand, und das ziemlich heftig.

Zuerst gibt es das Token-Limit. Selbst mit ständig wachsenden Kontextfenstern sind sie nicht unendlich. Ein langlaufender Agent, der mit komplexen Aufgaben umgeht, wird schnell das überschreiten, was selbst die größten Modelle verarbeiten können. Man kommt nicht umhin, zu kürzen, wodurch wertvoller Kontext verloren geht und der Agent im Laufe der Zeit dümmer wird.

Zweitens ist es ineffizient. Es ist verschwenderisch, Seiten und Seiten redundanter Informationen an ein LLM für jede einzelne Wendung zu senden, sowohl in Bezug auf Kosten als auch auf Latenz. Das Modell muss all diese alten Informationen wiederholt neu verarbeiten, selbst wenn nur ein winziger Bruchteil davon für die aktuelle Anfrage relevant ist.

Und drittens ist es nicht intelligent. Es ist ein roher Dump. Ein Agent muss in der Lage sein, spezifische Fakten abzurufen, Informationen zu synthetisieren und Prioritäten für das, was wichtig ist, zu setzen, nicht einfach alles, was er je gehört hat, abzuspielen.

Über rohe Geschichte hinaus: Ein intelligenteres Gedächtnissystem aufbauen

Was ist also die Alternative? Wir müssen den Speicher als strukturierten, dynamischen Bestandteil unserer Agentenarchitektur betrachten, nicht nur als FIFO-Warteschlange.

1. Zusammenfassung und Abstraktion

Einer der ersten Schritte, die ich mit meinem Schreibassistenten unternahm, war die Implementierung einer Zusammenfassungsschicht. Statt jede einzelne Nachricht zu speichern, ließ ich den Agenten regelmäßig Abschnitte des Gesprächs oder spezifische Aufgaben-Updates zusammenfassen. Dies reduzierte die Tokenanzahl drastisch und behielt die Kerninformationen bei.

Zum Beispiel statt:

  • „Benutzer: Ich denke über einen Artikel zu fortgeschrittener Agentenspeicherung nach.“
  • „Agent: Das ist ein großartiges Thema! Welche Aspekte ziehen Sie in Betracht?“
  • „Benutzer: Ich möchte Zusammenfassung, Vektorenspeicher und Wissensgraphen abdecken.“
  • „Agent: Ausgezeichnet. Haben Sie erste Gedanken zur Struktur?“
  • „Benutzer: Ja, ich beginne mit dem Problem, dann Lösungen, dann Beispiele.“

Konnte der Agent dies in einen einzigen, prägnanteren Speicherbeitrag zusammenfassen:


"Benutzer plant einen Artikel zur fortgeschrittenen Agentenspeicherung, speziell mit den Themen Zusammenfassung, Vektorenspeicher und Wissensgraphen. Vorgeschlagene Struktur umfasst Problem, Lösungen und Beispiele."

Dies ist eine einfache Anwendung des LLM selbst – benutze es, um Informationen zu destillieren. Du kannst dies in regelmäßigen Abständen tun oder wenn eine spezifische Unteraufgabe abgeschlossen ist. Der Schlüssel ist zu entscheiden, welches Detailniveau beibehalten werden muss.

2. Vektorenspeicher für semantische Abfrage

Hier wird es wirklich mächtig. Anstatt nur zu summarieren, können wir diskrete Informationsstücke (Fakten, Entscheidungen, Beobachtungen) als Einbettungen in einer Vektordatenbank speichern. Wenn der Agent etwas zurückrufen muss, fragt er den Vektorenspeicher mit dem aktuellen Kontext ab, und der Speicher gibt semantisch ähnliche Erinnerungen zurück.

Das ist fantastisch, da es deinem Agenten ermöglicht, relevante Informationen abzurufen, selbst wenn die genaue Formulierung nicht verwendet wird. Es ist wie dein eigenes Gehirn, wo ein Gedanke eine verwandte Erinnerung auslösen kann, auch wenn du nicht aktiv danach suchst, mit spezifischen Schlüsselwörtern.

Angenommen, mein Schreibassistent arbeitet an einem Artikel. Ich könnte Erinnerungen wie diese gespeichert haben:

  • „Benutzer zieht prägnante Codebeispiele theoretischen Diskussionen vor.“
  • „Die Frist für den Artikel zur Agentenspeicherung ist der 25. März.“
  • „Benutzer erwähnte die Integration von LangChains Speichermodulen als praktisches Beispiel.“

Später, wenn ich frage: „Was sollte ich für die Codebeispiele im Hinterkopf behalten?“, kann der Agent den Vektorenspeicher mit „Codebeispiele“ abfragen und die Erinnerung an meine Vorliebe für prägnante Beispiele abrufen, auch wenn ich nicht ausdrücklich nach „Vorlieben“ gefragt habe.

Hier ist ein vereinfachtes Python-Beispiel unter Verwendung eines hypothetischen Vektorenspeichers (wie FAISS oder Pinecone, in einer einfachen Schnittstelle verpackt):


from typing import List, Dict
import hashlib # Für einfache ID-Generierung

class SimpleVectorStore:
 def __init__(self):
 self.memories: Dict[str, str] = {} # Tatsächlichen Text speichern
 self.embeddings: Dict[str, List[float]] = {} # Vektor-Einbettungen speichern (hier gemockt)

 def _generate_embedding(self, text: str) -> List[float]:
 # In einem echten Szenario würde dies ein Einbettungsmodell aufrufen (z.B. OpenAI, Sentence Transformers)
 # Für die Demo nur ein Platzhalter.
 return [float(ord(c)) / 100 for c in text[:10]] # Super vereinfachte Mock-Einbettung

 def add_memory(self, text: str):
 memory_id = hashlib.md5(text.encode()).hexdigest()
 self.memories[memory_id] = text
 self.embeddings[memory_id] = self._generate_embedding(text)
 print(f"Erinnerung hinzugefügt: '{text}' mit ID: {memory_id}")

 def retrieve_similar(self, query: str, top_k: int = 3) -> List[str]:
 query_embedding = self._generate_embedding(query)
 
 # Einfache Kosinusähnlichkeit (Skalarprodukt für normalisierte Vektoren)
 # Im echten Leben eine richtige Bibliothek oder Vektorspeicher-Client verwenden
 scores = {}
 for mem_id, mem_embedding in self.embeddings.items():
 # Mock-Ähnlichkeit: einfach die Summe der Produkte
 score = sum(q * m for q, m in zip(query_embedding, mem_embedding)) 
 scores[mem_id] = score

 sorted_memories = sorted(scores.items(), key=lambda item: item[1], reverse=True)
 
 results = []
 for mem_id, score in sorted_memories[:top_k]:
 results.append(self.memories[mem_id])
 return results

# Nutzung
memory_store = SimpleVectorStore()
memory_store.add_memory("Benutzer zieht prägnante Codebeispiele theoretischen Diskussionen vor.")
memory_store.add_memory("Die Frist für den Artikel zur Agentenspeicherung ist der 25. März.")
memory_store.add_memory("Benutzer erwähnte die Integration von LangChains Speichermodulen als praktisches Beispiel.")
memory_store.add_memory("Überprüfe den Einleitungsabschnitt bis zum Ende des Tages.")

print("\nAbruf für 'Codebeispiele':")
retrieved = memory_store.retrieve_similar("Was sollte ich für die Codebeispiele im Hinterkopf behalten?")
for m in retrieved:
 print(f"- {m}")

print("\nAbruf für 'Artikelabgabetermin':")
retrieved = memory_store.retrieve_similar("Wann ist dieser Artikel fällig?")
for m in retrieved:
 print(f"- {m}")

Dieses Mockup ist extrem vereinfacht, aber es veranschaulicht das Kernkonzept: Wandle Text in Vektoren um, speichere sie und rufe sie basierend auf Vektorähnlichkeit ab. Bibliotheken wie LangChain und LlamaIndex bieten hervorragende Abstraktionen über verschiedene Vektorspeicher (Chroma, Pinecone, Weaviate usw.), um die Integration zu erleichtern.

3. Strukturierte Kenntnisse & Datenbanken

Nicht alles muss eine freie Zusammenfassung oder eine Vektoreinbettung sein. Einige Informationen sind von Natur aus strukturiert. Denk an Benutzerpräferenzen, Aufgabestatus oder Entitätsbeziehungen. Hier glänzen traditionelle Datenbanken (SQL, NoSQL) immer noch.

Für meinen Schreibassistenten verwende ich eine kleine SQLite-Datenbank, um Folgendes zu speichern:

  • Metadaten zum Artikel (Titel, Status, Frist, Kernideen).
  • Fortschritt der Abschnitte (entworfen, überprüft, veröffentlicht).
  • Benutzerdefinierte Prioritäten oder wiederkehrende Aufgaben.

Der Agent kann dann Tools verwenden, um diese Datenbank abzufragen oder zu aktualisieren. Zum Beispiel, wenn ich frage: „Wie ist der Status des Artikels zur Agentenspeicherung?“, muss der Agent keine lange Gesprächshistorie parsen. Er führt eine SQL-Abfrage wie SELECT status, deadline FROM articles WHERE title = 'Agent Memory Article' aus. Das ist schnell, präzise und vermeidet Halluzinationen.

Der Trick dabei ist, Ihren Agenten zu lehren, wann er seine „strukturierte Speicher“-Werkzeuge und wann seine „semantische Speicher“-Werkzeuge verwenden soll. Dies umfasst normalerweise die Festlegung klarer Werkzeug-Spezifikationen und das Vertrauen auf die Funktionalitätsaufrufmöglichkeiten des LLM, um das richtige auszuwählen.

Beispiel einer Werkzeugdefinition (konzeptionell, für ein LLM zur Interpretation):


{
 "name": "get_article_details",
 "description": "Ruft den Status, die Frist und die Hauptthemen für einen gegebenen Artikel-Titel ab.",
 "parameters": {
 "type": "object",
 "properties": {
 "article_title": {
 "type": "string",
 "description": "Der genaue Titel des Artikels, den Sie abfragen möchten."
 }
 },
 "required": ["article_title"]
 }
}

Wenn das LLM eine Abfrage sieht wie „Wie ist der Status des Artikels ‚Building Better Agent Memory‘ und wann ist er fällig?“, sollte es idealerweise dieses Werkzeug mit article_title="Building Better Agent Memory" aufrufen.

4. Hierarchische Gedächtnisarchitekturen

Der fortschrittlichste (und oft komplexeste) Ansatz vereint diese Ideen in einer hierarchischen Struktur. Stellen Sie sich Folgendes vor:

  • Kurzzeitgedächtnis: Die unmittelbare Gesprächshistorie, möglicherweise nach einigen Runden zusammengefasst. Dies bleibt im Kontextfenster.
  • Episches Gedächtnis: Zusammenfassungen von Ereignissen, spezifische Interaktionen oder abgeschlossene Teilaufgaben, die in einem Vektor-Speicher für die semantische Abrufung gespeichert sind. Dies hilft dem Agenten, sich zu erinnern, „dass wir einmal X besprochen haben.“
  • Faktisches/prozedurales Gedächtnis: Strukturierte Daten in einer Datenbank (Benutzerprofil, Aufgabenlisten, Systemkonfigurationen) oder ein Wissensgraph für explizite Fakten und Regeln. Das ist das „langfristige Wissen“ des Agenten.

Die Denkprozesse des Agenten würden dann einen Prozess beinhalten von:

  1. Zuerst das Kurzzeitgedächtnis zu überprüfen.
  2. Wenn nicht gefunden oder mehr Kontext benötigt wird, das episodische Gedächtnis (Vektor-Speicher) abfragen.
  3. Wenn spezifische Fakten oder strukturierte Daten benötigt werden, das faktische/prozedurale Gedächtnis (Datenbank/Wissensgraph) abfragen.
  4. Informationen aus allen relevanten Quellen zu synthetisieren, bevor eine Antwort generiert oder eine Aktion durchgeführt wird.

Das ist genau die Richtung, in die ich meinen Schreibassistenten lenke. Es erlaubt dem Agenten, äußerst reaktionsfähig auf den unmittelbaren Kontext zu sein, aber auch auf einen reichen, vielfältigen Satz von vergangenen Erfahrungen und faktenbasiertem Wissen zuzugreifen, ohne die LLM mit irrelevanten Daten zu überwältigen.

Umsetzbare Erkenntnisse für Ihre Agentenentwicklungen

Also, Sie bauen einen Agenten. Wie wenden Sie das an?

  1. Frühzeitig Gedächtnisbedürfnisse identifizieren: Gehen Sie nicht einfach standardmäßig zur Kontextfensterhistorie über. Stellen Sie Fragen:

    • Muss mein Agent Dinge über Sitzungen hinweg erinnern?
    • Muss er spezifische Fakten oder allgemeine Konzepte abrufen?
    • Ist einige Informationen stark strukturiert (z. B. eine To-do-Liste), während andere Teile informelle Gespräche sind?
  2. Einfach anfangen, dann iterieren:

    • Für kurze Interaktionen ist eine grundlegende Gesprächshistorie in Ordnung.
    • Für etwas längere Interaktionen fügen Sie einen einfachen Zusammenfassungs Schritt für ältere Teile des Gesprächs hinzu.
    • Wenn Sie semantische Rückrufe benötigen, integrieren Sie einen Vektor-Speicher (LangChain und LlamaIndex machen dies relativ einfach).
    • Wenn Sie strukturierte Daten haben, definieren Sie Werkzeuge für Ihren Agenten, um mit einer Datenbank zu interagieren.
  3. Die richtigen Werkzeuge auswählen:

    • Für Vektor-Speicher: ChromaDB (lokal, einfach zu starten), Pinecone/Weaviate (skalierbare Cloud-Optionen).
    • Für strukturierte Daten: SQLite (einfach, eingebettet), PostgreSQL (solide), MongoDB (flexibles NoSQL).
    • Orchestrierungsframeworks wie LangChain, LlamaIndex oder AutoGen bieten hervorragende Abstraktionen zum Integrieren dieser Gedächtnis Komponenten in den Workflow Ihres Agenten.
  4. Gedächtnisabruf testen: Testen Sie nicht nur, ob Ihr Agent die aktuelle Frage beantworten kann. Testen Sie, ob er sich an Dinge von vor 10, 20 oder 50 Runden erinnert. Kann er spezifische Details aus einem Gespräch in der letzten Woche abrufen? Dies ist entscheidend für das Vertrauen der Benutzer und die Nützlichkeit des Agenten.
  5. Über das Vergessen nachdenken: Genauso wichtig wie das Erinnern ist es, zu wissen, wann man vergessen oder archivieren sollte. Nicht jedes Stück Information muss für immer sofort zugänglich sein. Erwägen Sie Strategien zur Bereinigung oder Archivierung alter, irrelevanter Erinnerungen, um Ihr System effizient zu halten.

Agenten zu bauen, die wirklich intelligent und hilfreich erscheinen, hängt von ihrer Fähigkeit ab, zu erinnern, zu lernen und sich anzupassen. Über die Einschränkungen eines einfachen Kontextfensterspeichers hinauszugehen, ist keine Luxus mehr; es ist eine Notwendigkeit für jede ernsthafte Agentenentwicklung. Es erfordert zwar etwas mehr Arbeit im Vorfeld, aber die Belohnung in Bezug auf die Fähigkeiten des Agenten und die Benutzererfahrung ist immens. Glauben Sie mir, Ihre Benutzer (und Ihr zukünftiges Ich, wenn Sie debuggen) werden es Ihnen danken.

Viel Spaß beim Bauen, und lassen Sie mich wissen, welche Gedächtnisstrategien Sie in Ihren Projekten als nützlich empfunden haben!

Verwandte Artikel

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: Agent Frameworks | Architecture | Dev Tools | Performance | Tutorials
Scroll to Top