TH Chat - Der Studienberater der TH Wildau
Im Rahmen der Wildauer Softwarefabrik haben wir ein Chatbot-System entwickelt, das Studierenden, Mitarbeitenden und Interessierten rund um die Uhr verlässliche Antworten auf ihre Fragen zur Hochschule liefern kann. Unser Chatbot basiert auf dem Prinzip der Retrieval Augmented Generation (RAG) und kombiniert die Stärken eines Large Language Models (LLM) mit gezielten Datenabrufen aus relevanten Quellen, wie offiziellen Webseiten und Hochschuldokumenten. Das Ergebnis unseres Projekts ist ein Proof of Concept, das inhaltlich fundierte Auskünfte zu jeglichen Fragen rund um das Studium geben kann, und so in Zukunft zu einem Assistenten ausgebaut werden kann, der Stundenplanausgaben, das Anzeigen von Bürostandorten auf einer Karte und ähnliche spezielle Anfragen bearbeiten kann.
Projektkontext
Das Projekt entstand aus dem Wunsch heraus, die Informationssuche an der TH Wildau zu vereinfachen. Häufig verlieren sich Studierende in der oftmals unübersichtlichen Webseitestruktur, um Informationen zu Lehrveranstaltungen, Bewerbungsfristen, Prüfungsordnungen und ähnlichen Themen zu finden. Dadurch werden Hochschulmitarbeiter mit E-Mails überflutet und die allgemeine Unzufriedenheit steigt. Unser Chatbot soll schnelle und passende Antworten auf Basis der zugrundeliegenden Inhalte liefern und somit das momentane System rund um den Studienservice entlasten.
Herausforderungen für das Projekt
Zu Projektbeginn verfügte das Team nur über begrenzte Kenntnisse in der Entwicklung KI-gestützter Assistenzsysteme. Gerade der Umgang mit lokal laufenden Sprachmodellen, die Nutzung von Vektordatenbanken zur Speicherung von Informationen und der Kombination beider Komponenten war für viele von uns eine neue Erfahrung. Hinzu kamen typische Schwierigkeiten der Teamkoordination: In unserer Scrum-basierten Arbeitsweise führte die enge Beziehung einzelner Aufgabenbereiche untereinander mitunter zu Wartezeiten, bspw. wenn ein Frontend-Feature erst nach Fertigstellung der zugehörigen Backend-Funktion umgesetzt werden konnte. Dadurch kam es vor allem am Anfang des Projekts zu Zeitdruck gegen Ende eines Sprints. Besonders in den ersten beiden Sprints war es zudem schwer abzuschätzen, wie viel Arbeit innerhalb eines zweiwöchigen Entwicklungszyklus tatsächlich realisierbar ist, da wir zuvor noch nicht in einem so großen Team zusammengearbeitet hatten. So entstanden in den Sprint Refinements oftmals Meinungsverschiedenheiten bezüglich der Aufteilung der Aufgaben.
Herangehensweise
Die Wahl des Themas war für uns unkompliziert. Wir diskutierten zwar zunächst mehrere Ideen, konnten uns jedoch gemeinsam mit dem Dozententeam schnell auf das Projekt des Chatbots einigen. Wir nutzten die verbliebene Zeit vor dem Beginn der Entwicklungsphase, uns mit den Konzepten und Methodiken bei der Entwicklung von Chatbots auf Basis eines Sprachmodells vertraut zu machen, um mit dem gleichen Wissensstand in das Projekt zu starten. Dementsprechend lag unser Fokus im ersten Sprint darauf, das grundlegende System auf den Geräten aller Teammitglieder erfolgreich zum Laufen zu bringen, um technische Probleme im weiteren Projektverlauf möglichst frühzeitig zu erkennen und effizient beheben zu können. Außerdem teilten wir unser Projektteam frühzeitig in drei funktionale Bereiche auf: Frontend, Backend und DevOps. Die Aufgaben innerhalb jedes Bereichs wurden thematisch gegliedert, etwa in Schwerpunkte wie Vektordatenbank, UI-Design, Testing, Deployment oder Chatverlauf-Speicherung. Durch die Verteilung von klar definierten Rollen und Arbeitsbereichen wollten wir Abhängigkeiten zwischen den einzelnen Aufgaben vermeiden und gleichzeitig das Expertenwissen der einzelnen Gruppenmitglieder vertiefen, um in allen Anwendungsbereichen möglichst qualitativ hochwertige Ergebnisse zu erhalten. Dabei nutzten wir Code Reviews in Gitlab und die stetige Kommunikation im Team, um den aktuellen Projektstand zu diskutieren und neu erworbenes Wissen untereinander zu teilen. Sowohl zu Beginn als auch zur Mitte eines jeden Sprints führten wir Teammeetings durch, um den aktuellen Projektstand zu reflektieren und gemeinsam Lösungsansätze für zuvor aufgetretene Probleme zu erarbeiten. Unser Entwicklungsansatz war dabei inkrementell: In den ersten beiden Sprints lag der Fokus auf der Qualität der Antworten, d.h. das System sollte relevante Fragen möglichst präzise und nachvollziehbar beantworten. Erst danach erweiterten wir sukzessive den Umfang der Informationen, die abgefragt werden konnten, um auch speziellere Anliegen abzudecken und gleichzeitig die Skalierbarkeit des Systems zu testen. Durch eine ausführliche Qualitätsanalyse der Chatbot-Antworten konnten wir in den Sprint Reviews unseren Fortschritt beobachten und sinnvolle Themenschwerpunkte für den nächsten Sprint auswählen.
Lösung
Frontend
Als Grundlage für die Benutzeroberfläche haben wir ein modernes und zugleich schlankes Setup gewählt. Das Frontend wurde mit dem Web-Framework Next.js umgesetzt und ist bewusst minimalistisch gestaltet, um maximale Übersicht und Bedienbarkeit zu gewährleisten. Dabei haben wir wichtige Features wie Kopier- und Exportfunktionen sowie eine Seitenleiste zur schnellen Navigation zwischen den einzelnen Chats ergänzt, und orientierten uns am Design der bereits vorhandenen KI-Sprachmodelle.
Backend
Retrieval Augmented Generation (RAG)
Der Chatbot basiert auf dem Prinzip der Retrieval Augmented Generation (RAG): Dabei wird eine Nutzeranfrage zunächst in ein sogenanntes Vektor-Embedding, eine mathematische Repräsentation des Textes, umgewandelt und in einer Vektordatenbank mit zuvor gespeicherten Dokumenten und Webseiteninhalten abgeglichen. Relevante Textpassagen werden extrahiert und dem Sprachmodell als kontextuelle Basis zur Generierung der Antwort übergeben. So entstehen präzise und aktuelle Antworten, ohne dass das Modell selbst neu trainiert werden muss.
Python-Backend
Das Sprachmodell läuft dabei lokal auf dem Server und ist über eine API erreichbar. Zur technischen Umsetzung des Prozesses haben wir Python, insbesondere die Bibliotheken FastAPI und Langchain, benutzt. FastAPI ist ein Framework für die API-Entwicklung, und dient in unserem Fall zum Empfangen von Nutzeranfragen aus dem Frontend und zur Weiterverarbeitung der Anfrage durch das Senden an das Sprachmodell und die Weiterleitung der generierten Antwort. Langchain dient als zentrale Steuerungsebene für den RAG-Workflow, von der semantischen Suche in der Datenbank bis hin zur Prompt-Zusammenstellung für das LLM.
Informationsspeicherung in der Vektordatenbank
Die Speicherung der Informationen in der ChromaDB-Vektordatenbank erfolgt schrittweise:
- Wir nutzen einen PDF-Reader bzw. Webseite-Scraper zum Extrahieren der Texte,
- teilen diese Texte in inhaltlich zusammenhängende Paragraphen ("Chunks") auf und
- speichern sie mit Hilfe eines Vektor-Embedding-Sprachmodells als mathematische Repräsentation in Form von Vektoren in der Datenbank.
Dadurch können wir die Infomationsgrundlage in Form der eingelesenen Dokumente bzw. Webseiteninhalte selbstständig festlegen und so bestimmen, welche Anfragen der Chatbot korrekt bearbeiten kann.
Antwortgenerierung
Für die Generierung der Antwort wird ein individualisierter Prompt genutzt, der nicht nur den aus der Vektordatenbank extrahierten Kontext enthält, sondern auch relevante vorherige Chatnachrichten. Auf diese Weise kann das Sprachmodell konsistente, verständliche und kontextuell passende Antworten liefern.
Datenspeicherung
Für die Verwaltung der Chatverläufe nutzen wir eine PostgreSQL-Datenbank, die Session-Verwaltung erfolgt mit Redis.
Testing
Um die Qualität des Chatbots während der gesamten Projektlaufzeit kontinuierlich zu überprüfen, entwickelten wir ein automatisiertes Testsystem auf Basis der Python-Bibliothek pytest. Dieses System ermöglicht es, zuvor definierte Testfragen automatisch an den Chatbot zu senden und die jeweiligen Antworten zu evaluieren. Dabei werden die generierten Antworten mithilfe des LLM mit erwarteten Idealantworten verglichen und auf einer Skala von 1 bis 5 bewertet. Durch dieses Setup konnten wir die inhaltliche Genauigkeit des Chatbots systematisch überwachen, die Auswirkungen neuer Features direkt nachvollziehen und den Entwicklungsfortschritt objektiv messbar machen. Das Testsystem war somit ein zentraler Bestandteil unserer Qualitätssicherung und trug maßgeblich dazu bei, die Performance und Zuverlässigkeit des Chatbots kontinuierlich zu verbessern.
Fazit
Mit TH Chat ist es uns gelungen, die erste Version eines intelligenten, lokal laufenden Chatbots zu entwickeln, der Studierende und Mitarbeitende der TH Wildau bei studienrelevanten Anliegen effektiv unterstützen kann. Trotz anfänglicher technischer und organisatorischer Herausforderungen konnten wir durch eine klare Teamstruktur, agile Arbeitsweise und kontinuierliche Qualitätssicherung ein stabiles System aufbauen, das zuverlässig präzise und kontextbezogene Antworten liefert. Das entwickelte Proof Of Concept bildet eine solide Grundlage für den weiteren Ausbau zu einem vollwertigen digitalen Studienassistenten und zeigt eindrucksvoll, wie moderne KI-Technologien sinnvoll in Hochschulprozesse integriert werden können. Wir freuen uns darauf, im nächsten Semester auf Grundlage unserer gesammelten Erfahrungen in einem experimentellen Prozess an der Funktionalität des Chatbots weiterzuarbeiten und ein Produkt zu erstellen, das in Zukunft Mitarbeiter, Studierende und Studieninteressierte bei ihren Anliegen unterstützen kann.
Screenshots
Unsere Startseite, über die der Nutzer einen neuen Chat erstellen kann.
Ein beispielhafter Chat. Die Antwort des Chatbots enthält die genutzten Quellen, Kopier-, Feedback und Regenerierungsbuttons. Der Button oben rechts ermöglicht das Exportieren des Chats als PDF-Dokument.
In der einklappbaren Seitenleiste werden alle erstellten Chats mit einem identifizierbaren Titel angezeigt.