Der Chatbot vergisst mitten im Gespräch – das Kontextfenster
Nach vielen Nachrichten fällt der Anfang aus dem Gespräch. Das Modell hat kein Gedächtnis: Es sieht nur, was gerade in sein Kontextfenster passt.
Aufwand:
ca. 15 Min.
Voraussetzung:
Zugriff auf den bisherigen Chatverlauf, Ein Textprogramm für eine Kurzfassung, Die Bereitschaft, ein neues Gespräch zu beginnen
Gilt für:
Chat-Dienste mit Sprachmodell, Programmierassistenten mit Chatfenster, KI-Funktionen in Office-Anwendungen, Eigene Anwendungen an einer Chat-Schnittstelle
Das Symptom
Am Anfang lief es hervorragend. Du hast erklärt, worum es geht, welche Regeln
gelten und in welchem Format du die Antworten haben willst. Zwanzig Nachrichten
später ignoriert der Chatbot das Format, nennt einen Namen falsch, den du selbst
geliefert hast, und fragt nach einer Angabe, die weiter oben im selben Gespräch
steht. Nichts stürzt ab, nichts meldet einen Fehler. Es wirkt, als hätte jemand
in der Mitte des Gesprächs still den Gesprächspartner ausgetauscht.
Die „Layer 8“-Wahrheit
Genau das ist passiert – nur dass es bei jeder einzelnen Nachricht passiert.
Zwischen zwei Fragen erinnert sich das Modell an nichts. Microsoft schreibt es in
der eigenen Entwicklerdokumentation ohne jede Verklausulierung: Jeder Aufruf ist
zustandslos, und das Modell merkt sich keine vorherigen Unterhaltungen, es sei
denn, man fügt sie in das Kontextfenster ein. Das Gedächtnis, das du zu erleben
glaubst, ist eine Fleißarbeit der Anwendung: Sie schickt bei jeder Frage das
gesamte bisherige Transkript noch einmal mit. Deshalb wirkt es wie ein Gespräch.
Nur passt in diesen Umschlag eine feste Menge Text – das Kontextfenster, gemessen
in Token. Und dort hinein müssen laut Hersteller alle gleichzeitig: die
Systemvorgabe, der Unterhaltungsverlauf, jeder eingefügte Kontext und die Antwort,
die das Modell erst noch schreiben soll. Der Verlauf wächst mit jeder Runde, der
Platz nicht. Irgendwann muss die Anwendung etwas wegwerfen, und weggeworfen wird
das Älteste – also ausgerechnet die Regeln, die du am Anfang aufgestellt hast. Das
Modell erfährt davon nichts; für es sah das Gespräch immer schon so aus. Deshalb
kommt keine Warnung, sondern nur eine Antwort, die sich nicht mehr an etwas hält,
von dem sie nichts weiß.
Der Reflex, auf ein Modell mit größerem Fenster zu warten, geht ins Leere: Die
Hersteller schreiben selbst, dass das Fenster immer endlich ist und man weiterhin
in Fälle läuft, in denen mehr Daten bereitgestellt werden, als das Modell
verarbeiten kann. Die Konsequenz ist unspektakulär und wirkt sofort: Wichtiges
wiederholen statt es im Verlauf zu vermuten, lange Gespräche zusammenfassen und
neu beginnen, ein Thema pro Faden. Wer diese drei Handgriffe hat, braucht kein
größeres Fenster – und wer sie nicht hat, wird auch mit einem größeren Fenster
irgendwann dieselbe Nachricht schreiben: dass der Chatbot doch eben noch alles
wusste.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Erkennen, dass es ein Kontextproblem ist
Typisch sind drei Anzeichen: Die Regeln vom Gesprächsanfang gelten plötzlich nicht mehr, früher genannte Namen und Zahlen kommen falsch zurück, und das Modell fragt nach etwas, das längst dastand. Alle drei treten auf, nachdem das Gespräch lang geworden ist – nicht nach einer bestimmten Frage. Wenn dagegen schon die zweite Nachricht falsch beantwortet wird, ist es kein Kontextproblem, sondern ein Verständnisproblem.
2.
Wichtiges nicht im Verlauf liegen lassen, sondern erneut mitgeben
Alles, worauf es ankommt – die Rolle, das Format, die Randbedingungen, der Bezugstext – gehört in die aktuelle Nachricht, nicht nur an den Anfang des Gesprächs. Der Verlauf ist der unzuverlässigste Ort für eine wichtige Angabe, weil er als Erstes weggekürzt wird. Zwei wiederholte Sätze kosten wenige Sekunden und ersetzen die Hoffnung, dass der Anfang noch da ist.
3.
Lange Gespräche zusammenfassen und neu anfangen
Statt ein Gespräch über hundert Nachrichten zu schleppen: den Stand in zehn Zeilen selbst festhalten – Ziel, Randbedingungen, Zwischenergebnisse, offene Punkte –, ein neues Gespräch öffnen und diese zehn Zeilen als erste Nachricht einsetzen. Das ist dieselbe Technik, die die Anwendungen intern anwenden, nur mit dem Unterschied, dass du entscheidest, was überlebt.
4.
Ein Thema pro Gespräch
Jede abgeschlossene Nebendiskussion verbraucht dauerhaft Platz im Fenster, ohne noch etwas beizutragen. Wer Steuererklärung, Urlaubsplanung und ein Programmierproblem im selben Faden behandelt, füllt das Fenster mit Ballast und wundert sich, dass am Ende die Antworten schlechter werden. Neues Thema, neues Gespräch.
5.
Große Anhänge nicht in den Verlauf kippen
Ein eingefügtes Handbuch bleibt für den Rest des Gesprächs im Fenster stehen und verdrängt alles andere. Besser den benötigten Abschnitt einfügen statt das ganze Dokument, und nach der Auswertung ein frisches Gespräch beginnen. Wo eine Anwendung Dateien anhängt statt sie einzufügen, gilt eine andere Mechanik – dort liest das Modell ohnehin nur Ausschnitte.
6.
Bei eigenen Anwendungen die Token zählen, statt zu hoffen
Wer selbst gegen eine Chat-Schnittstelle programmiert, muss den Verlauf messen und kürzen, bevor die Grenze erreicht ist – sonst schlägt die Anfrage schlicht fehl. Microsoft zeigt dafür ein Beispiel, das die Token des Verlaufs zählt und die ältesten Nachrichten entfernt. Wichtig ist die Reihenfolge: erst zählen, dann senden. Ein Fehler, der erst beim Nutzer auffällt, ist teurer als eine Zeile Arithmetik.
Häufige Fragen (FAQ)
?Warum vergisst der Chatbot etwas, das ich vor zehn Minuten geschrieben habe?
Weil er es nie gespeichert hat. Microsoft beschreibt die Bauweise in der Entwicklerdokumentation zum Agent Framework ohne Umschweife: „Jeder API-Aufruf ist zustandslos. Das Modell merkt sich keine vorherigen Unterhaltungen, es sei denn, Sie fügen sie in das Kontextfenster ein.“ Was du für ein Gedächtnis hältst, ist eine Fleißarbeit der Anwendung: Sie schickt bei jeder neuen Frage den bisherigen Gesprächsverlauf noch einmal mit. In der Azure-Anleitung zur Chat-Vervollständigung steht derselbe Sachverhalt aus Sicht des Programmierers: „Jedes Mal, wenn Sie eine neue Frage stellen, sendet die Anforderung das laufende Unterhaltungstranskript zusammen mit der neuesten Frage. Da das Modell keinen Arbeitsspeicher hat, senden Sie ein aktualisiertes Transkript mit jeder Frage, oder das Modell verliert den Kontext früherer Fragen und Antworten.“ Fällt ein Teil des Transkripts weg, ist er für das Modell nie da gewesen.
?Was ist dieses Kontextfenster genau?
Eine harte Obergrenze für die Textmenge, die in einen einzelnen Aufruf hineinpasst – gemessen nicht in Wörtern, sondern in Token. Microsofts Grundlagentext dazu formuliert es so: „LLMs verfügen über eine maximale Anzahl von Token für Eingabe und Ausgabe. Dieser Grenzwert wird häufig als kombiniertes maximales Kontextfenster ausgedrückt, das sowohl Eingabe- als auch Ausgabetoken zusammen abdeckt.“ Entscheidend ist das Wort kombiniert. In dieselbe Grenze müssen laut Agent-Framework-Dokumentation nämlich alle Beteiligten passen: „Alles muss passen: Ihre Eingabeaufforderung, der Unterhaltungsverlauf, jeder eingefügte Kontext und die Token, die das Modell als Antwort generiert.“ Der Verlauf konkurriert also mit deiner Frage und mit der Antwort um denselben Platz. Je länger das Gespräch, desto weniger Raum bleibt für beides.
?Löst ein Modell mit größerem Kontextfenster das Problem?
Es verschiebt die Grenze, es hebt sie nicht auf. Dieselbe Dokumentation sagt beides in einem Satz: „Moderne Modelle bieten Kontextfenster von 4K bis über 1M-Token, aber das Kontextfenster ist immer endlich.“ Und in Microsofts Leitfaden zum Prompt Engineering steht die praktische Version davon: „Während die Eingabegröße bei jeder neuen Generation von GPT-Modellen zunimmt, können Sie weiterhin Szenarien treffen, die mehr Daten bereitstellen, als das Modell verarbeiten kann.“ Wer wartet, bis das Fenster groß genug ist, wartet auf etwas, das es der Bauart nach nicht gibt – und in der Zwischenzeit wächst der eigene Gesprächsverlauf schneller als jede Modellgeneration.
?Warum sagt der Chat nicht einfach Bescheid, dass er etwas weggelassen hat?
Weil das Kürzen nicht im Modell passiert, sondern davor. Die Azure-Anleitung schiebt die Aufgabe ausdrücklich dem Aufrufer zu: „Es liegt in Ihrer Verantwortung sicherzustellen, dass die Eingabeaufforderung und die Vervollständigung innerhalb des Token-Limits liegen.“ Das Codebeispiel dort tut genau das – es zählt die Token des Verlaufs und wirft die ältesten Nachrichten weg, bevor überhaupt jemand fragt. Für das Modell sieht ein gekürztes Gespräch aus wie ein kurzes Gespräch; es hat keine Möglichkeit zu bemerken, dass etwas fehlte, und deshalb auch keine, es zu melden. Ob eine bestimmte Anwendung dich darauf hinweist, ist eine Entscheidung ihres Herstellers und keine Eigenschaft der Technik.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.