Bessere Chatbots durch RAG - Retrieval Augmented Generation

#RAG - Retrieval Augmented Generation

#LLM - Large Language Model

#generative KI

RAG steht für Retrieval-Augmentation-Generation und bezieht sich auf eine Methode zur Verbesserung von Chatbots. Durch die Einbindung von externen Wissensbasen und die gezielte Erweiterung von Anregungen können präzisere und kontextrelevantere Antworten generiert werden. Dies führt zu einer verbesserten Benutzererfahrung und genauerer Informationslieferung.

chatbot
Portrait von Bernhard Mayr

Mag. Dr. Bernhard Mayr, MBA

Geschäftsführer, passgenau digital GmbH

Published 06.11..2023

Chatbots und deren Verwendung von LLMs

Chatbots wie der beliebte ChatGPT verwenden große Sprachmodelle (LLMs - Large Language Models) wie GPT, um Antworten zu generieren. Dadurch können sie leicht unsere Fragen (prompts) beantworten, indem sie auf die Daten zurückgreifen, auf die sie trainiert wurden. Ich persönlich würde sie daher eher als digitale Enzyklopädien bezeichnen, die Informationen aus einem umfangreichen Wissensspeicher abrufen.

Tatsächlich sind sie sehr praktisch, wenn es darum geht, bei allem möglichen zu helfen - von der Generierung von Rezepten, der Planung von Reisen bis hin zur Lösung kniffliger mathematischer Probleme.

Der Workflow zum Erstellen einfacher Chatbots

  1. Der Endbenutzer sendet seine Anfragen (d.h. Anregungen). - Den “Prompt”
  2. Die Anfrage wird vom LLM (d.h. auf Basis der vorab trainierten Wissensbasis) verarbeitet, wobei sowohl der Prompt des Endbenutzers als auch der Systemcontext eingebettet werden.
  3. Schließlich wird eine gut ausgearbeitete Antwort generiert und zurückgegeben.

Die regelmäßige Verwendung von ChatGPT hat die Bedeutung der Erstellung unserer Anregungen hervorgehoben. Ein gut formulierter Prompt führt zu einer genaueren Antwort des LLMs. Mit dem richtigen Prompt kann man sogar Daten visualisieren und Diagramme erstellen lassen.

In unserem Prompting Kurs zeigen wir, wie professionelle Prompts erstellt werden: Mastering Chat-GPT. Erstellen von wirkungsvollen Prompts für bessere Interaktionen und zielorientierte Ergebnisse.

Diese einfachen Chatbots auf Basis von LLMs haben zwei Hauptnachteile:

  1. Begrenzt auf trainierte Informationen: Bots wie ChatGPT werden nach einem bestimmten Punkt nicht mehr mit neuen Informationen trainiert. Daher sind sie möglicherweise nicht über die neuesten Entwicklungen in der Welt informiert.
  2. Erfinden von Informationen oder Halluzinationen: Manchmal können LLMs, wenn sie unsicher sind, Dinge sagen, die wahr klingen und plausible erscheinen, aber nicht korrekt sind. Sie könnten Lücken mit irrelevanten Antworten füllen. Oft neigen sie dazu, zu halluzinieren.

Das Konzept von RAG - Retrieval Augmented Generation

Ich denke, es lohnt sich, das Hauptkonzept von RAG aus dem Abstract des Artikels [1] zu teilen, um ein klareres und umfassenderes Verständnis zu ermöglichen:

Large pre-trained language models have been shown to store factual knowledge in their parameters, and achieve state-of-the-art results when fine-tuned on downstream NLP tasks. However, their ability to access and precisely manipulate knowledge is still limited, and hence on knowledge-intensive tasks, their performance lags behind task-specific architectures.

Additionally, providing provenance for their decisions and updating their world knowledge remain open research problems.

Pre-trained models with a differentiable access mechanism to explicit non-parametric memory can overcome this issue, but have so far been only investigated for extractive downstream tasks.

We explore a general-purpose fine-tuning recipe for retrieval-augmented generation (RAG) — models which combine pre-trained parametric and non-parametric memory for language generation.

In einer auf RAG basierenden Chatbot-Implementierung erfordert unser Workflow einige zusätzliche Schritte:

  1. Benutzerinteraktion / Verwendung von Prompts: Wie bei einem einfachen Chatbot muss der Endbenutzer eine Anfrage einreichen.
  2. Orchestrierung des Prompts / Prompting-Vorlage: Implementierung einer verwandten Konversationshistorie oder Hinzufügen von mehr Kontext (dieser Schritt erfolgt auch später bei der Anreicherung des Prompts mit Kontext).
  3. Abrufen bzw. Abrufen von Daten aus einer externen Wissensbasis: Bevor der Prompt an das LLM gesendet wird, konsultiert das System Abrufwerkzeuge. Diese Werkzeuge umfassen häufig Wissensdatenbanken und APIs. Zum Beispiel Wikipedia oder Vektordatenbanken wie Pinecone oder Weaviate. Die Abrufwerkzeuge sollen Kontext aus der Wissensbasis erhalten.
  4. LLM-Verarbeitung: Nachdem der Kontext über die Abrufwerkzeuge hinzugefügt wurde, wird der Prompt jetzt mit zusätzlichem Kontext unterstützt. Und schließlich wird dieser Prompt (Benutzer-Prompt + System-Prompt + Kontext) an das LLM gesendet.
  5. Generierung der Antwort: Das LLM, das jetzt mit einem besseren und informativeren Prompt ausgestattet ist, erstellt eine relevante und informative Antwort.

