Hallo, Auszubildender! Emma hier, zurück auf agent101.net, und heute werden wir uns mit etwas beschäftigen, was mir seit Wochen im Kopf (und in meiner Entwicklungsumgebung) herumgeht: wie man sicherstellt, dass Ihr KI-Agent sich wirklich an Dinge erinnert. Nicht nur für eine Aufgabe, sondern um den Kontext, das Wissen und die Persönlichkeit über mehrere Interaktionen hinweg zu bewahren. Denn ganz ehrlich, ein abgelenkter Agent ist nur ein ausgefeiltes Skript, oder?
Das aktuelle Datum ist der 25. März 2026, und die Welt der KI-Agenten entwickelt sich rasant. Vor ein oder zwei Jahren waren wir beeindruckt von einem Chatbot, der in der Lage war, fünf Minuten lang ein anständiges Gespräch zu führen. Jetzt? Wir erwarten von unseren Agenten, dass sie unsere digitalen Begleiter, unsere Recherche-Assistenten, unsere Code-Reviewer sind, und sie müssen den Eindruck vermitteln, uns zu kennen, oder zumindest zu wissen, was sie tun. Es geht nicht darum, eine perfekt entwickelte AGI zu schaffen (noch nicht!), sondern darum, Ihre täglichen und praktischen KI-Agenten nützlicher und intelligenter zu machen und weniger wie Dory aus Findet Nemo.
Ich habe mit verschiedenen Agenten-Frameworks experimentiert, von LangChain bis AutoGen, und ein ständiges Hindernis für Anfänger (und ehrlich gesagt auch manchmal für mich!) ist die effektive Verwaltung von Zustand und Gedächtnis. Das wird in grundlegenden Tutorials oft vernachlässigt, die dazu tendieren, sich auf eine einfache Prompt-Antwort-Schleife zu konzentrieren. Aber wenn Sie möchten, dass Ihr Agent auf seinen vorherigen Aktionen aufbaut, aus seinen Fehlern lernt oder sich sogar nach der ersten Interaktion an Ihren Namen erinnert, benötigen Sie eine Strategie.
Warum vergisst mein Agent ständig, worüber wir gesprochen haben?
Stellen Sie sich das vor: Ich versuchte, einen einfachen Agenten zu erstellen, der mir hilft, Ideen für Blogartikel zu brainstormen. Meine anfängliche Einrichtung war ziemlich einfach: Ich gab ihm ein Thema, und er lieferte mir Ideen. Super für punktuelle Prompts. Aber dann sagte ich: „Okay, jetzt entwickle die Idee Nummer drei,“ und er schaute mich an (im übertragenen Sinne) mit einem leeren Blick und fragte: „Welche Idee Nummer drei?“ Das war frustrierend! Das bedeutete, dass ich ständig den Kontext wiedergeben musste, was die Interaktion unangenehm und ineffektiv machte.
Diese „Ablenkung“ resultiert aus der zustandslosen Natur der meisten großen Sprachmodelle (LLMs) in ihrem Kern. Jeder API-Aufruf wird oft als frische Anfrage behandelt. Es erinnert sich nicht intrinsisch an den Gesprächsverlauf oder die Ergebnisse vorheriger Aufrufe. Die Agenten-Frameworks existieren, um diese Aufrufe zu orchestrieren, aber Sie, der Entwickler, sind dafür verantwortlich, zu entscheiden, welche Informationen behalten werden. Hier kommt das Gedächtnis ins Spiel.
Die beiden großen Gedächtniskategorien von Agenten: Kurzzeitgedächtnis und Langzeitgedächtnis
Wenn wir von einem KI-Agenten sprechen, der sich „erinnert“, sprechen wir normalerweise von zwei Haupttypen von Gedächtnis, ähnlich wie unser eigenes Gedächtnis:
Kurzzeitgedächtnis: Der Gesprächspuffer
Das ist der einfachste Gedächtnistyp und der, mit dem die meisten Anfänger beginnen sollten. Kurzzeitgedächtnis bezieht sich auf das Erinnern an die unmittelbare Vergangenheit – das aktuelle Gespräch. Denken Sie daran wie an Ihr Arbeitsgedächtnis, wenn Sie mit einem Freund sprechen. Sie erinnern sich daran, was kürzlich gesagt wurde, wer was gesagt hat und dem allgemeinen Verlauf der Diskussion.
Für einen KI-Agenten bedeutet dies normalerweise, den aktuellen Austausch von Nachrichten (Prompts und Antworten) zu speichern und diese mit jedem neuen Prompt an das LLM zu übermitteln. Die meisten Agenten-Frameworks bieten einfache Möglichkeiten, dies umzusetzen.
Praktisches Beispiel: ConversationBufferMemory von LangChain
Sehen wir uns ein einfaches Beispiel in Python an, das LangChain verwendet. Es demonstriert, wie man eine einfache Gesprächshistorie führt.
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# Initialisieren Sie Ihr LLM
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
# Gedächtnis initialisieren
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# Einfaches Prompt-Modell definieren
template = """You are a friendly AI assistant.
Current conversation:
{chat_history}
Human: {input}
AI:"""
prompt = PromptTemplate(input_variables=["chat_history", "input"], template=template)
# Erstellung der Gesprächskette
conversation_chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True, # Ermöglicht das Sehen, was passiert
memory=memory
)
# Erste Interaktion
print("--- Interaktion 1 ---")
response1 = conversation_chain.invoke({"input": "Hallo, ich heiße Emma. Und du?" })
print(f"AI: {response1['text']}")
# Zweite Interaktion, beachten Sie, wie 'chat_history' automatisch übergeben wird
print("\n--- Interaktion 2 ---")
response2 = conversation_chain.invoke({"input": "Kannst du mir eine interessante Tatsache über KI erzählen?" })
print(f"AI: {response2['text']}")
# Dritte Interaktion, der Agent erinnert sich an meinen Namen!
print("\n--- Interaktion 3 ---")
response3 = conversation_chain.invoke({"input": "Danke! Übrigens, wie alt ist Emma?" })
print(f"AI: {response3['text']}")
print("\n--- Endzustand des Gedächtnisses ---")
print(memory.load_memory_variables({}))
Was passiert hier?
- `ConversationBufferMemory` speichert die Nachrichten fortlaufend.
- Das `PromptTemplate` enthält eine Variable `{chat_history}`.
- Wenn `conversation_chain.invoke()` aufgerufen wird, injiziert LangChain automatisch die gespeicherte Gesprächshistorie in das Prompt, bevor es an das LLM gesendet wird.
Das ist großartig für kurze Gespräche. Aber was passiert, wenn Ihr Gespräch sich hinzieht? LLMs haben Kontextfenster (eine Begrenzung für die Menge an Text, die sie gleichzeitig verarbeiten können). Wenn Ihre Chat-Historie zu lang wird, erreichen Sie entweder diese Grenze und erhalten einen Fehler, oder die älteren Teile des Gesprächs werden gekürzt. Hier kommen ausgefeiltere Strategien für das Kurzzeitgedächtnis ins Spiel, wie `ConversationBufferWindowMemory` (speichert nur die letzten N Interaktionen) oder `ConversationSummaryBufferMemory` (fasst alte Teile des Gesprächs zusammen, um Platz zu sparen).
Langzeitgedächtnis: Wissensdatenbank und Vektorspeicher
Kurzzeitgedächtnis betrifft das unmittelbare Gespräch. Langzeitgedächtnis betrifft das anhaltende Wissen, Fakten, vergangene Erfahrungen oder sogar eine erlernte „Persönlichkeit“, die ein Agent über verschiedene Sitzungen oder sogar über verschiedene Aufgaben hinweg behalten sollte. Hier wird es wirklich interessant und mächtig.
Mein Beispiel eines Brainstorming-Agenten für Blogartikel ist ein perfekter Fall für Langzeitgedächtnis. Ich möchte, dass er sich an meinen bevorzugten Stil, meine Nische (KI-Agenten für Anfänger) und sogar an vergangene Themen, die gut funktioniert haben, erinnert, damit er nicht jedes Mal etwas völlig Unpassendes vorschlägt. Ich möchte ihm nicht jeden Tag agent101.net erklären!
Die gängigste Methode zur Implementierung des Langzeitgedächtnisses umfasst derzeit zwei Schlüsselkomponenten:
- Einfügungsmodelle: Diese Modelle konvertieren Text (Ihr Wissen, Ihre vergangenen Interaktionen usw.) in numerische Vektoren. Texte mit ähnlichen Bedeutungen haben Vektoren, die numerisch „nah“ beieinander liegen.
- Vektorspeicher (oder Vektor-Datenbanken): Das sind spezialisierte Datenbanken, die entwickelt wurden, um diese numerischen Vektoren effizient zu speichern und abzurufen. Wenn Sie eine neue Anfrage oder einen neuen Kontext haben, konvertieren Sie ihn in einen Vektor und suchen dann im Vektorspeicher nach den ähnlichsten vorhandenen Vektoren. Der Text, der mit diesen ähnlichen Vektoren verknüpft ist, wird dann abgerufen und kann in Ihr Prompt eingefügt werden.
Der Prozess wird oft als retrieval-augmented generation (RAG) bezeichnet. Sie rufen relevante Informationen aus Ihrem Langzeitgedächtnis ab und erweitern das Prompt des LLM damit.
Praktisches Beispiel: Verwendung eines Vektorspeichers für die Persönlichkeit des Agenten
Stellen wir uns vor, wir möchten, dass unser Agent eine konsistente „Persona“ hat oder auf eine Wissensdatenbank über unsere Marke zugreift. Wir können diese Informationen in einem Vektorspeicher speichern.
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.prompts import PromptTemplate
# 1. Definieren Sie unser 'Langzeitwissen' (z.B. Agentenpersona, Markenvorgaben)
# In einem realen Szenario würde dies aus einer Datei, einer Datenbank usw. geladen werden.
brand_persona_info = """
Der Name des Agenten ist Emma. Sie schreibt für agent101.net.
Ihr Schreibstil ist freundlich, praktisch und konzentriert sich darauf, Anfängern zu helfen, AI-Agenten zu verstehen.
Sie verwendet Anekdoten und vermeidet übermäßiges technisches Jargon, wann immer möglich.
Ihr Hauptpublikum besteht aus Personen, die neu in der Welt der AI-Agenten sind oder nach praktischen Implementierungstipps suchen.
Schlüsselthemen sind: LangChain, AutoGen, Prompt-Engineering für Agenten, Gedächtnisverwaltung, Nutzung von Tools.
Sie möchte komplexe AI-Konzepte entmystifizieren.
"""
# 2. Den Text in handhabbare Stücke aufteilen (für größere Dokumente)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = text_splitter.create_documents([brand_persona_info])
# 3. Embeddings erstellen und in einem Vektorspeicher speichern
# FAISS ist eine gute lokale Option für Anfänger. In der Produktion würden Sie Pinecone, Chroma usw. verwenden.
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)
# 4. Den LLM initialisieren
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.5)
# 5. Einen Retriever aus dem Vektorspeicher erstellen
retriever = vectorstore.as_retriever()
# 6. Eine benutzerdefinierte Prompt-Vorlage für die RAG-Kette definieren
# Wir sagen dem LLM ausdrücklich, dass es den bereitgestellten Kontext verwenden soll.
custom_prompt_template = """Verwenden Sie den folgenden Kontext, um die Frage des Benutzers zu beantworten.
Wenn Sie die Antwort basierend auf dem Kontext nicht kennen, sagen Sie einfach, dass Sie es nicht wissen, versuchen Sie nicht, eine Antwort zu erfinden.
Kontext :
{context}
Frage : {question}
"""
custom_prompt = PromptTemplate(
template=custom_prompt_template,
input_variables=["context", "question"]
)
# 7. Die RAG-Kette erstellen
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff", # 'stuff' bedeutet, alle abgerufenen Dokumente in den Prompt zu setzen
retriever=retriever,
return_source_documents=True,
chain_type_kwargs={"prompt": custom_prompt}
)
# Jetzt fragen wir den Agenten
print("--- Anfrage 1 ---")
query1 = "Wer bist du und worüber schreibst du?"
result1 = qa_chain.invoke({"query": query1})
print(f"IA : {result1['result']}")
print("\n--- Anfrage 2 ---")
query2 = "Was ist Emmas bevorzugter Schreibstil?"
result2 = qa_chain.invoke({"query": query2})
print(f"IA : {result2['result']}")
print("\n--- Anfrage 3 (Externes Wissen) ---")
query3 = "Was ist die Hauptstadt von Frankreich?" # Diese Information ist nicht in unseren Persona-Informationen enthalten
result3 = qa_chain.invoke({"query": query3})
print(f"IA : {result3['result']}") # Sie sollte trotzdem antworten, da das LLM allgemeine Kenntnisse hat,
# aber wenn wir streng *nur* den Kontext wollten, würden wir den Prompt anpassen.
# Wichtiger Hinweis: Wenn Sie möchten, dass der Agent *nur* den gegebenen Kontext strikt respektiert
# und sich weigert zu antworten, wenn der Kontext die Antwort nicht enthält, müssen Sie sehr
# explizit in Ihrer custom_prompt_template sein. Zum Beispiel: "Basierend NUR auf dem folgenden Kontext..."
Analyse des RAG-Beispiels:
- Wir haben unseren Text aus der „Persona“ genommen.
- Wir haben ihn in Teile aufgeteilt (wichtig für größere Dokumente).
- Wir haben `OpenAIEmbeddings` verwendet, um diese Teile in numerische Vektoren umzuwandeln.
- `FAISS` (ein lokaler Vektorspeicher) hat diese Vektoren gespeichert.
- Wenn wir eine Frage gestellt haben, hat der `retriever` nach den relevantesten Textteilen in `FAISS` gesucht.
- Diese relevanten Teile wurden dann in unsere `custom_prompt_template` als `{context}` eingefügt.
- Schließlich hat das LLM dieses verbesserte Prompt verwendet, um die Frage zu beantworten, was den Eindruck erweckt, dass es sich an seine Persona „erinnerte“.
Dieser Ansatz ist unglaublich flexibel. Sie können ihn verwenden für:
- Das Speichern von Dokumenten (PDFs, Artikel, interne Wikis).
- Das Erinnern an Benutzerpräferenzen im Laufe der Zeit.
- Das Beibehalten der „Persönlichkeit“ eines Agenten oder spezifischer Anweisungen.
- Das Speichern vergangener erfolgreicher Agentenaktionen oder Planungsstrategien.
Meine persönliche Meinung zum Einstieg in die Erinnerung
Als ich anfing, versuchte ich, alles von Grund auf neu zu erstellen und dachte, ich wäre intelligent. Ich habe schnell gelernt, dass die Verwendung von etablierten Frameworks wie LangChain oder AutoGen (die ihre eigenen Gedächtniskonzepte haben, oft über den Nachrichtenverlauf des Agenten) die beste Lösung ist. Sie verwalten für Sie viel wiederholten Code.
Mein Rat für Anfänger:
- Beginnen Sie mit `ConversationBufferMemory`. Das ist am einfachsten und macht Ihre Agenten sofort gesprächiger.
- Verstehen Sie die Grenzen des Kontextfensters. Wenn Ihre Gespräche länger werden, wechseln Sie zu `ConversationBufferWindowMemory` oder `ConversationSummaryBufferMemory`, um Truncation oder übermäßige API-Kosten zu vermeiden.
- Gehen Sie nicht sofort zu komplexen RAG-Systemen über. Machen Sie sich zuerst mit dem grundlegenden Chat-Gedächtnis vertraut. Sobald Sie die Notwendigkeit für persistentes Wissen oder das Erinnern an spezifische Fakten erkennen, erkunden Sie die Vektorspeicher.
- Achten Sie auf Prompt-Engineering für RAG. Die Art und Weise, wie Sie das LLM bitten, den abgerufenen Kontext zu verwenden, ist entscheidend. Experimentieren Sie mit Phrasen wie „Verwenden Sie NUR den folgenden Kontext“ oder „Ergänzen Sie Ihr Wissen mit dem folgenden Kontext“.
- Trennen Sie kurzfristige und langfristige Bedürfnisse. Versuchen Sie nicht, die gesamte Lebensgeschichte Ihres Agenten im `chat_history` zu sammeln. Reservieren Sie `chat_history` für die aktuelle Interaktion und verwenden Sie RAG für alles andere.
Eine Herausforderung, der ich begegnete, war, die Gedächtnisverwaltung über mehrere *Sitzungen* hinweg zu steuern. Wenn mein Agent neu startete, war sein `ConversationBufferMemory` verloren. Für ein tatsächlich persistentes Kurzzeitgedächtnis (z.B. wenn Sie ein Gespräch dort fortsetzen möchten, wo Sie gestern aufgehört haben) müssen Sie Ihr `memory`-Objekt serialisieren und speichern (z.B. in Form einer JSON-Datei oder in einer Datenbank) und es laden, wenn der Agent startet. Das fügt eine zusätzliche Komplexitätsebene hinzu, aber es ist durchaus machbar, sobald Sie die Grundlagen beherrschen.
Handlungsanweisungen für Ihr nächstes Agentenprojekt
Sie haben die Theorie, jetzt gehen Sie bauen! Hier ist, was ich möchte, dass Sie als Nächstes tun:
- Wählen Sie ein einfaches bestehendes Agentenprojekt (oder starten Sie ein neues), das Sie erstellt haben und das aktuell Dinge „vergisst“.
- Implementieren Sie `ConversationBufferMemory`, um ihm ein grundlegendes Kurzzeitgedächtnis zu geben. Sehen Sie, wie viel natürlicher das Gespräch wird.
- Denken Sie darüber nach, welches persistente Wissen Ihr Agent benötigen könnte. Handelt es sich um ein Set spezifischer Anweisungen? Eine persönliche Präferenz? Eine Wissensdatenbank?
- Experimentieren Sie mit einer einfachen RAG-Konfiguration. Nehmen Sie ein kleines Stück Text (wie die gewünschte Persona Ihres Agenten oder einige Fakten) und speichern Sie es in einem lokalen Vektorspeicher `FAISS`. Sehen Sie, ob Ihr Agent diese Informationen abrufen und verwenden kann.
- Überwachen Sie Ihren Tokenverbrauch! Vergessen Sie nicht, dass das Senden langer Chat-Historien oder vieler abgerufener Dokumente Ihre Tokenanzahl erhöht, was sich direkt auf die Kosten und die Latenz auswirkt. Optimieren Sie Ihre Gedächtnisstrategie entsprechend.
Es ist nicht nur ein technisches Detail, dass Ihr IA-Agent sich erinnert; es ist, was eine kalte und transaktionale Interaktion in etwas verwandelt, das tatsächlich hilfreich und intelligent erscheint. Es ist der Unterschied zwischen einem Werkzeug und einem echten Assistenten. Gehen Sie und machen Sie Ihre Agenten intelligenter, und vergessen Sie nicht, Ihre Fortschritte in den Foren agent101.net zu teilen!
Verwandte Artikel
- Die Kosten des NICHT-NUTZEN von AI-Agenten im Jahr 2026
- Top-Tools für die Entwicklung von AI-Agenten
- Die Grundlagen der AI: Ein praktischer Leitfaden für den Einstieg im Jahr 2026
🕒 Published: