arrow arrow--cut calendar callback check chevron chevron--large cross cross--large download filter kununu linkedin magnifier mail marker menu minus Flieger phone play plus quote share

CI Hackathon 2023: Projekt KI @ CI

Ein Erfahrungsbericht
Foto von Dimitri Krieger
Dimitri Krieger

Software Developer

Künstliche Intelligenz hat bei CI schon lange Bestand und ist in vielen Bereichen unseres täglichen Arbeitens verankert. Unsere KI-Expert*innen sind alle in unserem Data Science-Team beheimatet. Nichtsdestotrotz hat der CI Hackathon 2023 auch einer Gruppe von fachfremden Kolleg*innen die Möglichkeit gegeben das Thema experimentell zu erforschen. Das Schlagwort KI hat gleich acht Menschen angesprochen und zusammengebracht. Unsere Erkundung der KI-Welt begann mit einem einfachen und doch spannenden Ziel vor Augen: Wir wollten die KI nach bestimmten Regeln und Informationen fragen, die in Spielanleitungen zu Gesellschaftsspielen, wie Siedler von Catan oder Paleo verfügbar sind. Unser Anspruch war hoch – wir wollten, dass die KI nicht nur einfache Fragen beantworten kann, sondern auch knifflige und komplexe Anfragen versteht und adäquat reagiert. Durch den schnellen Fortschritt mit guten Ergebnissen in den ersten Stunden, entstanden in unserer Gruppe neue Ideen, die wir nach einer gemeinsam erarbeiteten Basis in kleineren Gruppen parallel erforschen wollten. Zum einen wollten wir herausfinden, wie gut sich die KI für Anfragen zu Confluence-Inhalten nutzen lässt und zum anderen ob sie sich auch für SQL-Datenbank Anfragen eignet. 

Die Exkurse können von den Leser*innen übersprungen werden, sie enthalten mehr Informationen für das technische Verständnis. 

Aller Anfang ist schwer – Doch nicht mit dem privatGPT Projekt

In der Welt der Technologie und künstlichen Intelligenz kann der Anfang oft eine Herausforderung sein. Doch bei dem privatGPT Projekt war dies nicht der Fall. Wir konnten nämlich ein vorhandenes Projekt klonen, das uns eine solide Grundlage für den Start unserer Erkundungen bot. Unser Unterfangen begann mit der Erkenntnis, dass der Schlüssel zum Erfolg in einer unschätzbar wertvollen Ressource lag – der Readme-Datei des Projekts. Die klare und verständliche Anleitung machte den Prozess unkompliziert und problemlos. Diese Datei führte uns mühelos durch den Einrichtungsprozess und ebnete den Weg für unsere Erkundungen. 

https://github.com/imartinez/privateGPT/ 

Die Ironie der Herausforderungen – Eine größere LLM herunterladen

Ironischerweise stellte sich eine der schwersten Herausforderungen des Tages als das Herunterladen eines größeren LLMs (Large Language Model) heraus, in diesem Fall die wizardlm-13b-v1.1-superhot-8k.ggmlv3.q4_0 mit stattlichen 7,3 Gigabyte. Dieses Unterfangen wurde möglicherweise durch die zahlreichen aktiven Hackathon-Teilnehmer*innen im gesamten Gebäude und die damit verbundene Netzwerkbelastung erschwert. 

Die erste geladene Datei wollten wir zunächst untereinander teilen, doch das war schwieriger als gedacht. Zunächst hatten wir unterschiedliche Betriebssysteme im Einsatz – Windows, Linux und Mac OS. Dann gab es das Problem, keinen USB-Stick zu finden, der groß genug war. Als wir schließlich einen USB-Stick hatten, war dieser bei der Übertragung so langsam, dass wir nach 10 Minuten den Vorgang abbrachen. 

