RAG: Die Notwendige Erklärung für Dynamisches Unternehmenswissen

In der heutigen IT-Landschaft ist die Fähigkeit von Large Language Models (LLMs) unbestritten. Das Problem ist jedoch die Aktualität des Wissens. Da das zugrundeliegende Modell (LLM) mit statischen Daten trainiert wird, müssten wir es bei jeder Änderung unserer internen Dokumentation neu trainieren. Das ist ökonomisch nicht tragbar.

Die strategische Architektur zur Lösung dieses Problems ist die Retrieval-Augmented Generation (RAG), zu Deutsch etwa Abruf-erweiterte Generierung. Das Prinzip ist einfach, aber effektiv: Die Antwort des Chatbots wird erweitert durch das Abrufen der relevantesten, aktuellen Kontextinformationen aus unserer Wissensbasis.


Die Architektur-Elemente: Die Notwendigen Bausteine

Der Aufbau eines maßgeschneiderten, wissensbasierten Chatbots erfordert die Integration von drei Kernkomponenten.

1. Das Chat-Modell (LLM)

Zuerst benötigen wir ein generisches LLM. Das kann ein etablierter Dienstleister (wie ChatGPT), ein selbst gehostetes Modell über Plattformen wie Ollama oder ein anderer LLM-Anbieter sein.

Die Anforderung: Wir benötigen eine API, um programmgesteuert auf die Chat-Vervollständigungsfunktion zugreifen zu können. Bibliotheken wie LangChain für Python bieten bereits eine vereinheitlichte Schnittstelle an. Das erleichtert das Experimentieren mit verschiedenen Modellen (und uns das Leben, weil wir den Code nicht ständig umschreiben müssen).

2. Das Embedding-Modell

Als Nächstes benötigen wir ein Embedding-Modell, um Vektor-Embeddings zu erstellen. (Hier wird es technisch, aber hören Sie mir kurz zu, das ist der Schlüssel zur intelligenten Suche.)

Wenn ein LLM Text verarbeitet, wird dieser in diskrete Teile, sogenannte Token, zerlegt. Das Embedding-Modell transformiert diese Token weiter in einen Vektor. Ein Vektor ist im Grunde eine Menge von Koordinaten, die einen Punkt im sogenannten latenten Raum definieren.

Analogie: Das ist vergleichbar mit der Verwendung von Längen- und Breitengrad, um einen Punkt auf der Erde zu bestimmen. Der Punkt in diesem „seltsamen Raum“ ist wichtig, weil wir jetzt die Entfernung und damit die Ähnlichkeit berechnen können. Je näher zwei Vektoren beieinander liegen, desto ähnlicher sind die Bedeutungen der ursprünglichen Texte.

Genau diese Vektor-Embeddings nutzen wir, um unsere Datenbank abzufragen und die am besten passenden Übereinstimmungen zu erhalten. (Anmerkung: Oft wird ein Chat-Modell zusammen mit einem Embedding-Modell geliefert, aber die Wahl eines dedizierten Modells für das Vektor-Embedding ist problemlos möglich und oft sinnvoll.)

3. Der Vektor-Speicher (Vector Store)

Das dritte benötigte Element ist der Vector Store. Das ist die Datenbank, die die Informationsstücke unserer Wissensbasis zusammen mit ihrem Vektor-Embedding speichert.

Funktionsweise: Wenn der Benutzer eine Frage stellt, berechnen wir zuerst das Vektor-Embedding dieser Frage. Anschließend führen wir eine Ähnlichkeitssuche durch, um die ähnlichsten Vektoren und ihre zugehörigen Textstücke aus der Datenbank abzurufen. Diese abgerufenen Texte bilden den Kontext für die Chatbot-Antwort.

