In unserer schnelllebigen, digitalisierten Welt nehmen Künstliche Intelligenz und Machine Learning eine zentrale Rolle bei der Verarbeitung und Analyse von Informationen ein. Large Language Models (LLMs) sind dabei ein Schlüsselelement, da sie von der Textgenerierung bis zur Sprachübersetzung vielfältige Anwendungsmöglichkeiten bieten, jedoch auch Schwächen aufweisen. So haben LLMs nur die Möglichkeiten, Wissen aus öffentlichen Datenquellen wiederzugeben. Fakten, die von LLMs generiert werden, können zwar logisch erscheinen, aber trotzdem fachlich falsch sein. Zur Verbesserung von LLMs wird die Technologie Retrieval Augmented Generation (RAG) genutzt. RAG ermöglicht es, Texte anhand von bestehenden Informationen zu generieren und auf zugrundeliegende Quelltexte zu verweisen.

Chatbot Assistenten durch Nutzung von LLMs und Retrieval Augmented Generation: Grafische Darstellung zu PrivateGPT

In diesem Blogartikel wird die Architektur eines Chatbots erläutert. Dieser Chatbot nutzt einen Confluence Space namens „Employee Handbook“ und Zusammenfassungen aus Wikipedia (weitere Datenquellen wie z.B. PDF oder Google Drive sind allerdings auch denkbar), um Mitarbeitenden zu ermöglichen, schnell und effizient Antworten auf ihre Fragen zu finden. Zum Beispiel kann der Chatbot auf die Frage „Ich brauche einen Mietwagen, wie bekomme ich einen?“ relevante Dokumente finden und mithilfe eines LLMs eine detaillierte Antwort generieren, die dann zusammen mit den Quellenlinks präsentiert wird.

Das Bild zeigt eine Anfrage an einen Chatbot sowie dessen Antwort.

Was sind LLMs?

LLMs sind Machine Learning bzw. Deep Learning Modelle, die auf riesigen Mengen von Textdaten trainiert werden, um die Struktur der menschlichen Sprache zu verstehen. Diese Modelle nutzen neuronale Netzwerke, speziell eine Transformer-Architektur, die es ihnen ermöglicht, Kontext und Bedeutungen über lange Textpassagen hinweg zu erfassen und Texte in natürlicher Sprache zu generieren.

Wie erstellen LLMs Texte?

LLM generieren Texte anhand einer sogenannten Prompt. Diese Prompt ist ein Textabschnitt, der möglichst klare Anweisungen zur Aufgabe des LLM enthält. Transformer basierte LLMs sind “stateless”. Das bedeutet, dass bei einer Anfrage alle relevanten Informationen(Historischer Chatverlauf, Nutzerfrage, relevante Informationen) im Prompt enthalten sein müssen.

Visualisierung zur Frage "Wie erstellen LLMs Texte?"

Es ist allerdings wichtig anzumerken, dass LLMs eine sogenannte Completion erstellt. Sie ergänzen dementsprechend die angegebene Prompt mit den Zeichen und Wörtern, die, anhand des gegebenen Kontextes, logisch erscheinen. Anhand der Prompt “An apple a day” könnte ein LLM z.B. einen Text wie “keeps the doctor away” generieren.

Ein weiterer Aspekt, der bei der Textgenerierung berücksichtigt werden sollte, ist, dass LLM-Anbieter, Kosten für Anfragen in Tokens abrechnen. Tokens sind ähnlich wie Wörter. Sie sind allerdings etwas kleiner. Es kann also vorkommen, dass ein Wort in mehrere Tokens unterteilt wird (z.B. „verkaufen“ -> „ver“ und „kaufen“).  Wie aus Wörtern Tokens erstellt werden, kann von Modell zu Modell und von Anbieter zu Anbieter unterschiedlich sein. Im Englischen entspricht ein Wort in der Regel rund 1,3 Tokens. Im Deutschen werden Wörter in der Regel mehr zerteilt und so kommt man auf etwa 1,8 Tokens pro Wort.

