KI-Projekt: Testen und Verändern der LLM-Antworten

Im Rahmen des Deutschunterrichts erhielten wir die Aufgabe, mit Unterstützung von ChatGPT ein KI-Projekt durchzuführen. Ziel war es, die Qualität der von der KI generierten Inhalte zu analysieren, zu bewerten und zu verbessern. Unsere Gruppe war dabei speziell für das Testen des RAG-Modells und Auswerten der KI-generierten Inhalte sowie das Testen und Optimierern von Chunk-Sizes & Embeddings zuständig. 
 
Hierfür wurde eine virtuelle Maschine (VM) aufgesetzt, die Plattform Ollama eingerichtet und das LLM Mistral-Small verwendet. 

TEIL 1: Testen der Antworten der LLM

In der ersten Stunde der Gruppenarbeit haben wir mit ChatGPT ein paar Fragen ausgearbeitet, welche verschiedene Schwierigkeitsgrade haben. Es gibt einmal allgemeine Informationen und dann tiefergehende Informationen zu bestimmten Lehrkräften oder Fächern. Zu Anfang hat er auf Fragen wie „Welche detaillierten Informationen über die BBS Haarentor in Oldenburg hast du?“ mit sehr genauen Informationen wie Kontaktdaten, Schulzweigen und Ausbildungsberufen geantwortet. Er hatte anscheinend eine Anbindung an die Website der BBS Haarentor, hat aber trotzdem teilweise falsche Dinge behauptet, zum Beispiel, dass an der Schule Gärtner ausgebildet werden. Auf konkrete Fragen zu bestimmten Lehrern konnte er teilweise sehr spezifische Informationen aus den Dokumenten und der Website ableiten. In den Wochen danach hat er auf die gleiche Frage nur noch Dinge wie „Aus den zur Verfügung gestellten Dokumenten lässt sich Folgendes ableiten“ geantwortet, wobei die Informationen entweder falsch oder sehr allgemein gefasst waren. Die Antwort auf Fragen wie „Wo ist die BBS Haarentor?“ war plötzlich, dass wir die BBS am Museumsdorf in Cloppenburg sind.

Des Weiteren waren alle Antworten sehr lang, egal, ob ich nach einfachen Kontaktdaten oder anderen Dingen gefragt habe (siehe Teil 2: Einstellen der Chunk-Size). Somit hat er auch immer sehr viel mit allgemeinen Phrasen ausgeschmückt, obwohl der Kern etwas wie „Keine passenden Dokumente/Informationen gefunden“ war.

Außerdem hat er plötzlich alle Dokumente angezeigt, aus denen er diese Informationen zieht.

Auch die Zeit, die er für die Antwort braucht, hat zugenommen, sodass es teilweise mehrere Minuten gedauert hat. Wichtig wäre es, eher schülerspezifische sowie allgemeine Daten hochzuladen, um keine geheimen Informationen aus Lehrerprotokollen zu erhalten. 

Schlussendlich lässt sich sagen, dass er über die Zeit auf einmal ungenauer, selbst bei den einfachsten Fragen wie allgemeine Kontaktdaten, geworden ist und immer irgendetwas, schon in den Kontext passendes, dazu gesponnen hat. Daraus lässt sich auch ableiten, dass die Anbindung der Website nicht mehr funktionierte und auch die Anbindung der einzelnen Dokumente nicht richtig ist. Um eine vernünftige Antwort zu bekommen, sollte man daher sehr viele und vielseitige Dokumente in die Datenbank hochladen sowie Dokumente, welche für Schüler nicht geeignet sind, wegzulassen. 


TEIL 2: Einstellen der Chunk-Size

In der Dokumentation von Ollama fanden wir den Hinweis, dass sich über die sogenannte Chunk-Size die maximale Token-Anzahl festlegen lässt. Tokenisierung bedeutet, dass Informationen in kleine Einheiten („Tokens“) aufgeteilt werden. Je mehr verarbeitete Tokens, desto detaillierter sind die Antworten der KI, was zu qualitativ besseren Ausgaben führen kann, jedoch höhere Speicher- und Rechenleistung zur Folge hat.  

Um die Chunk-Size zu beeinflussen probierten wir, mithilfe von Chat-GPT eine Modelfile zu erstellen. Damit die Chunk-Size von 4096 auf 8192 erhöht werden kann, verwendeten wir den folgenden Befehl:

Im Pfad:
~/ollama_modesl/mistral_custom

Erstellen des Modelfiles:
nano Modelfile

Folgenden Inhalt eingeben:
FROM mistral
PARAMETER --num_ctx 8192 

Beim Auslesen des LLM-Prozesses stellten wir jedoch fest, dass weiterhin die Standard-Chunk-Size verwendet wurde. Das lag daran, dass das System vermutlich das Standard-Mistral-LLM ohne unsere Modelfile startete. 

Daher zogen wir in Erwägung, das Python-Skript zu ändern, welches für die Ausführung des LLM- und des RAG-Modells verantwortlich ist: 

/opt/rag_project/scripts/query.py

In diesem Skript ließ sich unter dem Parameter num_ctx ebenfalls die Chunk-Size anpassen: 

import ollama 
 
response = ollama.chat( 
    model="mistral:small", 
    messages={"role": "user", "content": "Erkläre Relativitätstheorie."}, 
    num_ctx=8192) 
 
print(response["message"]["content"]) 
 

Nach dem Ausprobieren verschiedener Startparameter und dem Überprüfen der KI-generierten Ausgaben konnten wir jedoch keine Veränderungen feststellen. 

Im Rahmen weiterer Recherchen stießen wir auf der Plattform Hacker News auf einen Kommentar, der von mehreren Nutzern als valide markiert worden war. Dieser enthielt unter anderem einen Hinweis, der auf unsere Problematik hindeutete: 

„Das ist eine gemeine Stolperfalle, die vielen Ollama-Nutzern Probleme bereitet. Der Standardwert von 2k Tokens ist extrem niedrig, und Ollama verwirft stillschweigend den vorderen Kontext. Die Nutzer merken also gar nicht, dass ein Großteil ihrer Eingabedaten vom Modell ignoriert wurde.“
User: anotherpaulg 

Eine fundierte Kenntnis in der Konfiguration von LLM-Modellen ist nötig, da die derzeit verfügbare Dokumentation nicht ausreicht. Die Hauptursache unseres Problems lag darin, dass die Änderung der Chunk-Size in Ollama deutlich komplexer ist, wie wir zunächst vermuteten. Wie ein Beitrag im Forum beschreibt, greifen die laut Dokumentation vorgesehenen Parameter zur Anpassung dieser Einstellung nicht.