AI Multimedia Chat Applikation (WIP)
Über dieses Projekt
AI Chat App, mit Fokus auf interaktivem Storytelling und Multimedia Integration. Die App erlaubt es lange Unterhaltungen mit verschiedenen Charakteren, Erzählern oder Szenarien zu führen. Die App verwaltet den Kontext der Unterhaltungen um ein möglichst konsistentes Weltbild zu bewahren ohne die komplette Unterhaltung mit jeder Nachricht an den LLM Provider schicken zu müssen. Sie erlaubt es außerdem dem LLM autonom bestimmte Funktionen aufzurufen, wie Bildgenerierung oder das Schreiben von Notizen, dies unterstützt das immersive Storytelling. Andere Frameworks müssen meist explizit aufgefordert werden bestimmte Funktionen wie Bildgenerierung zu verwenden oder verlangen aufwändige Konfigurationen um die selbe Funktionalität zu erreichen (z.B. Silly Tavern). Im Gegensatz zu reinen Cloud Providern erlaubt dieses Projekt volle Kontrolle darüber welche Daten zu Cloud Providern geschickt werden. Die Daten existieren außerdem immer auch in der lokalen Datenbank, sodass Änderungen auf Seiten eines Cloudproviders keine Auswirkungen auf die eigenen Nutzerdaten haben.
Funktionen
- Unterstützung von mehreren lokalen oder cloudbasierten LLM Providern (OpenRouter, KoboldCpp, Ollama, Featherless, Replicate, OpenAI-API kompatible Anbieter)
- Unterstützung von mehreren lokalen oder cloudbasierten Bildgeneratoren (ComfyUI, NeoForge, SD.Next, LumaAI, NovelAI)
- Eigenes Toolcalling Framework, ähnlich zu LangChain
- Notizbuch ähnliche Gedächtnisfunktion, auf einer pro Chat Basis
- RAG basierte Gedächtnisfunktion, mittels Qdrant, sowohl pro Chat als auch pro CharacterCard
- Iteratives RAG System, dass in mehreren Runden relevanten Kontext zum aktuellen Gesprächsverlauf hinzufügt
- Kontext Management um jeden Request in einem vorher definierten Kontext Limit zu halten
- Import aller gängiger CharacterCard Formate (V1, V2, V3 ,sowohl JSON als auch PNG)
- Multi-User Unterstützung
- Detaillierte Einstellungen zu Nutzerinformationen, Systemprompt, ActNudges, LLM Provider, Bildgeneratoren, etc. auf einer pro Nutzer Basis
- Volle Unterstützung für gängige Lorebook Formate
- Nutzer und Chat Daten werden in einer lokalen MongoDB Instanz gespeichert
- Generierte Multimedia Dateien werden in einer Garage Instanz (Open Source S3 Storage) gespeichert
- Sowohl als Web oder als Android App verfügbar
Technisches
- Modernes Backend mit .Net Sdk 9.0 und ASP.Net Core
- RestAPI für alle nicht Chat spezifischen Funktionen
- SignalR für die Echtzeit Kommunikation zwischen Server und Client während eines Chats
- Authentication für alle nicht Login relevanten Endpoints mit JWT Tokens
- Moderne multiplatform Frontend Applikation mit ReactNative und Expo
- Unterstützung für Streaming Requests, sodass der Nutzer nicht auf die komplette Generierung warten muss um die ersten Antworten zu erhalten
Hauptfunktionen
- Robustes Backend: Robustes modulares Backend, dass Daten in dafür vorgesehene etablierte selbst gehostete Datenbanken speichert und eine Vielzahl von AI Services über eine einheitliche API anbindet.
- Modernes Multiplattform Frontend: React Native basiertes Frontend Framework, dass eine einheitliche Nutzeroberfläche im Web und auf Android bereitstellt.

Login Maske mit Fehlermeldung, da sich der Nutzer versucht hat mit falschen Daten einzuloggen.

Übersicht über alle Character Cards die der Benutzer zu seinem Account hinzufügt hat, nach drücken einer Card kann ein neuer oder bestehender Chat gestartet oder fortgeführt werden.

Chatfenster, indem der Nutzer gerade eine Nachricht tippt. Dies ist eine Character Card die den Nutzer in ein fiktives mittelalterliches Szenario transportiert.

Während der Nutzer auf eine Antwort wartet, gibt das Backend im Header den aktuellen Status des Requests an.

Das Bild was als letztes im Chat vor der aktuellen Scroll Position gesendet wurde, wird auch als Hintergrund für den Chat angezeigt. In Nachrichten wird außerdem ein sehr simples Postprocessing betrieben um Dialoge und Handlungen farblich hervorzuheben.

Wenn im Zuge einer Antwort eine Funktion aufgerufen wird, wird diese außerdem dem Nutzer präsentiert. In diesem Fall hat das LLM eine persistente Notiz in das Notizbuch des aktuellen Chats geschrieben.
Herausforderungen
Eine der größten Herausforderungen in diesem Projekt war es die Skalierbarkeit abzuschätzen. Dies ist die dritte Iteration dieser Applikation. Version 1 war eine komplett lokale Desktop Applikation ohne eigenes Backend. Version 2 war eine Version mit einfachem Backend ohne eigenen Multimedia Storage und mit einem Avalonia Frontend. Dies mündete dann in der aktuellen dritten Iteration der App.
Erkenntnisse
Dieses Projekt hat mir viel über die Integration von LLMs in Applikationen und den Limitationen die mit dem aktuellen Stand von LLMs einhergehen beigebracht. So hat es einige Anläufe gedauert, bis das ToolCalling zuverlässig funktioniert hat und es war interessant zu sehen, dass neuere LLMs auch von sich aus immer besser mit strukturiertem Input und Output arbeiten können. Auch bei der Backend Entwicklung habe ich viel gelernt. Von der ersten Version wo Bilddateien ganz naiv als Datei ins Dateisystem abgelegt worden sind, zu der aktuellen Version die Bilder hinter einem authentifiziertem Endpoint bereitstellt, sodass gängige Frontend Frameworks diese möglichst nativ als Webresource darstellen können.