Liviana
KI-Chatbot mit hoher Effizienz und geringem Ressourcenverbrauch
Kontext
Liviana ist eines der Produkte, die ich mit KettenKI anbiete: ein Chatbot, der die Fragen von Kundinnen und Kunden auf der Website eines Unternehmens beantwortet.
Liviana lĂ€uft unter meiner eigenen Marke KettenKI und erfĂŒllt dort gleichzeitig zwei Aufgaben: Wer hier fragt, welche Lösungen ich anbiete, benutzt in genau diesem Moment Liviana und sieht sie bei der Arbeit. Sie ist damit kein Screenshot und kein Repository, sondern ein Produkt, das wĂ€hrend des Besuchs ausprobiert werden kann.
Technisch liegt genau darin die Schwierigkeit: Liviana ist ohne Anmeldung öffentlich zugÀnglich, und jede Person kann Anfragen schicken, die einen abgesicherten Ablauf bis zu Amazon Bedrock durchlaufen.
Rundgang durch die Anwendung
Der Auslöser
Auf jeder kommerziellen Seite sitzt unten rechts das vergnĂŒgte Maskottchen von KettenKI. Kein allgemeines Chat-Symbol, sondern die Figur meiner eigenen Marke, die zumindest mich dazu einlĂ€dt, ein GesprĂ€ch mit ihr zu beginnen und fachliche Auskunft zu bekommen (vielleicht auch nur deshalb, weil ich die Katze und die Marke selbst erfunden habe ;)).
Geöffnetes Fenster
Ein Klick öffnet das Fenster mit einer kurzen BegrĂŒssung. Die OberflĂ€che ĂŒbernimmt Farben und Schrift der Seite, sodass sich der Chat in die Website einfĂŒgt. Unter dem Eingabefeld weist ein dauerhafter Hinweis darauf hin, dass es sich um einen Prototyp handelt und Antworten Fehler enthalten können.
Eine echte Anfrage
Eine Yogaschule fragt, ob ein Chatbot die wiederkehrenden Fragen beantworten könnte, die sie per E-Mail und WhatsApp bekommt. Liviana antwortet kurz, bleibt beim Thema und bietet bei erkennbarem Kaufinteresse eine Kontaktmöglichkeit an. Ausserdem antwortet sie in der Sprache der Frage.
Ausserhalb des Themas
Jemand versucht, ihr das Passwort zum AWS-Konto zu entlocken. Sie lehnt ab und antwortet grundsÀtzlich nicht zu Themen, die nicht sicher hinterlegt sind oder nicht zum GeschÀft gehören.
Architektur
Und jetzt der Teil, den ich selbst am interessantesten finde: etwas wirklich Einfaches, das sich in wenigen Stunden umsetzen lÀsst.
Das Widget schickt die neue Nachricht und eine Sitzungskennung an eine HTTP-API von API Gateway. Die Lambda prĂŒft zuerst die Sperre pro Sitzung, dann den Verlauf und TageszĂ€hler und erst danach das Modell. Die billigste Absage kommt zuerst; der TageszĂ€hler wird unmittelbar vor dem bezahlten Aufruf erhöht.
Verlauf und ZĂ€hler liegen in zwei DynamoDB-Tabellen mit TTL. Das Wissen ĂŒber KettenKI liegt als einzelnes Dokument in S3 und wird im AusfĂŒhrungskontext fĂŒnf Minuten zwischengespeichert. Die Antwort kommt von Claude Haiku 4.5 auf Bedrock. CloudWatch-Alarme und ein AWS-Budget melden sich per SNS und E-Mail, wenn etwas aus dem Ruder lĂ€uft.
Stack
| Ebene | Technologie |
|---|---|
| Frontend | Widget in Vanilla JS, ohne Build-System |
| API | API Gateway HTTP API, mit Throttling und fester Herkunft |
| Rechenleistung | AWS Lambda (Python 3.13) |
| Modell | Claude Haiku 4.5 ĂŒber Amazon Bedrock (eu-central-1) |
| Persistenz | Amazon DynamoDB, zwei Tabellen mit TTL |
| Inhalt | Amazon S3, ein JSON-Dokument, im AusfĂŒhrungskontext zwischengespeichert |
| Infrastruktur | CloudFormation von Hand, ohne SAM und ohne CDK |
| Monitoring | CloudWatch-Alarme, SNS und ein AWS-Budget |
Was ich gemacht habe
- Die Lambda ist mit Ports und Adaptern aufgebaut. Bedrock, S3 und DynamoDB hÀngen ausserhalb der Fachlogik, sodass ich das System auch lokal ohne AWS testen kann.
- Den Kostenschutz habe ich selbst gebaut, statt dafĂŒr eine Web Application Firewall einzusetzen.
- GesprÀchsverlauf und ZÀhler liegen in getrennten DynamoDB-Tabellen. Die ZÀhler werden atomar aktualisiert, damit gleichzeitige Anfragen das Limit nicht umgehen können.
- Das Chat-Widget habe ich selbst gebaut, inklusive Sitzungen, Sprachwechsel und der verschiedenen ZustÀnde bei Fehlern und Limits.
Technische Herausforderung
Ein Sprachmodell öffentlich und ohne Anmeldung anzubieten bedeutet auch, dass jeder Klick Kosten verursachen kann. FĂŒr eine Demo wollte ich deshalb keine laufenden Kosten fĂŒr eine Web Application Firewall haben.
Stattdessen habe ich den Schutz selbst aufgebaut: mit der Drosselung von API Gateway, einer Begrenzung pro Sitzung, einem Tageslimit, reservierter NebenlÀufigkeit und einer Begrenzung der NachrichtenlÀnge.
Wichtig war dabei vor allem die Reihenfolge der PrĂŒfungen. Teure Anfragen werden so spĂ€t wie möglich zugelassen, und eine abgewiesene Anfrage verbraucht kein Tageskontingent.
Ergebnis & Learnings
Liviana lĂ€uft seit August 2026 auf kettenki.com, antwortet in drei bis fĂŒnf Sekunden und wechselt automatisch die Sprache.
FĂŒr mich war die wichtigste Erkenntnis, dass bei einem öffentlichen Chatbot der Prompt nur ein kleiner Teil der Arbeit ist. Interessanter wird es bei den Dingen, die schiefgehen können: zu viele Anfragen, ein ausgefallener Dienst, ein erreichtes Tageslimit oder der Versuch, den Chatbot aus seiner Rolle zu bringen.
Liviana ist deshalb nicht nur eine Demo. Sie ist gleichzeitig das Produkt und der Beweis, dass die ganze Kette funktioniert.