Visualisierung zur Abrechnung von Kosten für Anfragen in Tokens

Anwendungsbeispiele von LLMs

  • Textgenerierung: LLMs können kohärente und relevante Texte auf der Grundlage vorgegebener Eingaben generieren. Dies wird unter anderem in der Erstellung von Artikelentwürfen, Geschichten oder sogar Code genutzt.
  • Sprachübersetzung: Dank der Fähigkeit, Muster in Sprachen zu erkennen, können LLMs Texte mit hoher Genauigkeit von einer Sprache in eine andere übersetzen.
  • Zusammenfassung von Texten: LLMs können lange Dokumente analysieren und prägnante Zusammenfassungen erstellen, wodurch die Informationsaufnahme effizienter wird.
  • Beantwortung von Fragen: Durch das Verständnis des Kontexts einer Anfrage können LLMs präzise Antworten auf spezifische Fragen liefern.

Herausforderungen und Grenzen

Trotz ihrer beeindruckenden Fähigkeiten sind LLMs nicht ohne Einschränkungen. Eine Herausforderung besteht darin, dass die von ihnen generierten Informationen zwar kohärent, aber möglicherweise ungenau oder veraltet sein können, da LLMs zu einem bestimmten Zeitpunkt trainiert werden. Wissen, das zu diesem Zeitpunkt nicht verfügbar ist, kann nicht in das Training eines LLMs einfließen und somit auch nicht erlernt werden.

Retrieval Augmented Generation

Retrieval Augmented Generation (RAG) ermöglicht Textgenerierung anhand von Wissensquellen und kombiniert somit die Leistungsfähigkeit von LLMs mit der Dynamik von Datensuche. Hierfür wird während des Generierungsprozesses von Texten auf externe Datenbanken und Informationsquellen zugegriffen. Dieser Ansatz ermöglicht es, die generierten Inhalte nicht nur auf dem neuesten Stand zu halten, sondern auch die Relevanz und Genauigkeit der Informationen zu verbessern. Im Kern arbeitet RAG durch zwei Hauptprozesse: Retrieval (Abruf) und Generation (Erzeugung).

Gehen wir von folgendem Szenario aus: Ein Nutzer stellt eine Frage in einem Chatbot. Zwei Sekunden später wurde vom Chatbot eine Antwort mit einer genauen Erklärung erstellt. Und der Chatbot verweist sogar auf Quellen, in denen die entsprechenden Informationen enthalten sind.

Damit eine solche Antwort auf eine Nutzerfrage anhand von Quelltexten erstellt werden kann, müssen zuerst entsprechende Quellen gesucht werden. Dies ist das sogenannte Retrieval. Im anschließenden Generierung-Schritt wird ein LLM angewiesen, anhand der Nutzerfrage und der gefundenen Quellen eine Antwort zu generieren. 

Retrieval

Bei Retrieval handelt es sich darum relevant Textabschnitte auszusuchen, die bei der Beantwortung einer Frage helfen können.  Je nach Quellsystem kann das Suchen von Dokumenten allerdings kompliziert werden. So auch bei der Verwendung von Confluence. Um anhand einer Anfrage (bzw. einer tatsächlichen Frage) passende Dokumente aussuchen zu können, muss die Anfrage zuerst in ein Embedding transformiert werden. Embeddings sind Vektordarstellungen von Texten, die es ermöglichen, die semantische Ähnlichkeit zwischen verschiedenen Textstücken zu quantifizieren. Für die Erstellung der Embeddings werden Modelle genutzt, die in der Lage sind, komplexe Sprachmuster und Kontextinformationen in ihren Vektordarstellungen zu erfassen. Das erstellte Embedding wird anschließend mit embeddings in einer Datenbank abgeglichen. Dokumente, deren Embeddings mit dem der Anfrage eine hohe Ähnlichkeit aufweisen, werden dann als Quelltexte für die Antwort des Chatbots ausgewählt.

Generierung von Embedding

