+170 XP

Memory und State: kurzfristiger Kontext und langfristiges Recall

# Memory und State: kurzfristiger Kontext und langfristiges Recall

Sie sagen einem Support-Agent: „Mein Name ist Priya und meine Bestellnummer ist #4471.“ Drei Nachrichten später fragt er: „Wie ist Ihr Name?“ Das ist ein Agent ohne Memory, und er wirkt kaputt. Der umgekehrte Fehler ist aber genauso schlimm: ein Agent, der jede vergangene Konversation in jede Antwort packt, durcheinanderkommt, langsam wird und ein Vermögen kostet. Gute Agents erinnern sich an die *richtigen* Dinge zum *richtigen* Zeitpunkt. Darum geht es in dieser Lektion.

Zwei Arten von Memory

Das menschliche Gehirn hat ein Arbeitsgedächtnis (worüber Sie gerade nachdenken) und ein Langzeitgedächtnis (was Sie bei Bedarf abrufen können). KI-Agents funktionieren genauso, und die Unterscheidung ist wichtig für den Aufbau.

Kurzfristiges Memory: das Context Window

Das Context Window ist der Textblock, den das Modell in einer einzelnen Anfrage „sehen“ kann. Es umfasst die System-Instruktionen, die bisherige Konversation und alle Daten, die Sie einfügen. Stellen Sie es sich als Schreibtisch des Agents vor: Alles auf dem Tisch ist gleichzeitig sichtbar, aber der Tisch hat eine feste Größe.

Diese Größe wird in Tokens gemessen (jeweils etwa ¾ eines Wortes). Moderne Modelle haben 2026 große Windows, oft 200.000 Tokens oder mehr, aber „groß“ ist nicht „unendlich“, und ein voller Window ist langsam und teuer.

Hier ist der entscheidende Punkt, der viele überrascht: Das Modell hat zwischen den Calls kein Memory. Jedes Mal, wenn Sie eine Nachricht senden, wird die gesamte Konversation erneut mitgeschickt. Der Agent „erinnert“ sich nur an Ihren Namen, weil Ihre App das Transkript aufbewahrt und es in jedem Turn wieder einfügt.

python
# Short-term memory is just a list you resend every turn.
messages = [
    {"role": "system", "content": "You are a support agent."},
]

def chat(user_text):
    messages.append({"role": "user", "content": user_text})
    reply = model.generate(messages)          # whole list sent every time
    messages.append({"role": "assistant", "content": reply})
    return reply

chat("My name is Priya, order #4471.")
chat("When does it ship?")   # 'Priya' and '#4471' are still in the list

Das ist der gesamte Trick hinter konversationellem Memory. Keine Magie, nur eine wachsende Liste.

Langfristiges Memory: ein durchsuchbarer Speicher

Der Schreibtisch füllt sich. Alte Tickets, vergangene Chats und Account-Historie können nicht für immer im Context Window liegen. Also verschieben wir sie ins langfristige Memory: einen externen Speicher, den der Agent durchsuchen kann, wenn ein Thema aufkommt.

Das übliche Werkzeug dafür ist ein Vector Store (auch Vector Database genannt). Er speichert Text als Embeddings: numerische Fingerabdrücke, die Bedeutung erfassen. Wenn Priya sich erneut meldet, wandelt der Agent ihre neue Nachricht in ein Embedding um und fragt den Store: „Welche vergangenen Tickets sind dem am ähnlichsten?“ Er holt nur die wenigen relevanten zurück und legt sie auf den Schreibtisch.

Das nennt man Retrieval: die Handvoll Erinnerungen holen, die zählen, und die Tausenden ignorieren, die es nicht tun. Wenn Sie die Mechanik tiefer verstehen wollen, erklärt dieses kostenlose Primer zu Embeddings und Vector Search es klar, ohne Programmierkenntnisse vorauszusetzen.

Ein konkreter Support-Agent

Machen wir es konkret. Priya hat den Support in zwei Jahren viermal kontaktiert. Heute schreibt sie: „Mein Mixer raucht wieder.“

So verhält sich ein gut entworfener Agent:

1. Kurzfristig: Er behält die heutige Konversation im Context Window, damit er nicht mitten im Chat erneut nach ihrem Namen fragt.

