ChatGPT mit Deinen Daten nutzen

Autor: Gian Hiltbrunner

Jeder kennt mittlerweile OpenAIs ChatGPT. Viele benutzen das Tool bereits für eine Vielfalt an täglichen Aufgaben: ob beim Verfassen von E-Mails, Erstellen von Berichten oder sogar beim Programmieren. Diese Modelle, auch LLMs genannt, sind also sehr vielfältig einsetzbar. In diesem Blog möchte ich gerne aufzeigen, wie Du derartige Modelle noch besser an Deine Anforderungen anpassen kannst. Dazu setzen wir uns speziell mit dem Prinzip der Retrieval-Augmented-Generation auseinander. Dabei geht es darum, wie Du ein Modell, wie ChatGPT, nutzen kannst, um Antworten basierend auf Deinen eigenen Daten zu erhalten. Zudem gehe ich darauf ein, wie Du dies ganz einfach mit Deinen eigenen Daten im neuen Azure OpenAI Studio [1] umsetzen kannst.

Was LLMs sind

Was steckt eigentlich hinter diesen Large Language Modellen (LLMs) oder auf Deutsch "Großen Sprachmodellen"? LLMs sind Machine-Learning Modelle, die primär für sequenzielle Daten wie diesen Text konzipiert sind. Diese grossen Sprachmodelle können dabei die Beziehungen innerhalb eines Satzes erkennen. Dies ermöglicht ihnen, den Kontext von komplexen Texten effektiver zu erfassen, als ältere Modelle dies tun. Das besondere Talent von LLMs besteht also darin, Satzteile in ihrem jeweiligen Kontext zu verstehen [2] sowie Informationen mit einer beeindruckenden Geschwindigkeit zu verarbeiten. Zweiteres gelingt ihnen, indem sie Eingaben parallel bearbeiten, was einen deutlichen Fortschritt gegenüber herkömmlichen Ansätzen darstellt

Wo ChatGPT & Co. an ihre Grenzen kommen

Die herausragende Leistungsfähigkeit neuester LLM-Modelle wie ChatGPT oder LLama2 [3] steht also ausser Frage. Doch was, wenn ich eine kurze Übersicht über einen Newsartikel wünsche, der erst heute erschienen ist, oder ich Informationen zu firmeninternen Daten benötige, die im Training des LLM nie berücksichtigt wurden? 

Da gelangen Sprachmodelle an ihre Grenzen. Besonders, wenn es um Daten geht, die sie während ihrer Trainingsphase nicht gesehen haben. 

Heute möchte ich beleuchten, wie man diese Einschränkungen überwinden kann und wie Du das selbst einfach ausprobieren kannst.

Wie Du die Grenzen von LLMs ausloten kannst

Eine effektive und simple Methode, um vom Modell präzisere und auf das eigene Problem zugeschnittene Antworten zu erhalten, ist das Prompt Engineering. "Prompts" bezieht sich hier auf die Eingabeaufforderungen. Die Prompts sollten dabei so modifiziert werden, dass sie dem LLM mehr Kontext bieten. Das Prompt Engineering ermöglicht somit, Stil und Ton zu steuern oder Fachwissen zu ergänzen, ohne tiefgreifende Änderungen am Modell vornehmen zu müssen. [4] Falls Du also beispielsweise ChatGPT fragst, wie ein bestimmter Text aufzufassen sei, kannst Du den Prompt mit Klassen wie “Positiv”, “Negativ” oder “Neutral” ergänzen, um spezifischere Antworten zu erhalten.

Sollte das Prompt Engineering nicht die erhofften Ergebnisse liefern, stehen uns weitere Ansätze zur Verfügung, um ein LLM für einen speziellen Anwendungsfall zu optimieren. Ein komplettes Neutraining des Modells ist dabei meist nicht notwendig. Es kann oft ausreichen, ein vorhandenes Basis-Modell gezielt auf unsere spezifischen Herausforderungen zuzuschneiden. Das kann beispielsweise bedeuten, das Modell auf domänenspezifische Begriffe zu trainieren oder seine Antworten so zu modifizieren, dass sie besser zum Kommunikationsstil Deines Unternehmens passen. Wenn es aber darum geht, die Leistung eines Modells für eine spezielle Aufgabe zu verbessern, kann das Modell mit aufgabenrelevanten Beispielen trainiert werden. Doch obwohl Feinabstimmung ein leistungsstarkes Werkzeug ist, bringt sie auch besondere Herausforderungen mit sich. Sie ist ressourcenintensiv und kann das Problem, dass dem Modell neue Daten nach dem letzten Trainingszeitpunkt unbekannt sind, nur sehr begrenzt lösen. 

Ein alternativer Ansatz, der diese Hürden umgehen kann, ist die "Retrieval Augmented Generation". Dabei werden Modell und ursprünglicher Prompt nicht angepasst, stattdessen wird die Eingabe in das Modell mit relevanten Daten angereichert. Dazu ist folgendes nötig:

  1. Die relevanten Daten (z.B. firmeninterne Dokumentationen) werden von verschiedenen Formaten, wie Word Dokumenten oder PDFs, zu Klartext konvertiert.
  2. Der Text wird dann in kleinere Stücke unterteilt. 
  3. Jedes dieser Stücke wird in eine Sequenz aus Zahlen umgeschrieben und in einer Datenbank abgelegt. Dies ist der zentrale Schritt, denn Texte mit ähnlichem Inhalt haben auch ähnliche Sequenzen aus Zahlen. Diese Ähnlichkeiten können jetzt viel einfacher mathematisch ausgedrückt werden. Dies wiederum hilft uns dabei, relevante Textstellen zu finden.  
  4. Bei jedem Prompt wird nun diese Datenbank an numerischen Sequenzen durchsucht. Hier werden dem Prompt relevante Textstellen als Kontext beigefügt. 