Für die Transformation von Texten zu Embeddings können verschiedene Anbieter verwendet werden. In den hier dargestellten Diagrammen verwenden wir OpenAI als Beispiel. Die Verwendung von anderen Anbietern ist allerdings auch denkbar. So haben wir z.B. auch ein Model von AlephAlpha verwendet.

Datenbank

Als Datenbank haben wir die Vektordatenbank Chroma gewählt.  In ihr sind alle Text aus allen Quellsystemen als Embeddings abgespeichert. Es sollte beachtet werden, dass die Datenbank vor Verwendung des Chatbots befüllt werden muss. Wie die Datenbank befüllt wird und wie die Texte vorverarbeitet werden, wird in den kommenden Abschnitten erläutert.

1
2
3
4
5
Grafische Darstellung über die Erstellung einer Antwort durch einen Chatbot.
1

Nutzer stellt eine Frage im Chatbot.

2

Die Nutzerfrage wird durch den Dienst von OpenAI in ein Embedding transformiert.

3

In der Datenbank werden, anhand des Embeddings der Nutzerrage, nach ähnlichen Embeddings gesucht. Das Resultat dieser Suche sind Dokumente der ähnlichen Embeddings.

4

Der Dienst von OpenAI wird verwendet um eine Antwort auf die Nutzerfrage anhand der gefundenen Dokumenten zu erstellten.

5

Das Resultat ist eine Antwort auf die Nutzerfrage. Diese kann anschließend in einer Benutzeroberfläche angezeigt werden.

Datenbasis für den Chatbot

Daten für eine Datenbasis können aus verschiedenen Quellen stammen, wie beispielsweise interne Dokumentationen, Fachartikel oder öffentlich verfügbare Textkorpora. In unserem Fall werden sämtliche Daten aus einem unserer Confluence Bereiche namens „Employee Handbook“ verwendet. Nach dem Herunterladen aller Texte ist eine sorgfältige Aufbereitung notwendig, bei der irrelevante Informationen entfernt und die Daten in ein einheitliches Format gebracht werden. Bei der Überarbeitung der Textdaten ist es besonders wichtig, auf Lesbarkeit zu achten.

Anschließend werden die aufbereiteten Texte zu Embeddings transformiert und in einer Vektor-Datenbank gespeichert. 

1
2
3
4
Visualisierung für Datenbasis für den Chatbot: Der Weg von Confluence über Säuberung der Daten und OpenAI Embedding zu Chroma DB
1

Ein Confluence Space als Quellsystem.

2

Die aus Confluence extrahierten Informationen durchlaufen eine Nachverarbeitung. Alle Informationen werden in ein einheitliches Format(Markdown) gebracht. Zusätzlich werden auch Datenunreinheiten und unnötige Zeichen entfernt.

3

Die gesäuberten Texte werden durch ein Machine Learning Model in Embeddings Transformiert. Hierfür kann eine Dienst von OpenAI verwendet werden.

4

Erstellte Embeddings werden, mit ihren Metadaten und ursprünglichen Texten, in einer Chroma DB (Vektor DB) abgelegt.

Text Säuberung und Vorverarbeitung 

Aus Confluence erhalten wir, anhand der API von Atlassian, Confluence Seiten als HTML. Diese Seiten werden in einem ersten Schritt zum Markdown konvertiert. Markdown enthält im Vergleich zu HTML mehr reinen Text. Informationen in Textform können dementsprechend in einem kürzeren Textabschnitt dargestellt werden.

Die tatsächliche Menge an reinem Text, der sich auf diesen Seiten befindet, kann sich stark unterscheiden und reicht von ein paar Worten bis hin zu Tausenden. Die Menge an Tokens, die ein LLM verarbeiten kann, ist allerdings limitiert. Neuere Modelle sind zwar in der Lage, sehr große Textabschnitte zu verarbeiten, durch die Wahl von GPT-3.5-Turbo sind wir allerdings auf eine Länge von 8192 Tokens beschränkt.