Heutzutage unterstützen viele Allzweck-Datenbanken Vektor-Speicherfunktionen, wie z.B. Redis, Postgres über PGVector oder MongoDB Atlas Vector Search. Darüber hinaus gibt es natürlich spezialisierte Datenbanksysteme. (Eine Liste der verfügbaren Vector Stores ist leicht auffindbar.)


Befüllen und Erweitern: Der RAG-Workflow

Die Wissensbasis Vorbereiten (Ingestion)

Man könnte sich naiv fragen: Warum nicht einfach die gesamte Wissensbasis an das LLM übergeben?

Die Antwort ist zweigeteilt:

  1. Kontextfenster-Limit: Wir können dem LLM nicht beliebig große Eingabetexte übergeben.
  2. Kosten: Die Begrenzung des Inputs spart erhebliche Rechenkosten. Der Betrieb von LLMs ist kein billiges Unterfangen.

Die Lösung: Wir müssen den Text verarbeiten. Wir zerkleinern ihn in kleinere, sich überlappende Stücke.

Für jedes Stück berechnen wir das Vektor-Embedding und fügen das folgende Tripel-Daten-Set in den Vektor-Speicher ein:

  • Vektor-Embedding: Für das Abrufen durch Ähnlichkeitssuche.
  • Textstück: Bildet den Kontext der Chatbot-Antwort.
  • Speicherort der Quelldatei: Wird verwendet, falls die Datei aktualisiert wird und Teile des Vektor-Speichers neu berechnet werden müssen (Maintenance).

Den Chatbot Erweitern (Retrieval-Augmented Generation)

Eine Konversation ist eine Liste von Nachrichten. Wenn der Benutzer eine Nachricht sendet, wird die gesamte Konversation normalerweise zur Auswertung an den Chatbot übergeben.

Der RAG-Schritt: Bevor diese Konversation dem LLM zugeführt wird, wird die Benutzeranfrage durch das Abrufen der relevantesten Textstücke aus dem Vektor-Speicher erweitert.

Der resultierende erweiterte Prompt sieht wie folgt aus – er enthält die ursprüngliche Benutzeranfrage und den abgerufenen Kontext:

Du bist ein hilfreicher Chatbot, der die gegebenen Kontextstücke verwendet, um eine Antwort auf die folgende Frage zu formulieren. Wenn Du die Antwort nicht weißt, gib einfach zu es nicht wissen. Halte die Antwort kurz, verwende maximal drei Absätze. Frage: {question} Kontext: {context} Antwort:

Schließlich füttern wir die erweiterte Konversation in das zugrundeliegende LLM und geben die Antwort an den Benutzer zurück.


Letzte Gedanken: Tuning und Strategie

Wie Sie sehen, ist der Bau eines eigenen RAGs architektonisch nicht übermäßig kompliziert. Die eigentliche Arbeit liegt im Feintuning (und das ist der Teil, der uns Entwicklern wirklich Spaß macht, aber oft unterschätzt wird).

Wir müssen an vielen Stellen experimentieren, um die optimale Performance zu erreichen:

  • Chunk-Größe: Wie groß sollten die abgerufenen Textabschnitte sein?
  • Abrufmenge: Wie viele Abschnitte (K) sollten in den Kontext aufgenommen werden?
  • Prompt Engineering: Was ist der beste erweiterte Prompt für unseren spezifischen Zweck?
  • Modellwahl: Welchen Effekt hat die Verwendung eines anderen Chat- oder Embedding-Modells?
  • Organisation: Erhalte ich bessere Ergebnisse, wenn ich die Wissensbasis anders organisiere?
  • Referenzierung: Kann ich die Information über den Speicherort der Quelldatei zum Kontext hinzufügen, damit der Chatbot auch auf die Quelle seiner Informationen verweisen kann?

RAGs haben das Potenzial, als intelligente Suchmaschinen für das Wissen unseres Unternehmens zu fungieren, Prozesse zu optimieren und neue Anwendungsfälle zu realisieren. Es gibt keinen Grund, diese Technologie nicht sofort zu erproben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert