decídalo Insights: Über LLMs und Chatbots

Dank der jüngsten Fortschritte im Bereich der Large Language Models (LLMs), wie zum Beispiel ChatGPT, ist es heutzutage viel leichter geworden, intelligente Chatbots zu entwickeln, die auf eigene Daten zugreifen können. Allerdings treten dabei verschiedene Herausforderungen auf. Zum einen ist das Wissen der LLMs statisch, was bedeutet, dass neues Wissen, welches nach dem Training des LLM entsteht, für das LLM unbekannt ist (beispielsweise liegt der Wissenshorizont von ChatGPT im Septemer 2021). Zum anderen ist die Kontextgröße von LLMs beschränkt, was bedeutet, dass es nicht möglich ist, alle verfügbaren Daten gleichzeitig zur Verfügung zu stellen. Die Kontextgröße ist die Anzahl an Tokens, die das LLM verarbeiten kann (bei ChatGPT sind das beispielsweise maximal 4096 Tokens). Dabei entspricht ein Token ungefähr vier Zeichen. 

Um diesen Herausforderungen zu begegnen, verwenden wir das Retrieval-Augmented Generation Pattern für unseren decídalo-Chatbot. Dabei werden zuerst diejenigen Dokumente gesucht, die semantisch ähnlich zu der gestellten Frage sind, und das LLM nutzt diese Informationen anschließend, um eine Antwort zu generieren. Auf diese Weise kann das LLM Fragen zu externen Datenquellen beantworten. 

Ein Überblick über das Pattern liefert die folgende Darstellung.

Vorbereitung für die semantische Suche

Um den Kontext der Dokumente mit zu berücksichtigen, verwenden wir sogenannte Embeddings. Das sind Funktionen, die Text auf numerische Vektoren abbilden. Beispielsweise wird der Satz „the quick brown fox jumps over the lazy dog“ in den 1536-dimensionale Vektor (0.0053, 0.0049, …) transformiert. Semantisch ähnliche Texte werden dabei in diesem Embedding nahe beieinander platziert, während semantisch unähnliche Texte weit voneinander entfernt liegen. Ähnlich wie LLMs werden Embeddings auf umfangreichen Datensätzen trainiert. Allerdings haben Embeddings wie LLMs eine begrenzte Kontextgröße, sodass größere Dokumente in mehrere Textteile aufgeteilt werden müssen.

Diese Embeddings werden nun in einer Vektordatenbank gespeichert.

Im Falle unseres decídalo-Chatbots werden die Daten aus den Profilen sektionsweise in der Vektordatenbank abgespeichert. Dabei werden Projekte ebenfalls auf mehrere Vektoren aufgeteilt.

Semantische Suche

Wenn der User nun eine Suchanfrage stellt, wird diese ebenfalls mit dem gleichen Embedding transformiert und mit den Dokumentenvektoren aus der Vektordatenbank verglichen. Zur Bestimmung der Ähnlichkeit zwischen zwei Vektoren wird die Kosinus-Ähnlichkeit verwendet. Das ist der Kosinus des Winkels zwischen den beiden Vektoren. Bei normierten Vektoren kann äquivalent die euklidische Distanz verwendet werden. Unter Berücksichtigung der Kosinus-Ähnlichkeit werden die k nächsten Dokumente zurückgegeben. Dabei ist k die Anzahl der zu berücksichtigen Dokumente und wird je nach Use Case und Länge der Dokumente gewählt, da wir die begrenzte Kontextgröße der LLMs berücksichtigen müssen.

Generierung der Antwort

Aus der Frage des Users und den durch die semantische Suche gefundenen Dokumenten wird ein einzelner Prompt erstellt, der dem LLM übergeben wird, um die Antwort zu generieren. Dem Prompt kann man noch weitere Informationen ergänzen, wie zum Beispiel die Ausgabesprache oder den Stil der Antwort. Ein Beispiel für so einen Prompt ist der Folgende:

Du bist ein Chatbot, der auf die Fragen der Kunden antworten soll.

Relevanter Kontext: {context}

Frage: {question}

Hilfreiche Antwort:

Die Variablen context und question werden dann durch die gefundenen Dokumente beziehungsweise der Frage des Users ersetzt.

Multitool Chatbot

Auf ähnliche Weise können wir dem Chatbot verschiedene Tools und APIs zur Verfügung stellen. Dafür werden für die Tools und APIs Beschreibungen bereitgestellt, wann diese verwendet werden sollen. Der Chatbot entscheidet dann, basierend auf der User-Eingabe, welches Tool geeignet ist und setzt dieses gemäß der Anweisungen in der Eingabe ein.

In unserer Anwendung verwenden wir eine Weiterentwicklung der semantischen Suche, die wir hybride Suche nennen. Diese Methode kombiniert die Vorteile der semantischen Suche mit den Vorteilen der Keyword-basierten Suche.

Zum Abschluss präsentieren wir ein Beispiel, dass die beeindruckende Leistungsfähigkeit der semantischen Suche verdeutlicht. Nehmen wir an, Sie suchen nach einem Skill wie beispielsweise „Large Language Models“. Ein herkömmlicher Suchalgorithmus würde keine Ergebnisse liefern, da dieser Skill so neu ist, dass ihn bisher niemand in seinem Profil vermerkt haben wird. Die semantische Suche hingegen nutzt den Kontext der Frage und sucht nach ähnlichen Skills, um Ihnen dennoch eine aussagekräftige Antwort zu liefern.

User: Wer kennt sich mit Large Language Models aus?

Chatbot: Ich kann nicht genau sagen, wer sich mit Large Language Models auskennt, da die bereitgestellten Informationen hauptsächlich Projekte und Fähigkeiten im Bereich Natural Language Processing (NLP) erwähnen. Erika Musterfrau und Max Mustermann haben Erfahrungen im Bereich NLP, aber es ist unklar, ob sie auch speziell mit Large Language Models gearbeitet haben.

Außerdem bewältigt der Chatbot mühelos anspruchsvolle Anfragen wie etwa „Ich brauche einen erfahrenen Projektmanager, der sich mit Datenanalyse und Scrum auskennt“ oder „Ich brauche ein ausgewogenes Team für ein Projekt im Bereich Cyber Security in der Energiebranche“.

Zum dazugehörigen Blogartikel über unseren decídalo-Chatbot mit Video gelangen Sie hier.

Sollten Sie noch Fragen haben, stehen wir Ihnen gerne zur Verfügung.