In Zusammenhang mit großen Sprachmodellen (auch Large Language Models; LLMs) sorgen zwei Aspekte immer wieder für Probleme:
veraltete Trainingsdatensätze und
begrenzter Kontext.
Retrieval Augmented Generation (RAG) ist gekommen, um diese Problemfelder aufzulösen.
In diesem Artikel lesen Sie, wie sich RAG definiert, inwiefern es zur Problemlösung beiträgt, und wie das konkret auf technischer Ebene funktioniert.
Retrieval Augmented Generation - Definition
Bei Retrieval Augmented Generation handelt es sich um eine Technik, die den KI-Forschungslaboren von Facebook, respektive Meta entsprungen ist (PDF) und LLMs mit spezifischen Datenquellen "erdet". Dabei handelt es sich in vielen Fällen um Informationen, die nicht in den ursprünglichen Trainingsdatensätzen enthalten waren. Dieser Prozess läuft ganz generell in drei Schritten ab:
Die Informationen werden aus einer spezifischen Quelle gewonnen ("Retrieval");
Anschließend der Prompt mit dem Kontext der Quelle angereichert ("Augmentation");
Bevor dann mit Hilfe des Modells und dem augmentierten Prompt der Output generiert wird ("Generation").
RAG zu implementieren, kann die Ergebnisse, die große Sprachmodelle zu Tage fördern, qualitativ verbessern. Insbesondere dann, wenn dem Basis-LLM aktuelle Informationen fehlen oder es zu halluzinieren beginnt. Allerdings ist der Einsatz von Retrieval Augmented Generation auch kein Garant dafür, dass Large Language Models nicht (mehr) halluzinieren.
Diese Probleme will RAG lösen
Es kostet jede Menge Zeit und Ressourcen, Large Language Models zu trainieren. Manchmal vergehen dabei Monate, in denen hochmoderne Server-GPUs wie Nvidias H100 auf Hochtouren laufen. Die Sprachmodelle per Retraining stets auf dem aktuellen Stand zu halten, ist dabei ein Ding der Unmöglichkeit - trotz der Möglichkeit, das Basismodell auf neueren Daten feinabzustimmen. Denn dieser Prozess bringt manchmal seine eigenen Nachteile mit sich: Beispielsweise können neue Funktionalitäten, die durch die Feinabstimmung Einzug halten, die im Basismodell bereits vorhandenen einschränken.
Wenn Sie ein LLM, das auf Daten aus dem Jahr 2022 trainiert wurde, nach etwas fragen, das im Jahr 2023 stattgefunden hat, gibt es zwei Möglichkeiten:
Das Modell stellt fest, dass es die angefragten Informationen nicht kennt. Dann wird es Ihnen typischerweise etwas über seine veralteten Trainingsdaten mitteilen.
Das Modell weiß nicht, dass es die Daten nicht kennt. Dann wird es versuchen, eine Antwort auf der Grundlage ähnlicher, historischer Fragen zu liefern - oder es halluziniert.
Um LLM-Halluzinationen zu vermeiden, kann es manchmal hilfreich sein, seinen Prompt mit dem spezifischen Datum eines Ereignisses, eine relevante URL oder ein entsprechendes Dokument anzugeben. Dabei finden diese Zusatzinformationen ihre Grenze, wenn das "Context Limit" des LLM erreicht ist.
Dieses Kontextgrenzen unterscheiden sich von LLM zu LLM. Anthropics "Claude"-Modelle sind dabei Spitzenreiter - sie realisieren Kontextfenster von bis zu 100.000 Token, was etwa 75.000 Wörtern entspricht. Das ist deutlich mehr als die meisten anderen großen Sprachmodelle bieten.
Wie Retrieval Augmented Generation funktioniert
Auf hoher Ebene betrachtet, funktioniert Retrieval Augmented Generation, indem es Sprachmodelle mit einer Internet- oder Dokumentensuche kombiniert. Dabei werden die Probleme, die beide Schritte bei manueller Ausführung verursachen würden, umgangen. Etwa, dass der Output die Kontextgrenze des LLMs überschreitet.
Bezogen auf die weiter oben vorgestellten drei Schritte des RAG-Prozesses hier noch einmal die technischen Abläufe der einzelnen Phasen:
Retrieval: Eine Internet-, Dokumenten- oder Datenbanksuche wird genutzt, um Quellinformationen in eine dichte, hochdimensionale Form zu vektorisieren. Typischerweise geschieht das, indem ein Einbettungsvektor erzeugt und in einer Vektordatenbank gespeichert wird.
Augmentation: Dann wird die Abfrage selbst vektorisiert und mit Hilfe von FAISS oder anderen Suchtechniken (typischerweise unter Verwendung einer Cosinus-Metrik für die Ähnlichkeit) mit der Vektordatenbank abgeglichen. So werden die relevantesten Teile der Quellinformationen extrahiert und dem LLM zusammen mit dem Query-Text präsentiert.
Generation: Schließlich generiert das LLM eine Antwort.
Das hört sich möglicherweise kompliziert an - in der Praxis resultiert das allerdings lediglich in fünf Zeilen Python-Code (wenn Sie das LangChain-Framework zu Orchestrierungszwecken verwenden):
from langchain.document_loaders import WebBaseLoader
from langchain.indexes import VectorstoreIndexCreator
loader = WebBaseLoader("https://www.promptingguide.ai/techniques/rag")
index = VectorstoreIndexCreator().from_loaders([loader])
index.query("What is RAG?")
(fm)
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.