Was ist Retrieval-Augmented Generation (RAG)?

Jun 17th, 2024

Was ist RAG (Retrieval-Augmented Generation)?

Retrieval-Augmented Generation ist eine Methode, um einem Large-Language-Model schnell und unkompliziert neues, eigenes oder aktuelles Wissen beizubringen.
Die meisten LLMs haben noch keinen Zugriff auf aktuelle Daten, und öffentliche KI-Systeme wie ChatGPT haben keinen Zugriff auf unternehmenseigene Informationen. Eine Option wäre nun, ein Modell fein abzustimmen. Dies ist aber relativ kostspielig und datenintensiv. Hier bietet sich als kostengünstige Alternative die RAG-Methode an. Dabei werden die benötigten Daten zum Beantworten der Frage eines Benutzers bei jeder Anfrage an die KI mitgesendet.


Um nicht bei jeder Frage jedes Benutzers alle Dokumente mitsenden zu müssen, werden die Dokumente vorab in einer Vektordatenbank gespeichert. Dazu extrahiert man alle Texte aus den Dokumenten und verwendet ein Embedding-Modell wie zum Beispiel "text-embedding-3-small" von OpenAI, um ein Embedding des Dokuments zu erstellen und in der Datenbank zu speichern.

Für die Speicherung und Suche von Embeddings gibt es spezialisierte Datenbanken. Pinecone, Weaviate, ChromaDB oder auch zum Beispiel Milvus sind darauf ausgelegt, große Mengen von Embeddings effizient zu handhaben und schnelle Abfragen zu ermöglichen. Eine sehr einfache Lösung kann zum Beispiel auch der Einsatz von pgvector sein, einer Erweiterung für die bekannte Datenbank PostgreSQL. Der Vorteil von pgvector ist oft, dass man seine Embeddings "neben" seinen regülären Daten in der Datenbank speichern kann und keine weitere / extra Datenbank für die Embeddings verwenden muss.


Wenn dann ein Benutzer eine Frage stellt, wird auch von dem Text der Frage ein Embedding erstellt und mit dem Embedding relevante Inhalte aus der Vektordatenbank gesucht. Dann wird die Frage zusammen mit allen relevanten Inhalten an die KI gesendet mit einem System-Prompt wie "Nutze diese Informationen, um die Frage des Benutzers zu beantworten."


Dieser Prozess kann dann beliebig komplex werden; wie viele Dokumente werden der KI mitgegeben? Was macht man mit Texten, die zu lang sind, um sie an einem Stück zu verarbeiten? Macht es Sinn, die gleiche Frage immer wieder aufs Neue zu beantworten, oder sollte man diese cachen?

Einige Herausforderungen bei der Implementierung von RAG sind:

Skalierbarkeit: Bei großen Datenmengen kann die Suche zeitaufwendig werden.

Qualitätskontrolle: Um die Qualität der zurückgegebenen Informationen sicherzustellen, können Evaluationsmetriken wie Precision, Recall und F1-Score genutzt werden. Auch menschliches Feedback (Human-in-the-Loop) und automatisierte Tests tragen zur kontinuierlichen Verbesserung bei.


Bei vielen dieser Schritte gilt: Ausprobieren, was besser funktioniert. Es liegt gerade beim Thema KI in der Natur der Dinge, dass es nicht immer eine "beste Lösung" gibt.