Damit dem Modell in dem Prompt verschiedene Textabschnitte, sowie historische Nachrichten und entsprechende Anweisungen bereitgestellt werden können, zerteilen wir die Confluence Seiten in kleinere Textabschnitte. Seiten werden zuerst anhand logischer Grenzen, z.B. ihrer Überschriften und Unterüberschriften aufgeteilt. Sollten die resultierenden Textabschnitte immer noch zu viele Tokens enthalten, werden sie in gleich große Teiltexte aufgeteilt. Hierfür wird eine maximale Größe von 512 Tokens verwendet. Informationen zur Überschrift werden in jedem Teiltext übernommen.

Im folgenden Bild ist zu erkennen, wie eine Seite des Employee Handbooks in Textabschnitte aufgeteilt werden könnte. Jeder grüne Kasten steht dabei für einen Textabschnitt.

Text Säuberung und Vorverarbeitung

Textgenerierung

Verschiedene Anbieter verfügen über Modelle, die in der Lage sind, Texte in natürlicher Sprache zu erstellen. Für unseren Assistant wurden mehrere Anbieter von LLMs bzw. deren Modelle getestet. Bei der Nutzung von GPT-3.5-Turbo und GPT-4 wurde eine höhere Textqualität im Vergleich zu anderen Anbietern bzw. Modellen wahrgenommen. Zwischen den beiden Modellen GPT-3.5-Turbo und GPT-4 konnte kein deutlicher Unterschied in der Textqualität festgestellt werden. Aus diesem Grund generieren wir Texte mit dem günstigeren GPT-3.5-Turbo. Sollten die Aufgabe des Chatbots vielseitiger werden, könnte eine Verwendung von GPT-4 trotzdem sinnvoll werden.

Es sollte auch angemerkt werden, dass wir keine Modelle verwenden, die von OpenAI selbst betrieben werden. Stattdessen verwenden wir die auf Microsofts Azure angebotenen Modelle, um die Daten möglichst geschützt zu halten.

Zusammenfassung und Ausblick

In unserer digitalisierten Welt spielen Informationen eine wichtige Rolle. Wie lesbar und zugänglich diese Informationen sind, hängt jedoch von ihrer Art ab. Retrieval-Augmented Generation (RAG) hilft dabei, Wissensquellen zugänglicher zu machen und selbst komplexe Informationen verständlich darzustellen. Dies geschieht, indem zunächst Quellen gesucht werden und anschließend durch Textgenerierung maßgeschneiderte Antworten auf Nutzerfragen erstellt werden. Damit Large Language Models (LLMs) anhand der ausgewählten Dokumente gute Antworten generieren können, ist eine saubere und strukturierte Vorverarbeitung der Quelltexte wichtig.

Darüber hinaus hilft RAG dabei, die Anzahl der von LLM getätigten falschen Aussagen zu reduzieren und die Aktualität der enthaltenen Informationen sicherzustellen.

Kontaktiere uns

Besitzt Du komplexe Informationsquellen? Wünschst Du Dir klare Erklärungen zu Deinen Fragen? Benötigst Du eine maßgeschneiderte KI-Lösung?

Zögere nicht, uns bei allen Fragen zu kontaktieren. Unser Team aus Experten im Bereich der generativen KI steht Dir zur Verfügung, um Dich bei der Beratung und Entwicklung angepasster KI-Systeme zu unterstützen. Wir sind gespannt darauf, von Dir zu hören und gemeinsam innovative Lösungen zu erarbeiten, die Dein Geschäft mithilfe von Künstlicher Intelligenz vorantreiben können.

Contact us

Nimm gerne Kontakt zu uns auf!

Ich hoffe, die Seite konnte Dir einen Einblick darüber geben, wie die Architektur eines Chatbots aussehen kann.

Du möchtest selbst die Möglichkeiten von generativer KI in Deinem Unternehmen implementieren? Dann freue ich mich über den Austausch mit Dir!

Lukas Theurer Data Scientist

Lukas Theurer
Data Scientist | Enterprise Analytics & Sustainability