Bild 1: Darstellung von Retrieval Augmented Generation
Bild 1: Darstellung von Retrieval Augmented Generation (Abbildung von RDE und PRI)

Azure OpenAI mit Deinen eigenen Daten anreichern

Zum Glück lässt sich genau der oben beschriebene Ablauf mit dem neuen Azure OpenAI Studio unkompliziert testen. 

  1. Als Vorbereitung dazu erstellst Du auf dem Azure Portal einen neuen Storage Account [5], die Standardeinstellungen passen hier. Den Service brauchst Du später, um die Dateien, zu denen Du das Modell befragen willst, abzulegen.
  2. Nun brauchst Du noch einen Cognitive Search Service. Dieser wird dazu verwendet, alle für Deine Abfrage relevanten Textabschnitte zu finden. Diesen Service kannst Du mit den Basiseinstellungen erstellen [6]. 
  3. Im Azure OpenAI Studio [7] wählst Du nun "Bring your own data" [8], hier wählst Du die Option “Upload data” und suchst nach dem eben erstellten Storage Account. 
  4. Jetzt musst Du im nächsten Feld nur noch den erstellten Cognitive Search Service einsetzen, dann kannst Du bereits Deine Daten hochladen. 

Für meinen Test habe ich einige Seiten unseres ipt-Intranets als PDF-Dateien exportiert und hochgeladen. Jetzt sind wir schon bereit und können loschatten. 

Chatverlauf mit eingenen Daten in Azure OpenAI

Limitationen von Azure Open AI Studio

Obwohl "Bring your own data" überwiegend reibungslos funktioniert, sind mir dennoch vereinzelt kleinere Hürden aufgefallen. Manchmal kamen Antworten auf Englisch zurück, waren schlicht falsch und gelegentlich entschuldigte sich das System trotz einer korrekten Antwort, dass es die Antwort nicht finden konnte. Trotz dieser kleinen Schwächen bin ich von den Features, insbesondere der Nachvollziehbarkeit der Dokumentenquelle in den Antworten, beeindruckt. Das entsprechende Quelldokument wird dabei jeweils gleich in der Antwort verlinkt. Hinzu kommt, dass sich der Chat mit wenig Aufwand als App Service deployen lässt, sodass Du auch ausserhalb von Azure OpenAI Studio Zugriff auf das angepasste Modell hast.  

"Bring your own data" hat aber durchaus Limitationen. Zum jetzigen Zeitpunkt ist der Service ausschließlich mit OpenAI-Modellen auf Azure kompatibel. Zudem bleibt die Quelle der Daten auf Azure-Storage beschränkt und eine Integration anderer Datenquellen fehlt. Hier treten offene Bibliotheken wie LangChain in den Vordergrund.

Wie LangChain hilft

LangChain [9] präsentiert sich als vielseitiges Framework in der Welt der Sprachmodelle. Im Unterschied zu "Bring your own data" unterstützt LangChain eine Vielzahl von Modellen: von kommerziellen wie ChatGPT bis hin zu Open-Source-Lösungen. 
Dank einer mühelosen Verbindung mit diversen Speicherlösungen, sei es S3 oder GitHub, garantiert LangChain damit eine lückenlose Datenintegration. Zudem lassen sich mit LangChain auch komplexere LLM-basierte Systeme bauen, die über eine schlichte Chat-Interaktion hinausgehen. So können mit Hilfe von LangChain sogenannte Agenten entwickelt werden. Dies ermöglicht Dir, Applikationen zu entwickeln, die nicht nur auf einen Prompt antworten, sondern, basierend auf dem Ergebnis, weitere Schritte autonom vollziehen. Das LLM kann beispielsweise eine externe Programmierschnittstelle, kurz API, kontaktieren oder eine Abfrage an ein spezialisiertes LLM senden. 

Fazit

Alles in allem ist die Retrieval Augmented Generation ein erfolgversprechender Ansatz, der sich mit "Bring your own data" von Azure OpenAI besonders einfach und schnell implementieren lässt. Damit können innerhalb kurzer Zeit produktive Apps gebaut werden, die Fragen über Deine eigenen Daten beantworten können. Beispiele dafür sind Chat-Applikationen, die Deinem Support-Center helfen, blitzschnelle Antworten auf Kundenfragen aus riesigen Dokumentationsbergen zu generieren. Chatbots, mit denen der Kunde direkt interagieren kann und weitaus genauere und personalisierte Antworten liefern soll, sind mit dieser Lösung möglich. Diese Einfachheit bringt aber auch gewisse Limitationen mit sich, die mit Frameworks wie LangChain ausgelotet werden können. Philipp Rimle wird in seinem nächsten Blogpost mehr dazu abdecken, in dem er tiefer in die Materie eintaucht und erläutert, wie man mit LangChain effektive Systeme baut und wie ipt Dich hierbei unterstützen kann.

GianHiltbrunner_7577.jpg

Über mich

Ich interessiere mich für die neusten Technologien im Bereich AI, Data und Cloud. Besonders dafür, wie ich diese im Alltag effektiv einsetzen kann, um unsere Kunden für die Zukunft zu rüsten.