Einführung
Retrieval Augmented Generation, auch bekannt als RAG, ist eine Methodik und ein Ablauf zum Erstellen von Anwendungen für generative KI auf der Grundlage privater oder benutzerdefinierter Datensätze. Diese Methode wird in Unternehmen immer häufiger eingesetzt und für eine Vielzahl von Anwendungsfällen wie Chatbots, Fragen-Antwort-Systeme sowie Forschung und Analyse verwendet. In diesem ausführlichen Abschnitt behandeln wir, was RAG ist, welche Mechanismen beim Erstellen von RAG-Pipelines erforderlich sind, und diskutieren einige der Vorteile dieses Ansatzes.
Grundlegendes zur Retrieval Augmented Generation
LLMs werden anhand einer großen Menge an Textdaten trainiert und ihre Fähigkeiten basieren auf dem Wissen, das sie aus diesen Daten gewinnen. Das bedeutet, dass sie, wenn Sie ihnen eine Frage zu Daten stellen, die nicht Teil ihres Trainingssatzes sind, nicht in der Lage sind, genau zu antworten, was entweder zu einer Ablehnung (wobei der LLM mit „Ich weiß nicht“ antwortet) oder schlimmer noch zu einer Halluzination führt .
Wie können Sie also eine GenAI-Anwendung erstellen, die in der Lage wäre, Fragen mithilfe eines benutzerdefinierten oder privaten Datensatzes zu beantworten, der nicht Teil der Trainingsdaten des LLM ist?
RAG ist eine der besten Möglichkeiten, diese Aufgabe zu erfüllen.
Die Hauptidee hinter RAG besteht darin, die Informationen des LLM mit zusätzlichen Fakten zu ergänzen. Unabhängig davon, ob es sich bei unseren Daten um eine Reihe von Dokumenten (z. B. PDFs oder DOC/PPT-Dateien), JSON-Daten oder aus einer Datenbank oder einem Datensee extrahierte Daten handelt, ermöglicht der RAG-Flow dem LLM, Antworten auf Benutzeranfragen zu erstellen, die auf Fakten aus diesen Daten basieren.
Wenn der RAG-Flow mit einer Abfrage-Engine erstellt wird, die Fakten mit hoher Genauigkeit mit der Benutzerabfrage abgleicht, ist die Möglichkeit, das LLM mit relevanten Fakten zu erweitern, eine gute Methode, das LLM zum Beantworten von Fragen zu Ihren eigenen Daten zu verwenden.
RAG-Flow: Eine Schritt-für-Schritt-Darstellung
Abbildung 1 zeigt die einzelnen Schritte beim Bau einer RAG-Pipeline:
Die blauen Pfeile veranschaulichen den Datenaufnahmefluss, bei dem die für Retrieval Augmented Generation verwendeten Daten verarbeitet und für die Abfrage vorbereitet werden.
Diese Daten können aus verschiedenen Quellen stammen, beispielsweise aus Datenbanken oder Cloud-Speichern, S3, Google Drive, einem lokalen Ordner oder Unternehmensanwendungen wie Notion, JIRA oder anderen internen Anwendungen.
Da es sich um textbasierte GenAI-Anwendungen handelt, müssen wir alle Eingabedaten in ein geeignetes Textdokumentformat übersetzen. Wenn die Quelldaten in einem Binärformat wie PDF, PPT oder DOCX vorliegen, extrahieren wir zunächst den eigentlichen Text aus diesen Dokumenten. Wenn sich die Daten in einer Datenbank befinden, wird der Text aus einer oder mehreren Spalten oder Dokumenten in der Datenbank abgeleitet. Diese Art der Dokumentverarbeitung ist häufig anwendungsspezifisch und hängt vom Format der Quelldaten ab.
Sobald der Text fertig ist, wird er in „Blöcke“ (oder Segmente) aufgeteilt, die für den Abruf geeignet sind. Mithilfe eines Einbettungsmodells (wie dem Boomerang -Modell von Vectara) wird für jeden Textblock eine „Vektoreinbettung“ berechnet, und sowohl der Text als auch die Einbettung werden gespeichert, um später für einen effizienten semantischen Abruf verwendet zu werden.
Die grünen Pfeile veranschaulichen den Abfrage-Antwort-Fluss, wobei ein Benutzer eine Abfrage stellt und eine Antwort basierend auf den relevantesten verfügbaren Informationen in den aufgenommenen Daten erwartet.
Zuerst kodieren wir die Abfrage selbst mit dem (gleichen) Einbettungsmodell und verwenden den Suchalgorithmus „Approximative Nearest Neighbor“ (ANN), um eine Rangliste der relevantesten Textblöcke abzurufen, die im Vektorspeicher verfügbar sind.
Mit den relevantesten Teilen in der Hand konstruieren wir eine umfassende Eingabeaufforderung für das LLM, einschließlich der Benutzerfrage und aller relevanten Informationen. Diese vollständige Eingabeaufforderung wird an ein generatives LLM wie OpenAI, Cohere, Anthropic oder eines der Open-Source-LLMs wie Llama2 gesendet .
Mit der Benutzerfrage und den relevanten Fakten kann der LLM seine Antwort auf die Frage nun auf die bereitgestellten Fakten stützen und so eine Halluzination vermeiden.
Sobald eine Antwort generiert wurde, kann sie optional an einen „Validierungsdienst“ (wie Nemo Guardrails von Nvidia ) und schließlich an den Benutzer zurückgesendet werden.
Der rote Pfeil zeigt einen letzten optionalen Schritt: Ergreifen von Maßnahmen auf Grundlage der Antwort über Unternehmensautomatisierung und -integration. Wenn wir davon ausgehen, dass die generierte Antwort korrekt ist, können wir die Antwort verwenden, um in unserem Namen Maßnahmen zu ergreifen – zum Beispiel eine E-Mail an einen Kollegen senden oder eine Aufgabe zu JIRA hinzufügen.
RAG vs. Feinabstimmung
Wenn Leute erwägen, mit ihren Daten eine GenAI-Anwendung zu erstellen, wird neben RAG häufig auch die Feinabstimmung erwähnt . Die häufigste Frage lautet: „Kann ich die Feinabstimmung mit meinen benutzerdefinierten Daten verwenden, um das Basis-LLM so anzupassen, dass es besser für meinen Anwendungsfall funktioniert?“
Unter Feinabstimmung versteht man beim maschinellen Lernen den Vorgang, ein vorab trainiertes Modell (ein Modell, das anhand eines großen allgemeinen Datensatzes trainiert wurde) anhand eines kleineren, spezifischen Datensatzes weiter zu trainieren, um sein Wissen anzupassen und seine Leistung für eine bestimmte Aufgabe oder Domäne zu optimieren.
Stellen Sie sich als Analogie vor, Sie lernen Gitarre spielen. Zuerst lernen Sie grundlegende Akkorde, Tonleitern und vielleicht ein paar einfache Lieder. Die anfängliche Vortrainingsphase ist ähnlich – Sie erlernen eine breite Palette an Gitarrenspielfähigkeiten. Das Feintuning wäre vergleichbar mit dem Erlernen des Jazzgitarrenspiels – während Ihre Grundkenntnisse unerlässlich sind, müssen Sie Jazztechniken, Rhythmen und Nuancen erlernen.
Praktiker neigen dazu zu denken, dass dies dazu beitragen kann, ihre LLM-Ergebnisse zu verbessern: Ich kann einfach meine Daten nehmen, die Schaltfläche „Feinabstimmung“ drücken und die Modellqualität verbessert sich.
Wenn es nur so einfach wäre.
Die Feinabstimmung hilft zwar dabei, das LLM an eine ganz andere Aufgabe anzupassen (z. B. zu lernen, wie man einen Tweet in positive, negative oder neutrale Stimmung einordnet), aber sie ist nicht so gut geeignet, um neue Informationen aus Ihren Daten zu lernen. Hier ist RAG die viel bessere Wahl.
Sehen wir uns einige der Herausforderungen der Feinabstimmung an und vergleichen wir sie mit RAG:
- Überanpassung und katastrophales Vergessen : Wenn Sie einen bestimmten Datensatz feinabstimmen, besteht das Risiko, dass sich das Modell den kleineren Datensatz „merkt“, anstatt ihn zu „verstehen“. Ein damit verbundenes Risiko, das als katastrophales Vergessen bezeichnet wird , besteht darin, dass das Modell in der Feinabstimmungsphase Aufgaben, die es zuvor lösen konnte, zugunsten neuer Aufgaben vergessen kann.
- Halluzinationen: Eines der Hauptprobleme von LLMs sind Halluzinationen. Wenn Sie ein Basismodell mit neuen Daten feinabstimmen, bleibt das Problem der Halluzinationen eine zentrale Herausforderung für das feinabgestimmte Modell, selbst wenn es diese neuen Daten ohne Überanpassung integriert.
- Keine Erklärbarkeit : So wie es schwierig ist, die Ergebnisse eines allgemeinen LLM wie LLAMA2 zu erklären, ist es auch schwierig, die Ergebnisse eines fein abgestimmten Modells zu erklären. Bei RAG besteht ein Teil des Prozesses darin, Referenzen/Zitate aus den abgerufenen Fakten bereitzustellen, die helfen, die Ergebnisse der RAG-Pipeline zu erklären.
- Erfordert MLE-Expertise: Die Feinabstimmung umfasst das kontinuierliche Training des Modells mit einem neuen (oft kleineren) Datensatz. Um es richtig zu machen, ist erhebliches Fachwissen in Deep Learning und Transformer-Modellen erforderlich. Wie entscheiden Sie beispielsweise über die Anzahl der zu trainierenden Epochen, damit Sie eine Überanpassung vermeiden?
- Hohe Kosten: Die Feinabstimmung ist teuer und relativ langsam. Angenommen, Ihre Daten ändern sich täglich – wollen Sie das Basismodell jeden Tag anhand der neuen Version der Daten feinabstimmen? Das könnte sehr schnell teuer werden.
- Keine Zugriffskontrolle: Da in RAG der Satz relevanter Fakten aus den Quelldokumenten abgerufen und in Echtzeit in die LLM-Eingabeaufforderung eingefügt wird, ist es möglich, Zugriffskontrollen anzuwenden. Wenn beispielsweise einer der Fakten aus einem Dokument stammt, auf das ein Mitarbeiter keinen Zugriff hat, kann er aus dem Satz der Fakten entfernt werden, bevor diese an das LLM gesendet werden. Dies ist mit Feinabstimmung nicht möglich.
- Datenschutz: Wenn Sie ein LLM mit Ihren Daten feinabstimmen, werden alle Daten, die im Datensatz enthalten sind, den Sie zur Feinabstimmung verwenden, als Teil seiner Gewichte in das Ausgabemodell integriert, einschließlich aller vertraulichen Informationen oder Ihres geistigen Eigentums. Es ist unmöglich, die vertraulichen von den nicht vertraulichen Daten zu trennen – es handelt sich lediglich um einen einzigen aktualisierten Satz von Gewichten. Mit RAG haben Sie, ähnlich wie bei der Zugriffskontrolle, eine genaue Kontrolle darüber, welche Fakten im Prozess verwendet werden.
Warum RAG verwenden?
RAG entwickelt sich schnell zur vorherrschenden Methode zum Erstellen von GenAI-basierten Anwendungen für Unternehmen.
Warum?
Es gibt eine Reihe von Vorteilen – sehen wir uns diese genauer an:
- Halluzinationen werden praktisch eliminiert: Es eliminiert jene Halluzinationen, die dadurch entstehen, dass das Kern-LLM keinen Zugriff auf Ihre Daten hat. Indem die RAG-Pipeline die relevantesten Fakten aus den Daten genau abruft und diese zur Laufzeit an das LLM weiterleitet, stellt sie sicher, dass das LLM über die nützlichsten Daten verfügt, um die Frage zu beantworten. Dies funktioniert in der Praxis sehr gut.
- Geringe Kosten: RAG erfordert keine Schulung oder Feinabstimmung, was bedeutet, dass keine hohen Kosten damit verbunden sind und kein spezielles Fachwissen im Bereich maschinelles Lernen erforderlich ist.
- Erklärbarkeit: Mit RAG generierte LLM-Antworten sind in hohem Maße erklärbar – die RAG-Implementierung von Vectara bietet zusammen mit der Antwort Zitate, sodass der Leser verstehen kann, auf welchen Fakten die Antwort des LLM beruht, und möglicherweise sogar auf eine dieser Quellen zurückgreifen kann, um weitere Nachforschungen anzustellen.
- Unternehmensbereit: Mit RAG können Sie eine fein abgestufte Berechtigung für die abgerufenen Fakten implementieren und Kontrollen entwerfen, um sicherzustellen, dass kein vertrauliches Material in die Fakten gelangt, die die GenAI-Antwort generieren.
Wie in Abbildung 1 dargestellt, umfasst die eigenständige Implementierung von RAG (DIY) die Konfiguration verschiedener Komponenten und die sorgfältige Befolgung mehrerer Integrationsschritte. Dies kann bei der Skalierung schnell komplex werden, wenn Sie nicht nur eine einfache einmalige Demo in Betracht ziehen müssen, sondern auch SLAs mit geringer Latenz, Sicherheit auf Unternehmensniveau, Datenschutz und andere Überlegungen zur Unternehmensbereitschaft berücksichtigen müssen.
Vectara: RAG als Managed Service
Vectara hat RAG (oder wie wir es manchmal nennen: „ Grounded Generation “) als verwalteten Dienst implementiert. Dieser „RAG in a Box“-Ansatz, der in Abbildung 2 dargestellt ist, macht das Erstellen von Anwendungen einfach und skalierbar und reduziert die Komplexität der Verwaltung von unternehmenstauglichem RAG erheblich:
Mit Vectara können Sie sich als Entwickler auf die Besonderheiten Ihrer Anwendung konzentrieren, nämlich die Daten mithilfe der Indexierungs-API aufnehmen und dann eine Benutzererfahrung erstellen, die die Daten mit der Abfrage-API abfragt reverse image search.
Vectara übernimmt für Sie die gesamte Komplexität und verhilft Ihnen vom ersten Prototyp bis hin zu Projekten jeder Unternehmensgröße zum Erfolg.
Die RAG-Implementierung von Vectara wählt die besten Standardeinstellungen für Sie in Bezug auf Chunking-Strategie , Dokumentvorverarbeitung, Einbettungsmodell, Abruf und Zusammenfassung, was für die meisten Projekte zu einem beschleunigten Startpunkt führt. Diese Effizienz hilft Entwicklern, das Experimentieren mit einer nahezu unbegrenzten Anzahl kombinatorischer Optionen im DIY-Ansatz zu vermeiden, was mit Fallstricken, glanzlosen Ergebnissen, schmerzhaftem, zeitaufwändigem Lernen und anderen finanziellen oder zeitlichen Problemen verbunden ist.
Es besteht aber auch die Möglichkeit, Ihre RAG-Implementierung beispielsweise mit Vectara anzupassen:
- Sie können Vectara bitten, Ihre Eingabedaten vorzuverarbeiten und in Blöcke aufzuteilen. Dies kann aber auch auf der Clientseite (vor der Indizierung) erfolgen, um besser zu kontrollieren, wie die Daten in Ihr Korpus aufgenommen werden.
- Während des Abrufs können Sie die Hybridsuche verwenden (die die Stärken der semantischen Suche mit der Stichwortsuche kombiniert) oder eine Neubewertung mit maximaler marginaler Relevanz (MMR) anwenden.
- Sie können steuern, wie viele passende Ergebnisse und wie viel umgebender Text um jeden passenden Text dem LLM zur Zusammenfassung zur Verfügung gestellt wird
- Scale-Kunden können wählen, ob sie GPT-3.5-Turbo oder ein leistungsstärkeres LLM wie GPT-4 verwenden möchten
- Scale-Kunden können ihre Eingabeaufforderung anpassen, um Antworten zu generieren, die ihren Anforderungen entsprechen, z. B. die Antwort in Form einer E-Mail oder als Reihe von Aufzählungspunkten.
Alles in allem bietet Vectara eine erstklassige RAG-Implementierung, die von kleinen Demos bis hin zu groß angelegten Unternehmensbereitstellungen gut funktioniert.
Fazit
RAG entwickelt sich schnell zum Standardframework für die Implementierung von Unternehmensanwendungen auf Basis großer Sprachmodelle.
Um RAG selbst zu implementieren, sind ein erhebliches Maß an Wissen und Fachkenntnissen sowie kontinuierliche Investitionen in DevOps und MLOps erforderlich. Außerdem müssen Sie sich über die neuesten Innovationen bei LLMs und RAG auf dem Laufenden halten.
Vectara bietet „RAG in a box“ – ein API-First-System, das Entwicklern die Erstellung unternehmensreifer LLM-Anwendungen ermöglicht. Sowohl beim Einlesen als auch beim Abfragen übernimmt die bewährte GenAI-Plattform von Vectara die ganze schwere Arbeit für Sie – von der Vorverarbeitung, Aufteilung und Einbettung der Daten bis hin zur Verwaltung der Text- und Vektordatenbanken, der Verwaltung von Eingabeaufforderungen und dem Aufruf des LLM zum Erstellen einer Antwort. All dies geschieht unter Gewährleistung von unternehmensgerechter Sicherheit und Datenschutz, geringer Latenz und hoher Verfügbarkeit des Dienstes, sodass Sie sich darüber keine Sorgen machen müssen.
Während sich RAG weiterentwickelt, ergeben sich aus neuen Forschungsergebnissen neue Möglichkeiten zur Verbesserung der Leistung von RAG-Anwendungen. Bei Vectara überwachen wir all diese Innovationen ständig und integrieren sie in unser API-basiertes Angebot, sodass Sie davon profitieren können, indem Sie den Wert Ihrer GenAI-App in kürzester Zeit steigern.