Von Dr. Karl Häfner und Max Kühn
„Wie muss ich ein Bauteil in meiner Maschine einer bestimmten Baureihe einstellen, um Vibrationen zu verringern?“
„Wie repariere ich es am besten, wenn ein Fehler auftritt?“
„Wo kann ich weitere Informationen zur nachhaltigen Behebung eines Problems finden?“
Um Antworten auf solche Fragen zu finden, musste einer unserer Kunden in der Vergangenheit Berge von Dokumenten durchwälzen und dadurch viel Zeit und Nerven investieren. Heute stellt er diese Fragen an einen interaktiven Chatbot, bekommt schnell die passende Antwort und kann sich ebenso schnell der eigentlichen Lösung des Problems widmen.
Wie Künstliche Intelligenz Unternehmen dabei unterstützt, ihr firmeninternes Know-how optimal zu nutzen und welche Technologien und Schritte dazu notwendig sind, darum geht es im zweiten Beitrag unserer AI Deep Dive-Reihe.
Innovatives Wissensmanagement dank Generativer KI und RAG
Ermöglicht wird solch ein Chatbot, wie wir ihn in der Einleitung beschrieben haben, durch eine Technologie, die aktuell großes mediales Interesse auf sich zieht: Generative Künstliche Intelligenz (GenAI) beziehungsweise Large Language Models (LLM). Bekannt geworden durch Anwendungen wie ChatGPT und Microsoft Copilot, können diese sehr redegewandt Antworten geben, die auf öffentlich zugänglichen Informationen basieren und in das Training der dahinterstehenden Modelle eingeflossen sind.
Der beschriebene Anwendungsfall jedoch zielt auf unternehmensinternes Wissen ab, das den Modellen nicht antrainiert wurde. In solchen Fällen schafft Retrieval Augmented Generation (RAG) Abhilfe. RAG erweitert die Fähigkeiten von LLMs, indem zur Beantwortung der Nutzerfragen neben dem angelernten „Wissen“ auch ad hoc externe Daten herangezogen werden.
In dem erläuterten Szenario zieht der Chatbot als externe Daten Maschinendokumentationen, Wartungsberichte, Fehlerlisten etc. heran, verarbeitet diese und baut die enthaltenen Informationen in seine Antwort ein. So können vergleichsweise einfach und schnell sprachliche Schnittstellen zu unternehmensinternen Daten geschaffen werden. Das Nachtrainieren (fine-tuning) der LLMs, das extrem ressourcenintensiv ist und riesige Datenmengen erfordert, ist damit unnötig.
Datenaufbereitung: Der Schlüssel zur erfolgreichen KI-Anwendung
Für eine funktionierende RAG-Anwendung ist die Aufbereitung der Daten unerlässlich. Damit ein LLM die Texte gut verarbeiten kann, müssen sie in passend große Abschnitte geschnitten, mit Metadaten angereichert und durch LLMs embedded werden (Embedding: Eine numerische Repräsentation der semantischen Bedeutung eines Textes).
Die Anforderungen an die Datenvorverarbeitung sind je nach Kundensituation sehr individuell, da diese von vielen Faktoren wie den Ausgangsformaten, der Menge oder Konsistenz der Daten abhängen. Durch erfolgreiche Implementierungen und dadurch steigende Erwartungen an RAG-Applikationen erleben wir auch innerhalb einzelner Kundenprojekte eine immer größere Bandbreite der zu integrierenden Daten.
Eine weitere Herausforderung bei der Integration von eigenen Daten in RAG-Anwendungen liegt in der inneren Struktur der Dokumente. Typische Dokumentationstexte enthalten nicht nur reinen Fließtext, sondern auch viele Abbildungen, wie Diagramme, Zeichnungen oder Fotos, Tabellen, Querverweise, Warnhinweise und ähnliches. Zudem sind viele Dokumente voller Abkürzungen und kryptischer Bezeichnungen, die für Außenstehende (und damit auch für LLMs) zunächst unverständlich sind.
Alles enthält wichtige Informationen, und oft erschließt sich der Sinn erst in der Gesamtbetrachtung aller Elemente eines Dokuments, was eine Aufbereitung unerlässlich macht. Abbildungen können z. B. verbalisiert, Abkürzungen ausgeschrieben, kryptische Bezeichnungen durch kurze Texte erklärt und wichtige Metadaten wie Warnhinweise gespeichert werden. Und das alles muss letztlich automatisiert und performant durchgeführt werden.
In vier Schritten zur optimalen Datenverarbeitung
Um diese Herausforderung strukturiert anzugehen und schnell effiziente Verarbeitungsstrecken implementieren zu können, teilen wir den Datenverarbeitungsprozess für RAG-Anwendungen grob in vier Schritte ein: Import, Cracking, Enrichment und Provisioning. Nachfolgend wollen wir einen kurzen Überblick darüber geben.
- Import: Bereitstellung der Ausgangsdaten an zugänglichem Ort
In diesem Schritt müssen die zu verarbeitenden Ausgangsdaten an einem bekannten und zugänglichen Ort bereitgestellt werden. Je nach Ausgangsformat kann das zum Beispiel in einem Objektspeicher oder einer Datenbank erfolgen.
- Cracking: Strukturierung und Extraktion von Texten, Tabellen und Abbildungen
Im Cracking-Abschnitt werden die Quelldaten aufgebrochen und grundlegend strukturiert, um sie für die Weiterverarbeitung vorzubereiten. Im Wesentlichen geht es dabei darum, Texte, Tabellen und Abbildungen aller Art als solche zu erkennen, um sie in weiteren Schritten getrennt voneinander behandeln zu können.
Der Aufwand kann hier stark variieren. Strukturierte oder semistrukturierte Formate erfordern oft nur einfache Parsing-Skripte, um die Daten zu verarbeiten. Bei stark unstrukturierten Formaten wie PDF-Dateien gestaltet sich der Prozess komplexer. Hier kann es notwendig sein, die Inhalte mithilfe aufwändiger Machine Learning-basierter Verfahren zu extrahieren. Beispiele dafür sind Optical Character Recognition (OCR) oder auf Computer Vision basierende Layout-Analyse.
Wichtig ist dabei nicht nur die Extraktion der Inhalte wie Bilder, Tabellen und Text, sondern auch die Mitführung von Kontextinformationen. Dies können beispielsweise Bildunterschriften oder die Position eines Elements in der Dokumentenhierarchie sein ((Unter-)Überschriften).
- Enrichment: Anreicherung der Daten für die Nutzung durch RAG-Anwendungen
Im Enrichment-Schritt werden die Daten angereichert und so geformt, dass sie später sinnvoll von RAG-Anwendungen genutzt werden können. Dieser Schritt hängt von der Art der Daten ab und kann beliebig komplex gestaltet werden.
- Text: Im Wesentlichen sollten Texte in inhaltlich zusammenhängende Abschnitte unterteilt werden (Segmentierung), die anschließend mit Metadaten angereichert werden können. Es kann z. B. sinnvoll sein, den Inhalt eines Abschnitts zu klassifizieren oder konkrete Textgegenstände (Entities) zu identifizieren, um später auf bestimmte Themen filtern oder Warnhinweise programmatisch ausspielen zu können.
- Tabellen: Für Tabellen gilt im Grunde dasselbe, nur dass diese vorab in eine für ein LLM verarbeitbare Form gebracht werden müssen. Das kann zum Beispiel eine textuelle Beschreibung oder ein Format wie Markdown sein.
- Bilder: Um Bilder für RAG-Anwendungen zugänglich zu machen gibt es zwei Möglichkeiten. Man kann sie zum einen als solche embedden und sie somit, wie die Texte auch, in einen Vektorraum überführen, der ihre Bedeutung repräsentiert. Zum anderen kann man sie durch Multi-Modale LLMs wie GPT4-Vision verbalisieren. Die so gewonnene Beschreibung wird dann im weiteren Verlauf wie normaler Text behandelt.
Das Ergebnis des Enrichment-Schritts sind inhaltlich gekapselte und in sich kohärente Segmente, die mit möglichst sinnvollen Metadaten angereichert sind.
- Provisioning: Aufbereitung und Bereitstellung der angereicherten Segmente
Schließlich werden die angereicherten Segmente für die Nutzung eines spezifischen LLMs aufbereitet und bereitgestellt. Der erste Schritt dabei ist das sogenannte Chunking. Hier geht es darum, die Segmente in eine Größe zu schneiden, die für die jeweilige RAG-Anwendung passend ist, was in erster Linie vom Tokenlimit des dort verwendeten LLMs abhängig ist. Die Segmente werden dementsprechend weiter unterteilt oder auch zusammengefasst.
Die einzelnen Chunks werden daraufhin embedded und in einer Vektordatenbank zur Verfügung gestellt, auf welche die RAG-Anwendung Zugriff hat. Sinnvoll ist das Nachhalten von Referenzen auf die Quelldaten, sodass die RAG-Anwendung bei der Antwortgenerierung später auf diese verweisen kann. Neben der Vektordatenbank gibt es weitere Möglichkeiten, die Daten bereitzustellen, z. B. über Graphen, Datenbanktabellen oder ähnliches.
Wenn große Datenmengen zu verarbeiten sind und diese im Laufe der Zeit anwachsen, kann es aus Effizienzgründen sinnvoll sein, den geschilderten Prozess inkrementell zu gestalten, um eine redundante Verarbeitung zu vermeiden.
Implementierung von Datenpipelines: Herausforderungen und Lösungen
Ob inkrementell oder nicht, die Implementierung von Datenpipelines, die alle Schritte abdecken, kann je nach Ausgangssituation ein recht komplexes Unterfangen sein. Passende Werkzeuge können hier Abhilfe schaffen. Bei der Auswahl ist zu beachten, dass es nicht die eine Lösung gibt, die alles kann und immer passt. Eine sorgfältige Analyse der vorliegenden Ausgangssituation ist daher unerlässlich.
Dank unseres breiten Portfolios können wir flexibel die für unsere Kunden am besten geeigneten Technologien und Werkzeuge auswählen und einsetzen. Für den zu Beginn des Artikels erwähnten Kunden haben wir beispielsweise inkrementelle Pipelines auf der Microsoft Azure Plattform mit Services wie Azure AI Search, Azure OpenAI und Azure Databricks implementiert, die sich gut in die bestehende Systemlandschaft des Kunden einfügen.
Wenn auch Sie die Möglichkeiten LLM-basierter RAG-Anwendungen für Ihren Anwendungsfall erproben möchten oder bereits davon überzeugt und auf der Suche nach einem Umsetzungspartner sind, freuen wir uns über Ihre Anfrage.
Über die Autoren:
Dr. Karl Häfner hat Wirtschaftsgeographie studiert und arbeitet seit 2019 als Data Scientist im Bereich Natural Language Processing und AI. Bereits seit 2021 unterstützt er Unternehmen dabei generative KI und Large Language Models in ihre Geschäftsprozesse zu integrieren. Bei der Dataciders-Tochter ixto GmbH leitet er das Team AI-Solutions.
Max Kühn beschäftigt sich seit seinem Studium der Wirtschaftsinformatik mit Data Science & BI und fokussiert sich in seiner Tätigkeit als Berater auf den Themenbereich Data Engineering. Damit unterstützt er Unternehmen dabei, die Grundlagen für datengetriebene Entscheidungen zu schaffen.