Hallo zusammen, hier ist Alex, zurück auf agntai.net. Es ist der 23. März 2026 und ich bin kürzlich auf ein spezifisches Problem gestoßen, das ich denke, viele von euch, die KI-Agenten bauen, wahrscheinlich ebenfalls erleben: Wie kann man verhindern, dass das Langzeitgedächtnis eures Agenten zu einem aufgeblähten, langsamen und letztendlich nutzlosen Durcheinander wird?
Wir sind alle schon einmal dort gewesen. Man beginnt mit einer brillanten Idee für einen Agenten, der sich an die Präferenzen der Benutzer, frühere Interaktionen oder sogar eigene interne Entdeckungen erinnern soll. Man richtet eine Vektordatenbank ein, wirft eine Menge Embeddings hinein, und für eine gewisse Zeit ist es magisch. Der Agent scheint intelligent, kontextbewusst zu sein, und man ist stolz. Dann, langsam aber sicher, fangen die Dinge an, schiefzugehen. Die Abrufzeiten verlängern sich. Der Agent wird verwirrt und zieht irrelevante Informationen, weil sein Gedächtnis einfach zu groß und unstrukturiert ist. Es ist wie der Versuch, einen speziellen Satz in einem Buch mit einer Million Seiten ohne Index zu finden. Kürzlich bin ich mit einem persönlichen Projekt, einem Agenten, der mir helfen sollte, meine freiberuflichen Schreibaufträge zu managen, frontal gegen diese Wand gestoßen. Nach etwa zwei Monaten täglicher Nutzung war sein „Gedächtnis“ nur noch ein Morast aus unvollendeten Artikelideen, Kundennotizen und Forschungsschnipseln. Er zog aus allem und jedem Informationen. Die anfängliche Aufregung war eindeutig verschwunden.
Heute möchte ich darüber sprechen, wie wir unsere Agenten intelligenter machen können, was sie sich merken und, wichtiger noch, wie sie es abrufen. Es geht nicht darum, mehr Rechenressourcen für das Problem bereitzustellen; es geht um eine bessere Organisation und einen Hauch von Metakognition auf Agentenebene. Genauer gesagt konzentriere ich mich auf eine Technik, die ich „Hierarchisches Gedächtnisfiltering“ nenne – im Wesentlichen unseren Agenten einen strukturierten Weg zu geben, um zu entscheiden, was er sich merken, was er vergessen und wie er wichtige Dinge für ein schnelleres und genaueres Abrufen kategorisieren kann.
Das Problem mit einem flachen und unbegrenzten Gedächtnis
Die meisten Implementierungen des Basisagenten-Gedächtnisses, meine inklusive, sind ziemlich einfach:
- Neue Informationen kommen an (Benutzereingabe, Agentenbeobachtung, interne Gedanken).
- Integriere die Information.
- Speichere das Embedding und den ursprünglichen Text in einer Vektordatenbank.
- Wenn der Kontext benötigt wird, frage die Datenbank mit einem neuen Embedding ab.
- Rufe die ähnlichsten Elemente ab.
Das funktioniert eine kurze Zeit gut. Aber mit wachsendem Gedächtnis treten mehrere Probleme auf:
- Semantische Überlappung: Viele Informationen können „semantisch ähnlich“ sein, aber nur wenige sind tatsächlich relevant für die *aktuelle* Aufgabe. Zum Beispiel würde mein Schreibagent alle meine früheren Artikel über KI-Agenten abrufen, während ich nur den über die Architektur des Agenten benötigte.
- Abrufgeschwindigkeit: Mit wachsender Datenbank kann sogar die Suche nach ähnlichen Vektoren langsamer werden, besonders wenn ihr komplexe Filterung durchführt oder neu klassifizieren müsst.
- Kontextuelles Rauschen: Der Agent ist von zu vielen Informationen überwältigt, was zu weniger gezielten Antworten oder Handlungen führt. Es ist, als hätte man einen hilfreichen Assistenten, der einfach alle potenziell relevanten Dokumente auf euren Tisch legt.
- Vergessen ist schwierig: Wie schneidet man alte irrelevante Informationen weg, ohne etwas Wichtiges zu verlieren? Manuelle Ausmistung ist nicht skalierbar.
Mein Schreibagent begann, Titel für Artikel zu halluzinieren, die auf alten, verworfenen Ideen basierten, weil die Vektorsuche Fragmente von unausgereiften Konzepten zog. Es war ein Durcheinander.
Einführung in das Hierarchische Gedächtnisfiltering (HGF)
Das HGF ist kein neuer, berüchtigter Algorithmus; es ist eine strategische Kombination bestehender Techniken, die aus einer agentenorientierten Perspektive angewendet werden. Die zentrale Idee ist, über einen einzigen flachen Speicher hinauszugehen und Abstraktions- und Filterungsebenen einzuführen, die von den Zielen und dem aktuellen Status des Agenten geleitet werden. Denken Sie daran, Ihrem Agenten einen Aktenschrank mit verschiedenen Schubladen, Dateien in diesen Schubladen und einem aktiven Arbeitsbereich zu geben.
Ebene 1: Flüchtiges Arbeitsgedächtnis (Kurzzeit)
Dies ist Ihr standardmäßiger Konversationspuffer, der unmittelbare Kontext. Er ist von kurzer Dauer und direkt mit der laufenden Interaktion verbunden. Mein Agent verwendet ihn für die letzten 5 bis 10 Austausche einer Konversation. Es ist schnell, direkt zugänglich und erreicht das Langzeitgedächtnis nicht, es sei denn, es wird ausdrücklich danach gefragt.
Implementierung: Eine einfache `deque` oder Liste von Nachrichtenobjekten. Einfach.
Ebene 2: Kategorisiertes Langzeitgedächtnis (Mittelfrist)
Hier beginnt die Magie. Anstelle einer riesigen Vektordatenbank partitionieren wir unser Langzeitgedächtnis in Kategorien. Diese Kategorien sind nicht willkürlich; sie sind abgeleitet von den erwarteten Aufgaben oder Bereichen des Agenten. Für meinen Schreibagenten umfassen die Kategorien „Kundenprojekte“, „Artikelideen (aktiv)“, „Artikelideen (archiviert)“, „Forschungsnotizen“ und „persönliche Vorlieben“.
Wenn neue Informationen ankommen, entscheidet der Agent zuerst, zu welcher Kategorie sie gehören. Diese Entscheidung kann durch einen kleinen LLM-Aufruf oder eine Regelmenge getroffen werden. Zum Beispiel, wenn ein Benutzer sagt: „Beginne einen neuen Artikel über federated learning“, würde die interne Funktion des Agenten zum „Gedächtnis-Manager“ dies als „Artikelideen (aktiv)“ klassifizieren.
Jede Kategorie hat dann ihren eigenen kleineren Vektorspeicher (oder sogar einen separaten Index in einem größeren Vektorspeicher wie Pinecone oder Weaviate). Dies reduziert erheblich den Suchraum, wenn der Agent Informationen abrufen muss, die zu einer bestimmten Kategorie gehören.
Implementierungsbeispiel: Kategorisierungsaufforderung
Hier ist ein vereinfachtes Python-Beispiel, das einen LLM zur Kategorisierung einer eingehenden Nachricht verwendet:
from openai import OpenAI
client = OpenAI()
def categorize_message(message: str, categories: list[str]) -> str:
prompt = f"""Sie sind ein intelligenter Assistent, der damit beauftragt ist, Benutzernachrichten zu kategorisieren.
Weisen Sie die folgende Nachricht einer der bereitgestellten Kategorien zu.
Geben Sie NUR den Namen der Kategorie zurück.
Kategorien: {", ".join(categories)}
Nachricht: "{message}"
Kategorie:"""
response = client.chat.com_messages.create(
model="gpt-4o", # Oder welches auch immer Ihr bevorzugtes Modell ist
messages=[{"role": "user", "content": prompt}],
max_tokens=50,
temperature=0.0
)
return response.choices[0].message.content.strip()
# Beispielverwendung für meinen Schreibagenten
my_categories = [
"Kundenprojekte",
"Artikelideen (aktiv)",
"Artikelideen (archiviert)",
"Forschungsnotizen",
"persönliche Vorlieben",
"Allgemeine Konversation",
"Aufgabenmanagement"
]
new_message = "Denken Sie daran, dass ich es bevorzuge, dienstags und donnerstags Artikel zu schreiben."
category = categorize_message(new_message, my_categories)
print(f"Nachricht kategorisiert als: {category}") # Ausgabe: persönliche Vorlieben
new_message_2 = "Lass uns mit dem Schreiben des Plans für den Artikel 'Gedächtnis von KI-Agenten' beginnen."
category_2 = categorize_message(new_message_2, my_categories)
print(f"Nachricht kategorisiert als: {category_2}") # Ausgabe: Artikelideen (aktiv)
Sobald die Nachricht kategorisiert ist, werden die Nachricht und ihr Embedding im Speicher der jeweiligen Kategorie gespeichert. Das ist ein großer Sieg: Wenn der Agent „persönliche Vorlieben“ abrufen muss, fragt er nur diesen spezifischen, viel kleinerem Teil seines Gedächtnisses ab.
Ebene 3: Zusammengefasstes & Konsolidiertes Gedächtnis (Langzeitarchiv)
Dies ist die „Weisheit“-Ebene. Mit der Zeit können selbst die kategorisierten Gedächtnisse umfangreich werden. Meine Kategorie „Artikelideen (aktiv)“ könnte beispielsweise Dutzende detaillierter Pläne, Forschungslinks und Brainstorming-Sitzungen für einen einzelnen Artikel ansammeln. Der Agent muss nicht jedes *Detail* jedes Mal abrufen. Oft benötigt er eine Zusammenfassung oder ein allgemeines Verständnis.
Diese Ebene erfordert eine regelmäßige Konsolidierung. Der Agent (oder ein Hintergrundprozess) identifiziert Cluster von zusammenhängenden Erinnerungen innerhalb einer Kategorie und generiert eine prägnante Zusammenfassung. Diese Zusammenfassungen werden dann in einem separaten Speicher abgelegt, möglicherweise auf einer übergeordneten Ebene, eventuell mit Verweisen auf die detaillierten Gedächtnisse.
Anwendungsbeispiel: Zusammenfassen des Fortschritts eines Projekts
Angenommen, mein Agent arbeitet seit einer Woche an einem Kundenprojekt. Die Kategorie „Kundenprojekte“ für „Blogartikel Acme Corp“ hat 50 bis 100 einzelne Gedächtniseinträge (Besprechungsnotizen, Forschungsfragmente, Entwurfspassagen, Rückmeldungen) angesammelt. Anstatt all dies abzurufen, kann der Agent regelmäßig eine Zusammenfassung erstellen:
def zusammenfassen_gedächtnisse(gedächtnisse: list[str], kontext: str) -> str:
# 'gedächtnisse' wäre eine Liste von relevanten Textfragmenten, die aus einer Kategorie abgerufen wurden
# 'kontext' könnte etwas sein wie "Fassen Sie die Fortschritte beim Blog von Acme Corp zusammen."
aufforderung = f"""Sie sind ein intelligenter Assistent. Überprüfen Sie die folgenden Informationen
und geben Sie eine kurze, prägnante Zusammenfassung im Hinblick auf den bereitgestellten Kontext.
Kontext: {kontext}
Informationen:
{'\n'.join([f"- {g}" for g in gedächtnisse])}
Zusammenfassung:"""
antwort = client.chat_com_messages.create(
modell="gpt-4o",
nachrichten=[{"rolle": "user", "inhalt": aufforderung}],
max_tokens=500,
temperatur=0.2
)
return antwort.choices[0].message.content.strip()
# Stellen Sie sich vor, 'gedächtnisse_kunden_abgerufen' enthält viele detaillierte Einträge
# aus der Kategorie "Kundenprojekte" für Acme Corp.
# (Das würde eine Vektorsuche innerhalb dieser spezifischen Kategorie beinhalten)
# Für die Demonstration erfinden wir einige Gedächtnisse:
gedächtnisse_kunden_abgerufen = [
"Besprechung vom 2026-03-18: Diskussionspunkt des Blogbeitrags 'Die Zukunft der KI im Marketing'.",
"Forschungsnotiz: Drei relevante Fallstudien zum ROI des KI-Marketings.",
"Einleitender Absatz verfasst, am 2026-03-20 zur ersten Rückmeldung an den Kunden gesendet.",
"Rückmeldung vom Kunden erhalten: 'Die Einleitung ist gut, konzentrieren Sie sich mehr auf praktische Beispiele.'",
"Beginn des Abschnitts über 'Personalisierte Kundenreisen mit KI'.",
"To-Do: Neueste Statistiken zur KI-Adoption in kleinen Unternehmen finden."
]
zusammenfassung_projekt = zusammenfassen_gedächtnisse(
gedächtnisse_kunden_abgerufen,
"Fassen Sie die aktuellen Fortschritte und Schlüsselpunkte für den 'Blogbeitrag von Acme Corp' zusammen."
)
print(f"Projektzusammenfassung:\n{zusammenfassung_projekt}")
# Beispielausgabe:
# Projektzusammenfassung:
# Die Fortschritte des 'Blogbeitrags von Acme Corp.' mit dem Titel 'Die Zukunft der KI im Marketing' umfassen eine erste Besprechung am 2026-03-18.
# Die Forschung hat 3 Fallstudien zum ROI des KI-Marketings zusammengestellt. Die Einleitung wurde verfasst und erhielt am 2026-03-20 positives Feedback vom Kunden,
# mit dem Vorschlag, mehr praktische Beispiele hinzuzufügen. Die Arbeit an dem Abschnitt 'Personalisierte Kundenreisen mit KI' hat begonnen.
# Eine verbleibende Aufgabe besteht darin, aktualisierte Statistiken zur KI-Adoption in kleinen Unternehmen zu finden.
Diese Zusammenfassung wird dann als neuer Gedächtniseintrag höherer Ebene in der Kategorie „Archivierte Projektzusammenfassungen“ gespeichert, wobei bei Bedarf auf die detaillierten Gedächtnisse verwiesen wird. Wenn der Agent den Status des Projekts Acme Corp schnell abrufen muss, kann er diese Zusammenfassung direkt abholen, anstatt in allen einzelnen Notizen zu wühlen.
Dieser Ansatz hilft auch beim Vergessen. Wenn ein Projekt abgeschlossen und archiviert ist, können die detaillierten Gedächtnisse schließlich gelöscht oder in eine Kaltlagerung verschoben werden, während die wertvollen Zusammenfassungen bleiben.
Gedächtnisabruf mit HMF
Der Abrufprozess wird auch intelligenter:
- Erstklassifizierung: Wenn der Agent Informationen abrufen muss (zum Beispiel um auf eine Benutzeranfrage zu antworten oder eine Aktion zu informieren), klassifiziert sein „Gedächtnismanager“ zunächst den *Typ* der benötigten Informationen. „Was sind meine Kundenfristen?“ würde auf „Kundenprojekte“ verweisen. „Erzählen Sie mir von meinen persönlichen Schreibpräferenzen“ würde auf „Persönliche Präferenzen“ verweisen.
- Zielgerichtete Suche: Der Agent führt dann eine Vektorsuche *nur innerhalb des Gedächtnisses der identifizierten Kategorie* durch. Das ist viel schneller und präziser, als in einer monolithischen Datenbank zu suchen.
- Kontextuelles Feintuning (optional): Wenn die ursprüngliche Suche zu viele oder zu wenige Ergebnisse liefert, kann der Agent seine LLM-Fähigkeiten nutzen, um die Suchanfrage zu verfeinern, die Ergebnisse neu zu ordnen oder sogar zu entscheiden, ob er eine breitere Kategorie oder die Zusammenfassungsschicht konsultieren möchte. „Okay, ich habe einige Fristen gefunden, aber welche ist die *dringendste*?“
- Konsolidierter Abruf: Für komplexe Aufgaben kann der Agent eine hochrangige Zusammenfassung aus der Schicht 3 extrahieren und gegebenenfalls in die Kategorien der Schicht 2 für spezifische Details vertiefen.
Dieser „stufenweise Zugriff“ ist entscheidend. Er imitiert, wie Menschen sich an Informationen erinnern: Wir erinnern uns nicht an jedes Gespräch, das wir hatten, wenn wir nach Neuigkeiten in unserer Arbeit gefragt werden. Wir erinnern uns an die Zusammenfassung unserer Arbeit, dann an spezifische Projekte und schließlich an spezifische Details innerhalb dieser Projekte.
Über die Speicherung hinaus: Aktives Gedächtnismanagement
HMF eröffnet auch die Möglichkeit eines aktiveren Gedächtnismanagements durch den Agenten selbst:
- Selbstreflexion und Konsolidierung: In regelmäßigen Abständen kann der Agent seine eigenen Gedächtnisse innerhalb einer Kategorie überprüfen, Redundanzen oder Konsolidierungsmöglichkeiten identifizieren und proaktiv konsolidieren.
- Vergesserichtlinie: Regeln für das Vergessen festlegen. „Archivieren Sie alle (aktiven) Artikelideen, die seit 3 Monaten nicht mehr bearbeitet wurden.“ „Löschen Sie Einträge aus ‘Allgemeiner Unterhaltung’, die älter als 2 Wochen sind.“ Dadurch wird eine Gedächtnisüberlastung ohne manuelles Eingreifen verhindert.
- Zielmotiviertes Kürzen: Wenn ein spezifisches Projekt abgeschlossen ist, kann der Agent die zugehörigen detaillierten Gedächtnisse zur Archivierung oder eventuell Löschung markieren, während nur die hochrangige Zusammenfassung beibehalten wird.
Mein Schreibagent hat jetzt einen nächtlichen Cron-Job, der eine Funktion zur „Gedächtnisüberprüfung“ ausführt. Er sucht nach „(aktiven) Artikelideen“, die seit mehr als 60 Tagen nicht aktualisiert wurden, und informiert mich darüber. Wenn ich bestätige, dass sie nicht mehr aktiv sind, verschiebt er sie in „(archivierte) Artikelideen“ und erstellt eine prägnante Zusammenfassung. Das hat mein aktives Gedächtnis erheblich bereinigt, und mein Agent ist viel weniger geneigt, alte, irrelevante Ideen vorzuschlagen.
Zu beachten für die Architektur Ihres Agenten
Wenn Sie Agenten bauen und Gedächtnisprobleme in großem Maßstab haben, empfehle ich Ihnen Folgendes zu versuchen:
- Behandeln Sie nicht alle Gedächtnisse gleich: Unterscheiden Sie zwischen kurzfristigem Gesprächskontext, kategorisiertem Wissen im mittelfristigen Rahmen und zusammenfassender Weisheit im langfristigen Rahmen.
- Implementieren Sie die Kategorisierung frühzeitig: Gestalten Sie das Gedächtnissystem Ihres Agenten mit expliziten Kategorien, die auf seinen Hauptfunktionen oder Nutzerbereichen basieren. Verwenden Sie einen kleinen LLM-Call oder ein regelbasiertes System, um eingehende Informationen zu klassifizieren.
- Verwenden Sie mehrere (kleinere) Vektorlagern/Indizes: Anstatt eine riesige Vektordatenbank zu haben, ziehen Sie in Betracht, separate Indizes oder Sammlungen für jede Gedächtniskategorie zu verwenden. Dadurch werden Suchen viel schneller und zielgerichteter.
- Nutzen Sie die Zusammenfassung für langfristiges Gedächtnis: Richten Sie einen Prozess (manuell oder automatisiert) ein, um regelmäßig Gruppen von verwandten detaillierten Gedächtnissen zusammenzufassen. Speichern Sie diese Zusammenfassungen separat und verknüpfen Sie sie mit den detaillierten Einträgen.
- Gestalten Sie für das Vergessen: Integrieren Sie explizite Richtlinien zum Kürzen oder Archivieren veralteter und irrelevanter Informationen. Lassen Sie nicht zu, dass Ihr Agent zu einem digitalen Sammler wird.
- Geben Sie Ihrem Agenten eine Rolle als „Gedächtnismanager“: Anstatt einfach Informationen im Gedächtnis zu stauen, geben Sie Ihrem Agenten eine interne Funktion oder einen Unteragenten, dessen einzige Aufgabe darin besteht, zu entscheiden, *wie* und *wo* Informationen gespeichert, abgerufen und verwaltet werden sollen.
Der Übergang von einem flachen und monolithischen Gedächtnis zu einem hierarchischen und aktiv verwalteten System war eine signifikante Veränderung für meinen Schreibagenten. Es ist schneller, intelligenter und viel weniger anfällig für semantische Verwirrung. Es erfordert ein wenig mehr anfängliches Design, aber die Vorteile in Bezug auf Leistung und Konsistenz des Agenten sind den Aufwand wirklich wert. Probieren Sie HMF in Ihrem nächsten Agentenprojekt aus und lassen Sie mich wissen, wie es läuft!
Bis zum nächsten Mal, bleiben Sie dran, intelligente Agenten zu bauen!
Alex Petrov, agntai.net
Verwandte Artikel
- Beste Praktiken für die Skalierung von KI-Agenten
- Ankerverstärkendes Lernen: Visuelle KI mit erklärbarem Denken verbessern
- Wie man die Skalierbarkeit von KI-Agenten sicherstellt
🕒 Published:
Related Articles
- Den Cache von Agenten beherrschen: Tipps aus der Praxis
- Rapports de force rédigés par l’IA : Les agents d’immigration utilisent la technologie pour documenter les rencontres
- Entsperren Sie Ihre Marke: Erstellen Sie das perfekte Logo eines Convolutional Neural Networks
- NVLink Fusion Gets a $2B Bet on Marvell’s Custom Silicon