Doch dann kam die Lösung in Form einer portablen SSD-Platte – schnell und leistungsfähig. Es gab jedoch einen kleinen Haken: Die SSD-Platte war verschlüsselt, und wir mussten zunächst das Passwort in 1Password suchen. 

Das nächste Problem war, wie man das Passwort auf einem fremden Notebook verwenden konnte, ohne es zu teilen. Dieses Rätsel bleibt unser kleines Betriebsgeheimnis und war eine der vielen unerwarteten Kniffe auf unserer KI-Expedition. Während der Einrichtung haben wir uns zu dem Aufbau einer KI im Internet erkundigt und dabei viele wertvolle Informationen gesammelt, die im nachfolgenden in Exkursen zusammengefasst sind. 

Exkurs: LLM

Large Language Models (LLMs) zeichnen sich durch mehrere Unterschiede aus, die ihre Leistung und Anwendungsfähigkeit beeinflussen. Hier sind einige wichtige Aspekte, die verschiedene LLMs voneinander unterscheiden:

Größe des Modells: Die Größe eines LLMs bezieht sich auf die Anzahl der trainierbaren Parameter im Modell. Größere Modelle haben in der Regel mehr Parameter und können daher komplexere und umfangreichere Aufgaben bewältigen. Allerdings erfordern sie auch mehr Rechenleistung und Speicherplatz.

Trainingsdaten: Die Qualität und Menge der Trainingsdaten sind entscheidend für die Leistung eines LLMs. Modelle, die auf umfangreichen und vielfältigen Daten trainiert sind, neigen dazu, besser in der Lage zu sein, breite Themenbereiche abzudecken und nuancierte Antworten zu liefern.

Architektur: Die Architektur eines LLMs, einschließlich der Anordnung von Neuronen und Schichten, kann sich auf seine Fähigkeit auswirken, spezifische Aufgaben zu erfüllen. Einige Modelle sind auf Textverarbeitung spezialisiert, während andere auch multimodale Daten (Bilder, Text, Audio) verarbeiten können. Weitere Punkte sind Trainingstechniken, Fine-Tuning, Verfügbarkeit, Rechenleistung und Infrastruktur.

Die Wahl eines LLMs hängt von den spezifischen Anforderungen und Zielen einer Aufgabe ab. Es ist wichtig, das am besten geeignete Modell basierend auf der Aufgabenstellung, den verfügbaren Daten und den zur Verfügung stehenden Ressourcen auszuwählen. Verschiedene LLM können unter folgendem Link gefunden werden: https://huggingface.co/models.

 

Müll rein, Müll raus

Unser Experiment sollte lokal auf unseren Rechnern laufen und die benötigten Daten möglichst überschaubar bleiben. Die Daten, die wir der LLM zur Verfügung stellen, sind entscheidend dafür, welche Qualität an Antworten wir erhalten. Unsere erste Aufgabe bestand darin, relevante Datensätze für unser Projekt zu sammeln. Wir entschieden uns für einige Gesellschaftsspiele, die als Grundlage für das Wissen unserer KI dienen sollten. Ein paar Beispiele sind das Poker Spiel Texas Holdem, die Siedler von Catan und Schach. 

Spielanleitungen im PDF-Format

Die Spielanleitungen im PDF-Format wurden verarbeitet, um uns als Daten in einer sogenannten Vektordatenbank zu dienen. Die Daten bilden die Grundlage für die Antworten der KI, dementsprechend kann eine Antwort richtig, falsch oder eben nur zum Teil beantwortet sein.

Exkurs: Vektordatenbank

Das Erstellen einer Vektordatenbank für ein Large Language Model (LLM) aus einer PDF-Datei ist ein mehrstufiger Prozess. Hier ist eine vereinfachte Darstellung des Vorgangs:

Textextraktion aus der PDF: Die erste Aufgabe besteht darin, den Text aus der PDF-Datei zu extrahieren. Der extrahierte Text aus der PDF-Datei wird normalerweise in Rohform vorliegen und kann unerwünschte Zeichen, Formatierungen und andere Störungen, wie Sonderzeichen oder Zeilenumbrüche enthalten. Daher wird der Text im zweiten Schritt vorverarbeitet, indem Zeichen entfernt oder Absätze zusammengeführt werden.

Tokenisierung: Der bereinigte Text wird dann in einzelne Tokens oder Wörter aufgeteilt. Dies ist wichtig, um die einzelnen Elemente im Text zu identifizieren und sie in der Vektordatenbank repräsentieren zu können.

Word Embeddings erstellen: In dieser Phase werden die Word Embeddings für jedes Token in der Textdatei erstellt. Diese Modelle ordnen jedem Token einen Vektor im mehrdimensionalen Raum zu, der seine semantische Bedeutung repräsentiert. Diese Vektoren werden dann für jedes Token im PDF-Text erstellt und gespeichert.

Vektordatenbank erstellen: Die erstellten Word Embeddings werden in einer Datenbank gespeichert. Diese Datenbank kann eine spezielle Datenbank für Vektoren sein, wie z.B. eine NoSQL-Datenbank (z.B. MongoDB) oder eine spezielle Speicherstruktur, wie Faiss. Die Vektordatenbank ermöglicht es, die Word Embeddings effizient abzurufen und semantische Ähnlichkeiten zwischen Tokens zu berechnen.

Indexierung und Abfrage: Die Vektordatenbank wird indexiert, um den Zugriff auf die Word Embeddings zu beschleunigen. Dies ermöglicht es dem LLM, effizient nach semantisch ähnlichen Wörtern oder Tokens in der Datenbank zu suchen.

Mit dieser erstellten Vektordatenbank kann das LLM dann Texte analysieren, semantische Ähnlichkeiten erkennen und auf Anfragen reagieren, die auf den in der Datenbank gespeicherten Word Embeddings basieren.

Es ist wichtig zu beachten, dass die Qualität der Vektordatenbank stark von der Qualität und Vielfalt der Trainingsdaten abhängt, die zur Erstellung der Word Embeddings verwendet wurden. Je besser die Trainingsdaten, desto genauer werden die semantischen Beziehungen in der Vektordatenbank sein.

Open AI Dalle „exhausted shepard“
Open AI Dalle "exhausted shepard"

Erste Experimente

Wir starteten unsere Erkundung mit einer Reihe von Fragen zu Brettspielen. Zum Beispiel fragten wir: „Wie sammle ich Punkte in Catan?“ Während wir korrekte Antworten erhielten, betrug die Antwortzeit etwa 120 Sekunden auf einem MacBook Pro mit einem M1-Chip.

Eine andere Frage, "Wie gewinne ich bei Catan?", führte zu Antworten, die zwar korrekt waren, aber etwas ausführlicher und ineffizient. Diesmal betrug die Antwortzeit rund 280 Sekunden auf einem MacBook Pro mit einem Intel-Chip (2019).

Wir wagten uns auch in die Welt des Schachs und fragten nach „Was ist Schäfermatt?“. Leider waren die Antworten etwas verwirrend und hatten nichts mit Schach zu tun, sondern schienen sich eher auf einen erschöpften Schäferhund zu beziehen. Die Datenbasis gab die Informationen nicht Preis und so entschied sich das LLM erfinderisch zu werden und uns etwas von erschöpften Schäfern zu erzählen die sich nach getaner Arbeit erstmal Matt legen.

Die Antwort, die sich schnell mit Google findet, lautet: „Das Matt in 4 Zügen (auch als Schäfermatt bekannt) ist der mit Abstand häufigste Verlauf aller weltweit gespielten Schachpartien.“

Andere Anfragen wurden wiederum richtig beantwortet, wenn die relevanten Informationen auch in den Trainingsdaten enthalten waren. Unsere Schachanleitung hatte lediglich die Grundregeln erklärt.

Gespräche während der Mittagspause

