Hallo zusammen, hier ist Alex von agntai.net. Es ist März 2026 und ich kämpfe mit etwas, das wahrscheinlich vielen von euch im Kopf liegt: Wie baut man Agenten, die nicht einfach wie verbesserte API-Aufrufe erscheinen, sondern die wirklich ein gewisses Maß an intelligentem und persistentem Verhalten zeigen? Genauer gesagt denke ich viel über Gedächtnisarchitekturen für KI-Agenten nach. Es ist eine Sache, ein GPT-Modell dazu zu bringen, auf eine Frage zu antworten; es ist etwas anderes, einen Agenten zu haben, der sich an ein mehrtägiges Projekt erinnert, seine Strategie an vergangene Fehlschläge anpasst und tatsächlich aus den Interaktionen lernt.
Seit einiger Zeit stützen sich viele von uns stark auf Vektordatenbanken als unser primäres externes Gedächtnis für Agenten. Und mal ganz ehrlich, sie sind großartig für die durch Abruf angereicherte Generation (RAG) und um unseren Agenten Zugang zu riesigen Mengen an faktischen oder kontextuellen Informationen zu geben. Aber nachdem ich ein paar Prototypen für Kunden erstellt habe – einer versucht, ein persönlicher Forschungsassistent zu sein, der andere ein dynamischer Kunden-Support-Bot – habe ich begonnen, ihre Einschränkungen zu bemerken. Sie sind hervorragend für „Woran haben wir letzten Dienstag gesprochen?“ oder „Was sind die Hauptmerkmale von Produkt X?“, aber sie haben Schwierigkeiten mit „Erinnere dich an diese subtile Vorliebe, die ich vor drei Wochen geäußert habe, und integriere sie in deine aktuelle Empfehlung.“
Ich hatte eine Offenbarung, als ich versuchte, meinem Forschungsassistenten klarzumachen, dass ich *wirklich* die zu akademischen Artikel hasse, es sei denn, es ist absolut notwendig. Ich sagte ihm das, er nickte, und dann zwei Tage später warf er mir einen weiteren dichten arXiv-Artikel vor die Füße. Die Repräsentationsvektoren für „Ich mag keine akademischen Artikel“ waren da, aber der Agent lernte nicht wirklich aus meinem Feedback auf eine Weise, die seine langfristige Suchstrategie tatsächlich veränderte. Es war, als würde man mit jemandem sprechen, der ein hervorragendes Kurzzeitgedächtnis hat, aber kein Langzeitgedächtnis für persönliche Vorlieben oder sich entwickelnden Kontext.
Über die Vektorsuche hinaus: Der Bedarf an einem multimodalen Gedächtnis
Mein Fazit? Wir müssen über eine einseitige Abhängigkeit von Vektordatenbanken für das Gedächtnis von Agenten hinausgehen. Es geht nicht darum, sie zu ersetzen, sondern sie mit anderen Formen von Gedächtnis zu ergänzen, die unterschiedlichen Arten von Informationen und verschiedenen zeitlichenHorizonten gerecht werden. Denken Sie darüber nach, wie Menschen sich an Dinge erinnern. Wir haben ein kurzes Arbeitsgedächtnis, episodisches Gedächtnis (Ereignisse), semantisches Gedächtnis (Fakten) und prozedurales Gedächtnis (wie man Dinge tut). Ein einzelner Vektor zur Kodierung eines Gesprächsausschnitts trennt diese Elemente nicht klar.
Das Problem, sich ausschließlich auf die Vektorsuche für alles zu verlassen, ist, dass sie alle Erinnerungen als gleich wichtig und gleich strukturiert behandelt. Eine subtile Vorliebe, ein grundlegender Glaube, ein langfristiges Ziel oder eine vorübergehende Beobachtung – all dies wird in Repräsentationen vermischt. Wenn der Agent sein Gedächtnis abfragt, ruft er das ab, was semantisch ähnlich ist, aber nicht unbedingt das, was *am relevantesten* auf eine tiefgreifend kontextuelle oder zeitlich bewusste Weise ist. Es ist wie eine Bibliothek, in der jedes Buch nur eine Sammlung von Schlüsselwörtern ist und in der Sie Dinge nur finden können, indem Sie diese Schlüsselwörter abgleichen, nicht indem Sie das Genre des Buches, die Absicht des Autors oder seinen Platz in einer Serie verstehen.
Was also ist eine „multimodale“ Gedächtnisarchitektur für einen KI-Agenten? Für mich bedeutet es, verschiedene Arten von Informationen zu segmentieren und zu strukturieren und dann den zentralen Denkprozess des Agenten intelligent entscheiden zu lassen, welchen Speicher er konsultieren soll und wie er ihn aktualisieren kann.
1. Kurzzeitgedächtnis / Arbeitsgedächtnis: Das Notizbuch
Das ist der unmittelbare Kontext deines Agenten. Das ist es, was der Agent gerade aktiv denkt. Für mich handelt es sich normalerweise um eine einfache Liste der letzten Runden eines Gesprächs, der aktuellen Aufgabenparameter und vorübergehender Beobachtungen. Es ist volatil, und das wird häufig gelöscht oder zusammengefasst. Denken Sie daran, wie der RAM des Agenten.
Beispiel: Wenn mein Forschungsassistent derzeit damit beschäftigt ist, „Artikel über Architekturverbesserungen von Transformatoren für 2024“ zu finden, enthält sein Arbeitsgedächtnis diese spezifische Anfrage, die letzten Artikel, die er überprüft hat, und möglicherweise einen Hinweis, der anzeigt, dass er noch bei der Recherche ist. Das wird in der Regel damit verwaltet, den jüngsten Gesprächsverlauf direkt an das LLM weiterzugeben oder ihn in einem einfachen Speicherpuffer zu behalten.
2. Episodisches Gedächtnis: Das Ereignisprotokoll
Hier glänzen Vektordatenbanken wirklich, aber mit einem Twist. Anstatt einfach Rohstücke aus Gesprächen zu integrieren, finde ich es hilfreicher, die Ereignisse *zusammenzufassen* und zu *taggen*, bevor ich sie integriere. Ein „Ereignis“ kann eine Benutzerinteraktion, eine Aktion des Agenten, eine getroffene Entscheidung oder eine Schlüsselbeobachtung sein. Jedes Ereignis hat einen Zeitstempel, eine kurze Beschreibung und möglicherweise einige zugehörige Entitäten oder eine Gefühlseinschätzung.
Warum zusammenfassen/taggen? Weil ein Rohtranskript eines Gesprächs zu laut sein kann. „Der Benutzer sagte ‚das ist interessant‘, dann ‚können Sie mir mehr zeigen‘, dann ‚was ist mit X?‘“ kann zusammengefasst werden zu „Der Benutzer hat sein Interesse geäußert, mehr Informationen angefordert und dann Fragen zu X gestellt.“ Das macht die Repräsentationen konzentrierter auf den *Sinn* der Interaktion als auf die spezifische Formulierung. Es erleichtert auch ein späteres Filtern nach Tags.
# Pseudo-Code Python für einen Eintrag im episodischen Gedächtnis
class EpisodicMemoryEntry:
def __init__(self, timestamp, description, tags=None, associated_entities=None, raw_context=None):
self.timestamp = timestamp
self.description = description # Zusammengefasstes Ereignis durch das LLM
self.tags = tags if tags is not None else []
self.associated_entities = associated_entities if associated_entities is not None else {}
self.raw_context = raw_context # Ursprüngliche Interaktion für eine detaillierte Erinnerung, falls erforderlich
def to_embedding_text(self):
# Fügen Sie relevante Felder für das Einbetten zusammen
return f"Ereignis am {self.timestamp}: {self.description}. Tags: {', '.join(self.tags)}. Entitäten: {self.associated_entities}"
# Anwendungsbeispiel:
# Angenommen, 'llm_summarize_event' ist eine Funktion, die ein LLM aufruft,
# um einen Gesprächsausschnitt in eine Beschreibung zu verdichten und Tags/Entitäten zu extrahieren.
conversation_chunk = "Benutzer: Ich muss diesen Bericht bis Freitag fertigstellen. Agent: In Ordnung, wie kann ich helfen? Benutzer: Können Sie die aktuellen Markttrends für KI im Gesundheitswesen finden? Ich bin besonders an den Finanzierungsrunden interessiert."
# LLM aufrufen, um diesen Abschnitt zu verarbeiten
summary, tags, entities = llm_summarize_event(conversation_chunk)
# summary: "Der Benutzer hat nach den aktuellen Markttrends für KI im Gesundheitswesen gefragt, wobei der Fokus auf den Finanzierungsrunden liegt, die bis Freitag fertiggestellt werden müssen."
# tags: ["forschungsanforderung", "fristsensibel", "KI_gesundheitswesen", "finanzierungsrunden"]
# entities: {"topic": "KI im Gesundheitswesen", "deadline": "Freitag", "focus": "Finanzierungsrunden"}
event = EpisodicMemoryEntry(
timestamp=datetime.now(),
description=summary,
tags=tags,
associated_entities=entities,
raw_context=conversation_chunk
)
# Dann event.to_embedding_text() integrieren und in der Vektordatenbank speichern
Wenn der Agent vergangene Ereignisse abrufen muss, fragt er dieses episodische Gedächtnis ab, aber jetzt kann er auch nach Tags, Entitäten oder Zeiträumen filtern, zusätzlich zur semantischen Ähnlichkeit.
3. Semantisches Gedächtnis: Der Wissensgraph der Fakten und Überzeugungen
Das ist vielleicht der am wenigsten entwickelte Bereich in vielen Agentenarchitekturen, aber hier kann der Agent strukturierte Fakten, Beziehungen und seine eigenen sich entwickelnden Überzeugungen oder Vorlieben speichern. Vektordatenbanken sind ausreichend für allgemeine Fakten, aber nicht ideal, um Beziehungen darzustellen (zum Beispiel „Alex bevorzugt X gegenüber Y“, „Das Projekt Z ist eine Unteraufgabe des Projekts A“).
Hier habe ich begonnen, mit Wissensgraphen zu experimentieren. Anstatt einfach alles zu integrieren, nutze ich LLM, um Tripel (Subjekt-Prädikat-Objekt) aus den Interaktionen zu extrahieren und in einer grafischen Datenbank (wie Neo4j oder sogar einer einfachen relationalen Datenbank, wenn der Graph nicht zu komplex ist) zu speichern.
Warum ein Wissensgraph? Weil er die Beziehungen explizit modelliert. Wenn mein Agent lernt, dass „Alex akademische Artikel nicht mag“, ist das eine direkte Beziehung. Wenn er dann lernt, dass „Artikel über KI im Gesundheitssektor oft akademisch sind“, kann er ableiten: „Alex mag wahrscheinlich keine Artikel über KI im Gesundheitssektor.“ Diese Art von Schlussfolgerung ist nur schwer mit vektorieller Ähnlichkeit zu erreichen.
# Pseudo-Code Python zur Extraktion und Speicherung von Tripeln
def extract_and_store_triples(agent_id, text_input):
# LLM Aufruf zur Extraktion von Tripeln.
# Prompt: "Extrahiere Fakten-Tripel (Subjekt, Prädikat, Objekt) aus dem folgenden Text.
# Beispiel: 'Alex mag Kaffee' -> (Alex, mag, Kaffee)."
# text_input = "Der Nutzer Alex hat erwähnt, dass er prägnante Zusammenfassungen bevorzugt und keine zu akademischen Artikel mag."
triples_str = call_llm_for_triple_extraction(text_input)
# Beispielausgabe: "[(Alex, mag, prägnante Zusammenfassungen), (Alex, mag nicht, akademische Artikel)]"
extracted_triples = parse_triples_string(triples_str) # Wandelt den String in eine Liste von Tupeln um
for s, p, o in extracted_triples:
# Speicherung in einer Graphdatenbank (zum Beispiel durch die Verwendung eines einfachen Python-Dictionaries zur Demonstration)
# In einem echten System wäre dies ein Neo4j-Clientaufruf oder ähnliches
graph_db_add_triple(agent_id, s, p, o)
# Beispiel für 'graph_db_add_triple' (vereinfacht)
knowledge_graph = {} # {Subjekt: {Prädikat: [Objekte]}}
def graph_db_add_triple(agent_id, s, p, o):
if agent_id not in knowledge_graph:
knowledge_graph[agent_id] = {}
if s not in knowledge_graph[agent_id]:
knowledge_graph[agent_id][s] = {}
if p not in knowledge_graph[agent_id][s]:
knowledge_graph[agent_id][s][p] = []
if o not in knowledge_graph[agent_id][s][p]: # Duplikate vermeiden
knowledge_graph[agent_id][s][p].append(o)
# Zum Abfragen:
# Was mag Alex nicht? -> knowledge_graph[agent_id]["Alex"]["mag nicht"]
Der Agent kann diesen Graph nicht nur anhand von Schlüsselwörtern abfragen, sondern auch anhand von Beziehungen. „Was sind Alex’ Präferenzen?“ oder „Welche Aufgaben sind mit Projekt A verbunden?“ Das ist eine viel leistungsfähigere Möglichkeit, strukturierte Kenntnisse abzurufen.
4. Prozedurales Gedächtnis: Die Fähigkeitenbibliothek
Dies entspricht nicht dem Gedächtnis im traditionellen Sinne, sondern eher einer Sammlung von Werkzeugen, Funktionen und Workflows, die der Agent ausführen kann. Wenn ein LLM entscheidet, dass es eine Aktion ausführen muss, konsultiert es diese „Fähigkeitenbibliothek.“ Dies könnte eine Liste von Python-Funktionen, API-Spezifikationen oder sogar vorgegebene mehrstufige Workflows sein.
Meine Erfahrung: Ich habe es als hilfreich empfunden, diese Fähigkeiten für das LLM durch beschreibende Docstrings und klare Funktionssignaturen entdeckbar zu machen. Das LLM kann dann das richtige Werkzeug basierend auf dem aktuellen Ziel auswählen.
class AgentSkills:
def search_web(self, query: str) -> str:
"""
Sucht im Web nach Informationen zu der Anfrage.
Nützlich für allgemeines Wissen, Nachrichten und aktuelle Ereignisse.
Args:
query (str): Die Suchanfrage.
Returns:
str: Eine Zusammenfassung der Suchergebnisse.
"""
# ... tatsächliche Implementierung der Internetsuche ...
return f"Suchergebnisse für '{query}': ..."
def analyze_document(self, document_id: str, analysis_type: str) -> str:
"""
Analysiert ein angegebenes Dokument für verschiedene Einblicke.
Nützlich zum Zusammenfassen, Extrahieren von Hauptpunkten oder zur Sentimentanalyse eines Dokuments.
Args:
document_id (str): Die ID des zu analysierenden Dokuments.
analysis_type (str): Der durchzuführen Analyse-Typ (z.B. 'Zusammenfassung', 'Stichworte', 'Stimmung').
Returns:
str: Das Ergebnis der Analyse.
"""
# ... Implementierung der Dokumentanalyse ...
return f"Analyse des Dokuments {document_id} für {analysis_type}: ..."
def get_user_preferences(self, user_id: str, preference_type: str = None) -> dict:
"""
Ruft die gespeicherten Präferenzen für einen bestimmten Benutzer ab.
Nützlich zur Personalisierung von Antworten und Aktionen.
Args:
user_id (str): Die ID des Benutzers.
preference_type (str, optional): Spezifischer Typ der abzurufenden Präferenz (z.B. 'mag nicht', 'Themen').
Returns:
dict: Ein Dictionary der Benutzerpräferenzen.
"""
# Dies würde das semantische Gedächtnis abfragen (Wissensgraph)
# Zum Vereinfachen hier fiktive Daten zurückgeben
if user_id == "Alex" and preference_type == "mag nicht":
return {"mag nicht": ["akademische Artikel", "ausführliche Erklärungen"]}
return {"präferenzen": "..."}
# Das LLM würde aufgefordert, diese Funktionen basierend auf seinem Denken auszuwählen und aufzurufen.
Implementierung: Die Orchestrierungsschicht
Die wahre Magie geschieht, wie der zentrale Denkprozess des Agenten (normalerweise das LLM selbst) mit diesen verschiedenen Gedächtnisspeichern interagiert. Es handelt sich nicht einfach um ein passives Abrufsystem; der Agent muss aktiv entscheiden:
- Welche Informationen benötige ich gerade?
- Welcher Gedächtnisspeicher hat am ehesten diese Informationen?
- Wie sollte ich mein Gedächtnis basierend auf dieser neuen Interaktion/Beobachtung aktualisieren?
Dieser Entscheidungsprozess ist der Bereich, in dem der Agent wirklich dynamisch wird. Ich strukturiere dies typischerweise mit einem Prompt, der das LLM dazu anregt, laut nachzudenken, zu planen und dann Gedächtnisoperationen auszuführen. Es ist eine Kette von Denkprozessen, die die Gedächtnisinteraktion integriert.
Mein aktueller Ansatz:
- Wahrnehmen: Der Agent erhält eine Eingabe (Benutzereingabe, Systemereignis).
- Nachdenken & Planen: Das LLM analysiert die Eingabe, berücksichtigt die aktuellen Ziele und formuliert einen Plan. Dieser Plan umfasst oft das Abfragen des Gedächtnisses.
- „Muss ich vergangene Interaktionen (episodisch) in Erinnerung rufen? Was sind die bekannten Präferenzen des Benutzers (semantisch)? Habe ich Werkzeuge, um das zu erreichen (prozedural)?“
- Es könnte das episodische Gedächtnis nach ähnlichen vergangenen Situationen oder das semantische Gedächtnis nach relevanten Fakten abfragen.
- Handeln: Basierend auf dem Plan und den abgerufenen Erinnerungen entscheidet das LLM über eine Aktion (z.B. eine Antwort generieren, ein Werkzeug aufrufen, das Gedächtnis aktualisieren).
- Speichern & Lernen: Nach einer Aktion denkt das LLM über das Ergebnis nach und aktualisiert seine verschiedenen Gedächtnisspeicher.
- Eine neue Interaktion wird zusammengefasst und dem episodischen Gedächtnis hinzugefügt.
- Neue Fakten oder Präferenzen werden extrahiert und dem semantischen Wissensgraph hinzugefügt.
- Wenn eine Strategie fehlschlägt, könnte es eine „gelernte Lektion“-Eingabe im semantischen Gedächtnis erzeugen.
Dieser iterative Prozess ermöglicht es dem Agenten, im Laufe der Zeit ein reicheres und nuancierteres Verständnis seiner Umgebung, seines Benutzers und von sich selbst zu entwickeln. Es geht über das einfache Abrufen von Fakten hinaus, um tatsächlich anhaltende Überzeugungen zu formen und sein Verhalten anzupassen.
Praktische Tipps für die Architektur Ihres Agenten
Wenn Sie gerade KI-Agenten bauen und an die Grenzen einfacher RAG stoßen, empfehle ich Folgendes:
- Behandeln Sie nicht das gesamte Gedächtnis gleich. Kategorisieren Sie die Art von Informationen, die Sie speichern müssen: Kurzzeitkontext, Ereignisgeschichten, strukturierte Fakten/Präferenzen und Fähigkeiten.
- Erweitern Sie Ihre Vektor-Datenbank. Sie ist großartig für das episodische Gedächtnis, insbesondere wenn Sie Eingaben zusammenfassen und kennzeichnen. Aber machen Sie sie nicht zum einzigen Gedächtnisspeicher.
- Experimentieren Sie mit Wissensgraphen für das semantische Gedächtnis. Selbst ein einfacher Tripelspeicher kann einen enormen Unterschied darin machen, wie Ihr Agent strukturierte Beziehungen und grundlegende Überzeugungen speichert und abruft. Dies ermöglicht tatsächlich ein logisches Denken, nicht nur eine Ähnlichkeitssuche.
- Entwickeln Sie für aktives Gedächtnismanagement. Der zentrale Denkprozess des Agenten (Ihr LLM-Prompt) sollte explizit Schritte zum Abfragen, Aktualisieren und Nachdenken über seine verschiedenen Gedächtnisspeicher enthalten. Lassen Sie nicht zu, dass alles in einen einzigen Prompt geworfen wird.
- Halten Sie das prozedurale Gedächtnis (Werkzeugnutzung) organisiert. Klare Beschreibungen und Beispiele für Ihre Werkzeuge helfen dem LLM, seine Fähigkeiten effektiv zu nutzen.
Der Bau von echten intelligenten Agenten beschränkt sich nicht nur auf größere Modelle; es geht um intelligentere Designs. Indem wir unseren Agenten ein menschlicheres Gedächtnissystem anbieten, können wir uns Agenten näher bringen, die nicht nur erinnern, sondern tatsächlich lernen und sich anpassen. Es ist ein herausfordernder, aber unglaublich lohnender Weg, und ich kann es kaum erwarten zu sehen, wohin wir ihn alle als Nächstes führen werden.
🕒 Published: