Retrieval Augmented Generation und Cache Augmented Generation
Wie gut schlagen sich kleine Sprachmodelle bei der Verarbeitung längerer Texte? Es existieren hierfür zwei bekannte Ansätze, Retrieval-Augmented Generation (RAG) und Cache-Augmented Generation (CAG).
Retrieval-Augmented Generation (RAG)
Bei diesem Ansatz wird zunächst ein Retrieval-Schritt durchgeführt, bei dem relevante Textstellen gesucht und anschließend an das Sprachmodell übergeben werden. Häufig kommen dabei Word Embeddings und Vektordatenbanken zum Einsatz. Allerdings gab es bei meinen eigenen Tests Hinweise darauf, dass diese Methode speziell bei deutschen Texten nicht immer gut funktioniert. Klassisches Retrieval (z. B. durch Suchalgorithmen) könnte hier eine bessere Alternative sein. Zugegebenermaßen handelt es sich hier um anekdotische Evidenz, ein systematischer Test könnte hier Klarheit bringen.
Cache-Augmented Generation (CAG)
Hier wird ein potenziell großes Dokument in den Kontext in das Modell geladen. Dafür ist ein großes Kontextfenster nötig, weshalb ja auch schon in Teil 1 erwähnt wurde, dass für diesen Test Modelle mit entsprechend großer Kapazität ausgewählt wurden. In einem aktuellen Artikel wird jedoch auf das Problem des „Context Rot“ hingewiesen, was bedeutet, dass bei einem großen Kontext die Qualität der Antworten eines Modells degeneriert.
Die getesteten Modelle
Eine positive Überraschung war, dass Qwen3 doch geeignet ist um mit langen Texten umzugehen! Die bisher betrachtete MLX-Version hatte, wie schon in den vorherigen Teilen erwähnt, Probleme mit einem großen Kontext. Die trifft jedoch erfreulicherweise nicht auf die „unsloth“-Version zu. Da diese auf dem Mac allerdings nicht die MLX-Schnittstelle nutzt, ist sie langsamer und liegt damit in puncto Geschwindigkeit auf einem ähnlichen Niveau wie GPT-OSS.
Gemma blieb außen vor, da es bei langen Kontexten sehr lange braucht, um den Prompt zu verarbeiten. Dies ist zunächst einmal normal, allerdings waren anderen die anderen Modelle nur bei der ersten Anfrage, in der also tatsächlich mit einem sehr langen Prompt der Kontext eingebracht wurde, langsam. Danach antworteten sie in normaler Zeit. Gemma dagegen brauchte oftmals auch danach noch sehr lange, um weitere Anfragen zu beantworten.
In diesem Test wurden daher die folgenden drei Modelle betrachtet:
- GPT-OSS
- Qwen3 (in der „unsloth“-Version)
- Mistral 3.2 Small
Einstellungen
Bei allen Modellen ist darauf zu achten, dass die context length hoch gedreht wird (z.B. bei LM Studio ist sie standardmäßig bei lediglich 4096 Tokens) und, damit das Speicher-Limit nicht gesprengt wird, Flash Attention und Cache Quantization aktiviert wird. (Den Hinweis, dass die Einstellung Context Length ignoriert wird, wenn KV Cache Quantization aktiviert wird, kann man übrigens selbst ignorieren… Wenn Context Length nicht trotzdem erhöht wird, werden große Prompts nicht akzeptiert.)

Die Testdaten
Neben zwei wissenschaftlichen Arbeiten wurden drei Wikipedia-Einträge als Grundlage genommen:
- Frankfurt-Nordend
- Charles Babbage
- Richard von Weizsäcker (ehemaliger Bundespräsident)
Sowohl beim Frankfurter Nordend (siehe Tests in den vorherigen Teilen) als auch bei Charles Babbage kam es, wenn die Modelle nur ihr Weltwissen zur Verfügung hatten, zu Halluzinationen.
Wurden die Artikel komplett in den Kontext geladen, konnten jedoch alle Modelle alle Fragen korrekt beantworten!
Herausforderungen bei Richard von Weizsäcker
Der Artikel über Richard von Weizsäcker war deutlich länger und stellte die Modelle vor größere Herausforderungen. Hier mussten Flash Attention und KV Cache Quantization zum Einsatz kommen.
Testfrage 1: Wo war Richard von Weizsäcker Ehrenbürger?
- Problem: Bonn, Stuttgart und Berlin wurden zusammen erwähnt, Danzig erst später.
- Ergebnis: Die Modelle fanden Danzig nicht immer. Allerdings verbesserte sich die Trefferquote, wenn der Prompt geschickt formuliert wurde (z. B. mit der Forderung, auch scheinbar gefundene Informationen weiter zu überprüfen).
Testfrage 2: Wie ist Fritz von Weizsäcker gestorben?
Fritz von Weizsäcker ist ein Sohn Richards.
- Problem: Im Text stand nur das Sterbejahr, Dass sein Tod ein Mord war, wurde lediglich in einer einzigen Angabe im Literaturverzeichnis erwähnt (Verweis auf den Artikel „Brutale Bluttat in Berlin: Das steckt hinter dem Mord an Fritz von Weizsäcker„)
- Ergebnis:
- Qwen3 und GPT-OSS gaben keine Auskunft darüber.
- Mistral halluzinierte das genaue Sterbedatum und Umstände des Mordes, die nicht den Tatsachen entsprachen. Bei Nachfrage gab Mistral jedoch zu, dass es sich um eine Halluzination handelte.
Wissenschaftliche Arbeiten und Halluzinationsprobleme
Ein weiteres Problem zeigte sich bei der Verarbeitung wissenschaftlicher Texte:
- GPT-OSS erfand in einem Fall eine Skala von 1–5, die so nicht beschrieben war. In Wahrheit wurde in der Arbeit ein rein qualitativer Ansatz beschrieben.
- Mistral und Qwen3 machten diesen Fehler nicht.
Besonders auffällig war, dass GPT-OSS selbst bei der Verarbeitung nur des einzelnen Abschnitts, in der dies beschrieben war, die numerische Skala erfand. Diese Beobachtung führt zu einer wichtigen Erkenntnis: Hier wäre ein RAG-Ansatz auch keine Lösung gewesen. Da das Problem hier offensichtich nicht an der Länge des Kontextes lag, hätte auch die gezielte Auswahl relevanter Textstellen durch Retrieval nichts geändert.
Fazit
Prinzipiell eignen sich die drei betrachteten Modelle für Cache Augmented Generation, allerdings mit Einschränkungen. In allen Fällen muss beachtet werden, dass Halluzinationen trotzdem auftreten können, auch wenn die korrekten Antworten im Kontext stecken. Dies ist ein größeres Problem, wenn auch der Kontext größer ist, aber das GPT-OSS-Beispiel zeigt, dass es auch sonst auftreten kann. Mit geeigneten Prompts, in denen die Modelle angewiesen werden, Textstellen zu zitieren, in denen das behauptete steht, lässt sich diese Gefahr verkleinern, wenn auch nicht komplett ausräumen. Interessanterweise beachteten Qwen3 und Mistral die Anweisungen bedeutend besser als GPT-OSS, das die Anweisung, Textstellen zu zitieren, weitgehend ignorierte.
Aus diesen Gründen würde ich GPT-OSS für diesen Anwendungsfall eher nicht verwenden. Qwen3, in der „unsloth“-Version, funktionierte dagegen erstaunlich gut, was für mich überraschend war, da die MLX-Version durch eine große context length noch zum Absturz gebracht werden konnte. Qwen3 ist trotz der Leistungseinbußen durch die Verwendung der GGUF- statt MLX-Schnittstelle außerdem mmer noch deutlich schneller als Mistral.