Während unserer Mittagspause führten wir Gespräche über mögliche Anwendungsfälle für unsere KI. Einige interessante Ideen umfassten die Anwendung von KI in komplexen Spielen wie Paleo, bei denen Spieler*innen oft nicht wissen, wie sie im Spiel weiterkommen. Eine weitere Idee drehte sich um das Kartenspiel "Doppelkopf", obwohl Meinungen über den Nutzen auseinandergingen. Einige "Doppelkopf"-Expert*innen waren der Ansicht, dass es zum Spiel gehörte, eine gute Diskussion mit den Mitspieler*innen zu führen und sich gegenseitig zu verwirren, anstelle einer richtigen Antwort aus der KI zu beziehen. Wir sind unserem Ziel mit den Fragen zu den Spielanleitungen recht schnell nah gekommen und haben daraufhin überlegt, ob wir unsere Experimente erweitern wollen und uns in kleinere Teams aufteilen.

Während dieser Diskussionen entstand ein spannendes Konzept: Die KI mit Informationen aus unserem CI-Wiki zu trainieren, um Fragen wie "Wie viel Urlaub darf ich als Mitarbeiter*in von CI haben?" zu beantworten. Diese Idee gab unserer Vision für die CI-Wiki-Seite Gestalt. Eine andere Idee war es, die KI zu Informationen aus einer SQL-Datenbank zu befragen, um beispielsweise auch einer nicht IT-Person die Möglichkeit zu bieten eine Datenbank mit Fragen zu durchsuchen. Zusätzlich wollten wir die Anfragen effizienter gestalten, und zwar so wie wir es von ChatGPT kennen, sodass die Antworten recht schnell und qualitativ kommen.

Verbindung zu OpenAI

Wir erkundeten die Möglichkeiten von OpenAI und LangChain, um unsere KI-Modelle zu stärken. Die Einrichtung von API-Aufrufen erforderte Abrechnungsinformationen und die Generierung von API-Schlüsseln. Wir waren beeindruckt von der Einfachheit der Schlüsselerzeugung, und die kostengünstigen drei Requests für ca. 0,05€ machten sie für unser Projekt zugänglich. Wir nutzten OpenAIs Large Language Model (LLM), um Fragen zu beantworten. Als wir mit ChatGPT3.5 fragten, "Was ist Schäfermatt?", enthielt die Antwort einige aus dem Web stammende Informationen, jedoch fehlten wichtige Details. Dies ließ uns erkennen, wie wichtig es ist, Kerninformationen in den Antworten zu berücksichtigen. ChatGPT3.5 versuchte gelegentlich, erfundene Antworten zu generieren, wenn ihm Wissen fehlte. Wir experimentierten auch mit ChatGPT4.0, das ehrlichere Antworten lieferte, wenn es auf Wissenslücken stieß und auch gerne mal zugab, wenn es aufgrund der vorliegenden Daten keine Antwort kannte.

Exkurs: Der Weg bis zur Antwort

Ein Large Language Model (LLM) ist ein neuronales Netzwerk, das darauf trainiert wurde, natürliche Sprache zu verstehen und zu generieren. Diese Modelle sind in der Lage, Textdaten in Form von Sätzen, Absätzen oder ganzen Dokumenten zu analysieren, zu verstehen und darauf basierend menschenähnliche Texte zu generieren. Sie sind imstande, Texte in verschiedenen Sprachen zu verarbeiten und können in vielfältigen Anwendungen eingesetzt werden: Von Textgenerierung über Übersetzungen bis hin zur Beantwortung von Fragen.

 

Infografik Large Language Model

Eine wichtige Komponente in vielen LLMs ist eine sogenannte "Vektordatenbank“ oder auch „Embedding-Datenbank“. Wie eine Vektordatenbank funktioniert:

Word Embeddings: Die Grundlage einer Vektordatenbank sind sogenannte „Word Embeddings“. Dies sind vektorisierte Darstellungen von Wörtern in einem mehrdimensionalen Raum. Jedes Wort wird durch einen Vektor repräsentiert, der seine semantische Bedeutung und Beziehungen zu anderen Wörtern codiert. Diese Embeddings werden durch maschinelles Lernen aus großen Sammlungen von schriftlichen Texten gelernt.

Textverarbeitung: Wenn eine Anfrage oder eine Texteingabe an das LLM erfolgt, wird der Text in seine einzelnen Wörter oder Tokens aufgeteilt. Jedes Token wird dann in seinen entsprechenden Vektor aus der Vektordatenbank umgewandelt.

Semantische Verarbeitung: Die Vektoren der einzelnen Tokens werden dann in einem neuronalen Netzwerk verarbeitet. Dieses Netzwerk kann komplexe semantische Beziehungen zwischen den Wörtern erkennen und verstehen.

Textgenerierung: Basierend auf der semantischen Verarbeitung und den gelernten Beziehungen zwischen den Wörtern generiert das LLM eine Antwort oder Ausgabe. Diese Antwort kann menschenähnlichen Text enthalten und auf die Anfragen der Nutzer*innen eingehen.

Die Vektordatenbank ist entscheidend für die Fähigkeit des LLMs, semantische Zusammenhänge zu verstehen und sinnvolle Antworten zu generieren. Sie ermöglicht es dem LLM, Wörter nicht nur aufgrund ihrer Ähnlichkeit zu verknüpfen, sondern auch semantische Bedeutungen zu erfassen und in die Verarbeitung einzubeziehen.

Insgesamt ermöglicht die Kombination von Word Embeddings und neuronalen Netzwerken den LLMs, Texte auf einer tieferen semantischen Ebene zu verstehen und auf komplexe Anfragen zu reagieren. Dies macht sie zu leistungsstarken Werkzeugen für eine Vielzahl von Anwendungen im Bereich der natürlichen Sprachverarbeitung.

Erkundung von SQL-Datenbanken

Um unser Projekt weiter zu verbessern, testeten wir unsere KI mit einer SQL-Datenbank. Wir vereinfachten das Experiment, indem wir eine Mitarbeiter*innen-Tabelle verwendeten, um grundlegende Fragen zu beantworten. Wir dokumentierten die Historie von Fragen und Ergebnissen in einer sqlGPT.html-Datei.

Unsere Experimente lieferten interessante Ergebnisse. Wenn wir zum Beispiel fragten, "Wie viele Mitarbeiter*innen gibt es?", war die SQL-Abfrage, die dabei generiert wurde, korrekt, aber die KI antwortete nach 707 Sekunden fälschlicherweise mit nur einem/r Mitarbeiter*in, was in unserem Beispiel falsch war. Eine andere Frage, "Wie lautet der Name des jüngsten Mitarbeitenden?", lieferte uns die richtige Mitarbeiterin und somit die richtige Antwort, jedoch ohne eine Angabe der Antwortzeit und mit einer nicht korrekten SQL-Abfrage. Aus diesem Grund konnten wir hier den Erfolg bei der zweiten Anfrage eher dem Zufall zuordnen.

Confluence als Informationsquelle

Das Confluence Experiment. Eine weitere Idee, die uns bei den ganzen Themen kam, war die Entwicklung einer Confluence-Seite über und für die CI. Bestimmte wichtige Infos, wie zum Beispiel „Wie viele Urlaubstage stehen mir als Mitarbeiter*in zu?“ sind oft nicht so leicht zu finden. Unsere Idee war es, Confluence nicht mehr selbst nach diesen Infos durchsuchen zu müssen, sondern einfach eine KI nach den richtigen Antworten zu befragen. Für diesen Zweck haben wir eine Confluence-Seite mit ein paar Informationen erstellt, mit deren Hilfe wir einige Experimente durchführen konnten. In unserem Experiment konnten wir keine guten Antworten aus Confluence beziehen. Um allerdings zufriedenstellende Antworten aus der Confluence-Seite zu erhalten, hätten wir mehr Arbeit und Zeit investieren müssen. Die Idee hat uns dennoch überzeugt, weil sie einige Probleme lösen würde, auf die viele Mitarbeitende in den verschiedensten Unternehmen stoßen, nämlich die aktuell gültigen Prozesse und Regelungen schnell und einfach zu finden. Sowohl Regelungen als auch die Strukturen in Confluence ändern sich mit der Zeit und somit wächst eine Informationsquelle oft historisch bedingt.

CI GPT mit LangChain

Feintuning

Die Kerngruppe entwickelte parallel zu den anderen Teilprojekten eine Benutzeroberfläche, um Fragen und Antworten angelehnt an die Funktionalität von ChatGPT zu visualisieren. Diese UI ermöglichte es uns, die Leistung verschiedener LLM-Modelle zu vergleichen. Die Oberfläche bot auch die Möglichkeit die KI in verschiedenen Charakteren antworten zu lassen. Ein Charakter „Pirat“ verwendete dann entsprechend den Seemanns Sprachgebrauch mit jeder Menge “Arrr”. Hierbei kann die Kreativität voll entfaltet werden. Darüber hinaus konnte noch die Sprache ausgewählt werden, in der die Antwort erfolgen soll. Zusätzlich wurde die Möglichkeit geboten, Regeln zu hinterlegen. Mit den Regeln lässt sich das Erfindenden von Antworten unterbinden und somit die Qualität der Antworten steigern. Über das Hochladen von Dateien konnte zusätzlich noch die Datenquelle ergänzt werden, falls eine Datei durchsucht werden sollte. Die Antworten mit Antwortzeiten wurden uns dabei im Chat Format ausgegeben.

Das Feintuning bezeichnet das Maßschneidern einer KI. Damit die KI bessere Ergebnisse erzielt, kann sie zu einem bestimmten Zweck angepasst werden. Wenn die KI für den Zweck von Quellcode-Optimierung eingesetzt werden soll, kann sie entsprechend konfiguriert werden, um präzisere und relevantere Informationen zu liefern. Zum Abschluss des CI-Hackathon 2023 haben wir unsere Ergebnisse mit allen Interessierten in Form einer Präsentation geteilt.

Fazit

Der CI Hackathon 2023 war eine aufregende und aufschlussreiche Erfahrung. Wir tauchten in die Welt der KI, der Datenquellen und der Integrationsmöglichkeiten ein und entdeckten wertvolle Erkenntnisse auf dem Weg. Wir konnten sehr viel Wissen zu dem Aufbau und der Arbeitsweise von LLMs sammeln. Eine unserer Kernerkenntnisse ist, dass der Kontext und die Datenbasis die wichtigsten Elemente für gute Ergebnisse darstellen. Wir hatten sehr viel Spaß bei unseren Experimenten. Durch die falschen Antworten und Fehler konnten wir uns an die Grenzen der LLM herantasten und dadurch viel lernen. Die Einsatzgebiete von KI sind sehr vielfältig. Damit der Fokus bei den vielen Möglichkeiten nicht verloren geht, ist eine Herangehensweise mit kleinen Etappen und Zielen sehr praktisch. Das Thema KI wird uns in den kommenden Jahren weiterhin begleiten und kann uns als ein hilfreiches Tool dienen. Aus diesem Grund macht es durchaus Sinn sich intensiver mit dem Thema auseinander zu setzen. Der Fortschritt unseres Projekts kann auf CI-GitLab verfolgt werden, und wir freuen uns auf zukünftige Entwicklungen und Innovationen im Bereich KI und Wissensintegration.

Unser Data Science Portfolio

KI steckt in vielen Bereichen unseres täglichen Arbeitens. Als Fachdisziplin ist es bei unserem Data Science-Team in besten Händen. Hier geht es zum Porfolio: