Karla ist der KI-Chatbot auf dem offiziellen Tourismusportal karlsruhe-erleben.de. Sie beantwortet Fragen zu Veranstaltungen, Sehenswürdigkeiten und Gastronomie in Karlsruhe live aus der städtischen Datenbank und dem Webseiteninhalt. Ich verantworte die technische Umsetzung: Chatbot, Wissensbasis, Qualitätssicherung und das monatliche Reporting für den Kunden.
Ein Reiseführer für eine ganze Stadt
Karlsruhe Marketing und Event (KME) und die Karlsruhe Tourismus GmbH (KTG) betreiben mit karlsruhe-erleben.de das offizielle Tourismusportal der Stadt. Besucherinnen und Besucher stellen dort dieselben Fragen wie an jeder Tourist-Information: Was ist heute los? Wo kann ich gut essen? Wie komme ich am besten in die Stadt? Die Antworten liegen verteilt in einer Veranstaltungsdatenbank, in Hunderten Ortsbeschreibungen und auf Dutzenden Webseiten zu Anreise, Stadtteilen und Sehenswürdigkeiten.
Karla ist der Chatbot, der diese Fragen direkt auf der Website beantwortet, auf Deutsch, Englisch und Französisch, rund um die Uhr. Das Projekt läuft unter der Leitung von Prof. Dr. Gerald Lembke, der als Qualitätsbeauftragter die fachliche und redaktionelle Seite verantwortet. Ich habe die technische Umsetzung übernommen: die gesamte Chatbot-Architektur, die Anbindung an die Datenquellen, die Qualitätssicherung und das laufende Reporting an den Kunden.
Wie Karla eine Frage beantwortet
Karla ist kein einzelnes Sprachmodell, sondern ein Agent mit mehreren Werkzeugen, der je nach Frage selbst entscheidet, wo die Antwort herkommt:
- Veranstaltungsfragen (“Was ist dieses Wochenende los?”) gehen an ein eigenes Werkzeug, das live gegen die Toubiz-API der KTG abfragt, dieselbe Datenbank, aus der auch der Veranstaltungskalender der Website gespeist wird. Ein zweites Werkzeug liefert zuerst immer das aktuelle Datum, denn das Sprachmodell kennt weder den heutigen Tag noch die Uhrzeit von sich aus, und ohne diesen Zwischenschritt hätte es “heute” und “morgen” zuverlässig falsch beantwortet.
- Fragen zu Orten (Restaurants, Sehenswürdigkeiten, öffentliche Toiletten, Öffnungszeiten) laufen über ein zweites Werkzeug gegen dieselbe Toubiz-Datenbank, diesmal den Orts- und Artikelbestand.
- Allgemeine Fragen zu Karlsruhe (Anreise, Geschichte, Stadtteile) beantwortet Karla aus einer eigenen Wissensbasis, die aus den redaktionellen Inhalten der Website selbst aufgebaut ist.
Diese Aufteilung ist der Kern der Architektur: Wo es eine strukturierte, aktuelle Quelle gibt, nutzt Karla sie live, statt sich auf einen möglicherweise veralteten Textausschnitt zu verlassen. Der System-Prompt schreibt das ausdrücklich vor: Karla antwortet nur auf Basis von Werkzeugergebnissen und erfindet nie Öffnungszeiten, Preise oder Adressen.
Frage
Was ist am Wochenende los?
Werkzeugheutiges Datum geholt
- VeranstaltungenToubiz-API, live
- OrteToubiz-API, Orte
- Allgemeine FragenWissensbasis, Qdrant
Karla
Veranstaltungskalender
DEENFR
Architektur
| Baustein | Aufgabe |
|---|---|
| Flowise | Orchestriert den Agenten, die Werkzeuge und das Gespräch |
| Qdrant | Vektordatenbank für den Webseiteninhalt |
| Sprachmodell über Requesty | EU-gehostetes Gateway, aktuell ein Gemini-Flash-Modell |
| Toubiz-API | Live-Datenquelle für Veranstaltungen und Orte |
| Eigene Ingest-Pipeline | Crawlt, zerlegt und aktualisiert die Wissensbasis |
Der Chatbot selbst läuft in Flowise, einem Open-Source-Werkzeug für KI-Agenten, selbst gehostet auf einem eigenen Server. Die laufende Version ist fest gepinnt, und jeder Wechsel läuft zuerst gegen eine Testkopie, nie direkt gegen den produktiven Bot.
Für die Wissensbasis betreibe ich eine eigene Ingest-Pipeline, die die Website-Inhalte crawlt, in Abschnitte zerlegt und in Qdrant einbettet. Sie lief anfangs nächtlich automatisiert, läuft inzwischen aber gezielt über ein kleines internes Werkzeug: Die Redaktion trägt eine geänderte Seite ein, die Pipeline liest sie neu ein und ersetzt nur die betroffenen Abschnitte. Das hat sich als robuster erwiesen als ein nächtlicher Komplettlauf über tausende Seiten, bei dem sich Fehler einzelner Seiten in der Fläche verlieren.
Qualitätssicherung: gegen echte Testfragen prüfen, nicht nur gegen das Bauchgefühl
Bevor ein neues Sprachmodell oder ein neuer Prompt live geht, läuft er gegen eine feste Testmatrix aus mehreren Dutzend echten Nutzerfragen, von Veranstaltungsfragen über Anreise bis zu Fragen auf Englisch und Französisch. Jede Antwort wird automatisiert auf feste Kriterien geprüft, etwa ob eine erwartete Quellenangabe enthalten ist oder ob verbotene Formatierungen auftauchen. Auf dieser Basis habe ich mehrere Sprachmodelle systematisch gegeneinander getestet, bevor eines davon produktiv ging.
Dazu kommt eine Deny-Liste mit mehreren hundert Einträgen, die verhindert, dass Karla auf Manipulationsversuche oder unpassende Anfragen eingeht und stattdessen sachlich bleibt oder an die Tourist-Information verweist. Auch diese Regeln prüfe ich im laufenden Betrieb, nicht nur vor dem Rollout.
Monatliches Reporting für den Kunden
Über den Chatbot selbst hinaus habe ich ein eigenes Reporting-System gebaut, das KME jeden Monat einen Auswertungsbericht liefert. Ein Skript berechnet zunächst alle Kennzahlen aus dem Gesprächsexport, danach ordnet eine Gruppe von KI-Agenten jede einzelne Konversation des Monats einem Thema zu, prüft kritische Anfragen im Detail und bewertet die Antwortqualität. Aus beidem entsteht ein eigenständiges HTML-Dashboard, das direkt per Mail an das Kundenteam geht.
Der Bau des Berichts bricht bewusst ab, wenn diese inhaltliche Bewertung fehlt, damit nie ein reiner Zahlenbericht ohne echte Einordnung verschickt wird.
Was ich gelernt habe
Am meisten Zeit hat nicht der Chatbot selbst gekostet, sondern die Datenanbindung: Eine öffentliche API bedeutet nicht, dass ihre Dokumentation vollständig ist. Mehrere Parameter der Toubiz-API funktionierten anders als dokumentiert, und der Unterschied zeigte sich erst beim Testen gegen echte Antworten, nicht beim Lesen der Doku. Seitdem gilt für mich bei jeder Drittanbieter-API: gegen die echte Antwort prüfen, nicht gegen die Beschreibung.
Die zweite Lehre betrifft Zustände statt Aufrufe. Eine Einstellung, die nur als Parameter eines einzelnen Aufrufs existiert und nirgends gespeichert wird, geht beim nächsten Aufruf ohne diesen Parameter automatisch verloren, auch wenn sie vorher korrekt gesetzt war. Das hat mich gelehrt, Konfiguration grundsätzlich als gespeicherten Zustand zu behandeln, nicht als Übergabewert.
Status
Karla läuft produktiv auf karlsruhe-erleben.de und wird laufend weiterentwickelt, zuletzt mit einem Wechsel des Sprachmodells im September 2026. Du baust ein ähnliches Projekt, einen Chatbot mit Anbindung an bestehende Datenquellen oder eine Auswertung für wiederkehrende Berichte? Schreib mir an kontakt@bitzer-fabian.de.