2. Langfristiges Retrieval: Er durchsucht den Vector Store nach Priyas vergangenen Tickets. Er findet Ticket #4471 vom letzten Jahr: „Mixer überhitzt, auf Garantie ersetzt.“ Das ist hochrelevant, also lädt er es.

3. Er ignoriert ihr unzusammenhängendes Ticket über eine verspätete Rechnung. Nicht ähnlich, nicht geladen.

4. Er antwortet mit Kontext: „Ich sehe, dass wir diesen Mixer letzten März wegen Überhitzung ersetzt haben. Prüfen wir, ob noch Garantie besteht.“

Das fühlt sich an wie ein Mensch, der sich tatsächlich an Sie erinnert. Beachten Sie: Der Agent hat nicht alle vier Tickets in das Window geschüttet. Er hat eines abgerufen.

python
# Long-term recall: search, then inject only what's relevant.
def build_context(user_text, user_id):
    past = vector_store.search(
        query=user_text,
        filter={"user_id": user_id},
        top_k=3            # only the 3 most relevant memories
    )
    memory_block = "\n".join(m.text for m in past)
    return [
        {"role": "system",
         "content": f"You are a support agent.\nRelevant history:\n{memory_block}"},
        {"role": "user", "content": user_text},
    ]

Das top_k=3 leistet viel Arbeit. Es sagt: „Gib mir die drei besten Treffer, nicht alles.“ Diese eine Zahl macht oft den Unterschied zwischen einem präzisen Agent und einem, der in der Historie ertrinkt.

Was behalten, zusammenfassen oder vergessen

Memory heißt nicht „alles speichern“. Es ist eine Reihe von Entscheidungen. Hier praktische Regeln.

Behalten (wortgetreu, im Window)

  • Die aktuelle Aufgabe und die letzten Turns der Konversation.
  • Fakten, die der Agent nicht falsch machen darf: Bestellnummern, das vom Nutzer genannte Ziel, eine bestätigte Lieferadresse.
  • Alles, wozu der Nutzer gerade gesagt hat „merk dir das“.

Zusammenfassen (komprimieren, dann die Zusammenfassung behalten)

Wenn eine Konversation lang wird, schleppen Sie nicht alle fünfzig Nachrichten mit. Fassen Sie die älteren in einer kurzen Notiz zusammen und behalten nur diese. Das nennt man oft „Rolling Summary“.

Beispiel: Vierzig Nachrichten Hin und Her beim Debugging werden zu einer Zeile: *„Nutzerin behebt Problem mit rauchendem Mixer; Modell X200 bestätigt; Garantiestatus unbekannt.“* Sie haben gerade den größten Teil des Schreibtischs freigeräumt und das Wesentliche behalten.

python
# When the transcript gets long, compress the old part.
if token_count(messages) > 6000:
    old = messages[1:-6]                      # keep system + last 6 turns
    summary = model.generate([
        {"role": "user",
         "content": f"Summarize these support messages in 3 sentences:\n{old}"}
    ])
    messages[1:-6] = [{"role": "system", "content": f"Summary so far: {summary}"}]

Vergessen (ganz verwerfen)

  • Small Talk und Höflichkeiten. „Vielen Dank!“ muss nicht erinnert werden.
  • Sensible Daten, die Sie nicht aufbewahren sollten (siehe unten).
  • Fehlgeschlagene Versuche, sobald die Aufgabe gelöst ist. Der Agent braucht keine drei falschen Antworten, die sein Memory eines gelösten Tickets zumüllen.

Ein nützliches mentales Modell: Fakten behalten, Verläufe zusammenfassen, Rauschen vergessen.

Die richtige Balance finden

Zwei Fehlermodi liegen links und rechts von gutem Memory.

Zu wenig Memory: Der Agent fragt Dinge erneut, verliert den Faden und wirkt roboterhaft. Meist verursacht dadurch, dass das Transkript nicht persistiert wird oder top_k zu niedrig gesetzt ist.

Zu viel Memory: Der Agent wird durch veraltete oder irrelevante Historie verwirrt, widerspricht sich, läuft langsam und kostet mehr pro Nachricht. Meist verursacht dadurch, dass die volle Historie eingeschüttet statt abgerufen wird, oder dass nie zusammengefasst wird.