Ein Chatbot mit RAG-Pipeline erstellen

Jetzt, da wir eine allgemeine Vorstellung von den wichtigsten Aspekten von RAG-basierten Chatbots haben, sollten wir versuchen, einen zu erstellen und einzusetzen! Hierfür verwenden wir LangChain und Databutton.

Ein großes Dankeschön an Open-Source-Plattformen wie LangChain und LlamaIndex - sie haben die Orchestrierungsebene und die Integration mit LLMs durch ihre Tools immens vereinfacht.

Das Gehirn unserer App - Externe Wissensbasen

Da unsere externen Datenquellen PDF-Dateien von Endbenutzern sind, sollten wir damit beginnen, einige Funktionen zum Einlesen dieser Daten zu schreiben. Wir analysieren jedes hochgeladene PDF, teilen den Text auf und erstellen eine Liste von Dokumenten. Beachten Sie: Wir stellen sicher, dass alle Informationen der Metadaten gut erhalten bleiben.

Natürlich können wir an dieser Stelle jede beliebige Daten- bzw. Wissensbasis für die Verwendung mit unserem Chatbot einbinden: unternehmensweite Sharepoint-Server, SQL- und noSQL Datenbanken, Web-APIs, Externe Dokumenten, Websites, etc.

Indexierung ist entscheidend bei der Arbeit mit LLMs

Eine Vektordatenbank speichert und arbeitet nicht direkt mit Texten. Daher ist es wichtig, Texte in vektorisierter Form darzustellen. Dieser Schritt wird oft als Anwendung von Embeddings bezeichnet - dies erfasst die semantischen und kontextuellen Informationen der Daten. Wir verwenden das Python-Paket FAISS, um diesen Schritt durchzuführen. Die bewährte Methode besteht darin, Embeddings in einer Vektordatenbank zu speichern. Eine Vektordatenbank ist unglaublich leistungsstark und erleichtert die Arbeit mit vektorisierten Daten. Beliebte Vektor-Speicher sind Pinecone oder Weaviate.

Den Frontend-Bereich aufbauen

Lassen Sie uns gleichzeitig den Frontend-Bereich aufbauen, in dem wir dem Endbenutzer normalerweise ermöglichen, eine beliebige PDF-Datei hochzuladen, sie zu indexieren und schließlich damit zu chatten! Als nächstes müssen wir eine Funktion schreiben, die eine Vektordatenbank basierend auf dem Inhalt der hochgeladenen PDF-Dateien erstellt, sie indiziert und als Sitzungszustand speichert. Ich empfehle jedoch dringend, eine Vektordatenbank zur Speicherung solcher Vektorembeddings zu verwenden.

Wann immer ein Prompt vom Endbenutzer eingeht, interagiert das System zuerst mit externen Datenbanken wie Vektordatenbanken, anstatt sie direkt über das LLM weiterzugeben. Daher ist es wichtig, einen gut formulierten individualisierten Prompt zu erstellen, der darauf ausgelegt ist, weiteren Kontext aufzunehmen (d.h. wir erweitern hier unsere Anregung)!

Antworten generieren

Als nächstes geben wir den Prompt und die verschiedenen Kontexte an das LLM zurück, um auf der Grundlage der Anfrage des Endbenutzers eine relevante Antwort zu generieren. Außerdem geben wir die generierten Antworten vom LLM weiter, um eine Chat-GPT-ähnliche Atmosphäre zu schaffen!

Fazit

Herzlichen Glückwunsch! Gemeinsam haben wir einen Chatbot entwickelt, der mit RAG (Retrieval-Augmentation-Generation) verbessert wurde.

Kurz gesagt bestehen die Bausteine solcher RAG-basierten Chatbots typischerweise aus:

a) Abrufen von Daten aus vektorisierten Benutzerinformationen

b) Kontextbasierte Erweiterung von Prompts basierend auf den Anfragen der Endbenutzer

c) Generierung zuverlässigerer Antworten auf die Anfragen der Endbenutzer

Die Integration solcher RAG-basierten Ansätze für individualisierte LLM-basierte Produkte erhöht die Chance, kontexterreichere und präzisere Informationen zu erhalten und sicherzustellen, dass die Antworten auf spezifische Benutzeranfragen zugeschnitten sind. Insgesamt einfach eine bessere Chatbot-Erfahrung.

[1] https://arxiv.org/abs/2005.11401

images: Image by vectorjuice on Freepik

Interessiert? In einem kostenlosen Beratungsgespräch besprechen wir Ihre individuellem Anforderungen an den Einsatz künstlicher Intelligenz! Beratungstermin vereinbaren