🎓 Eigenes Projekt 🚀 In Produktion

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 ;)).

Die Startseite von kettenki.com mit dem Katzen-Maskottchen unten rechts

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.

Das geöffnete Chatfenster mit der BegrĂŒssung von Liviana

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.

Ein GesprĂ€ch ĂŒber eine Yogaschule, das mit dem Hinweis auf die Kontaktadresse endet

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.

Liviana lehnt die Frage nach dem AWS-Passwort ab und verweist auf ihre Themen

Architektur

Und jetzt der Teil, den ich selbst am interessantesten finde: etwas wirklich Einfaches, das sich in wenigen Stunden umsetzen lÀsst.

Architekturdiagramm von Liviana: Das Widget der Website ruft eine HTTP-API von API Gateway auf, diese eine Lambda mit Sperre je Sitzung, TageszĂ€hler und begrenzter NebenlĂ€ufigkeit. Die Lambda liest das Inhaltsdokument aus S3, fĂŒhrt Verlauf und ZĂ€hler in zwei DynamoDB-Tabellen mit TTL und ruft Claude Haiku 4.5 auf Bedrock auf. CloudWatch-Alarme und ein AWS-Budget melden sich per SNS und E-Mail, wenn etwas aus dem Ruder lĂ€uft.

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.