Die Lösung für beides ist dieselbe Disziplin: bewusst entscheiden, was in das Window kommt. Relevante langfristige Erinnerungen abrufen, lange Konversationen zusammenfassen und Rauschen vergessen. Das Context Window ist Premiumfläche. Behandeln Sie jedes Token so, als würde es Sie etwas kosten, denn das tut es.

Noch ein praktischer Punkt: Memory zurückschreiben. Nach Abschluss eines Tickets speichern Sie eine kurze strukturierte Notiz im Vector Store: *„2026-03-11: Priya, Mixer X200, Überhitzung, auf Garantie ersetzt.“* Genau das wird der Agent von morgen abrufen. Ein Agent, der nie neue Erinnerungen schreibt, kann immer nur das abrufen, womit er gestartet ist.

Wissenscheck

1. Was bedeutet es, dass „das Modell zwischen den Calls kein Memory hat“?

2. In der Analogie der Lektion wird das Context Window mit einem Schreibtisch verglichen. Was ist der Kernpunkt dieser Analogie?

3. Ein Agent, der jede vergangene Konversation in jede Antwort einfügt, wird als Fehlermodus beschrieben. Warum ist das schlecht und nicht hilfreich?

MEHRFACHAUSWAHL

4. Wählen Sie ALLE richtigen Antworten dazu, was im Context Window eines Modells enthalten ist.

Wählen Sie alle richtigen Antworten aus.

MEHRFACHAUSWAHL

5. Wählen Sie ALLE richtigen Antworten, die kurzfristiges und langfristiges Memory bei KI-Agents korrekt unterscheiden.

Wählen Sie alle richtigen Antworten aus.

Eine Anmerkung zu Datenschutz und Frameworks

Langfristiges Memory bedeutet, dass Sie Nutzerdaten speichern, manchmal sensible Daten. Zwei Regeln halten Sie aus Schwierigkeiten heraus:

  • Speichern Sie nicht, was Sie nicht brauchen. Kartennummern, Passwörter und Gesundheitsdaten redigieren, bevor sie im Vector Store landen.
  • Nutzer müssen ihre Erinnerungen sehen und löschen können. „Vergiss alles über mich“ sollte tatsächlich funktionieren. Planen Sie das ab Tag eins ein.

Sie müssen diese Infrastruktur nicht selbst bauen. Jeder große Anbieter liefert inzwischen ein Agent-Framework, das Transkripte, Retrieval und Summarization für Sie übernimmt: das OpenAI Agents SDK, das Claude Agent SDK und Googles Agent Development Kit (ADK). Sie unterscheiden sich in Details, teilen aber dieselbe Struktur, die Sie hier gelernt haben: kurzfristiger Kontext plus langfristiges Retrieval. Die Provider-Deep-Dive-Blöcke in diesem Kurs behandeln die Besonderheiten der einzelnen Anbieter. Die Konzepte lassen sich direkt übertragen, wählen Sie also den Anbieter, den Sie schon nutzen.

Zentrale Erkenntnisse

  • Kurzfristiges Memory ist einfach das Transkript, das Sie jeden Turn erneut senden. Das Modell hat zwischen den Calls kein Memory; Ihre App liefert es, indem sie die Konversation wieder einfügt.
  • Langfristiges Memory ist ein durchsuchbarer Vector Store. Rufen Sie die wenigen relevanten vergangenen Einträge ab (ein niedriges top_k), nicht die gesamte Historie.
  • Fakten behalten, Verläufe zusammenfassen, Rauschen vergessen. Bestellnummern wortgetreu mitführen, lange Konversationen in eine Rolling Summary komprimieren und Höflichkeiten verwerfen.
  • Memory nach jeder Aufgabe zurückschreiben, damit künftige Sessions es abrufen können, und Löschung aus Datenschutzgründen von Anfang an mitplanen.
  • Das Context Window ist Premiumfläche. Sowohl zu wenig als auch zu viel Memory macht Agents kaputt; das Mittel ist, bei jedem Token bewusst zu entscheiden, das ins Window kommt.