Architektur¶
Die Anwendung ist als containerisierte Webanwendung mit klarer Schichtentrennung aufgebaut. Die Bedienoberfläche, die Orchestrierung der Verarbeitungsschritte, die Dokument- und LLM-Anbindung sowie die Export-Komponenten sind in eigenständigen Modulen organisiert. Der gesamte Bearbeitungsstand einer Sitzung wird im Arbeitsspeicher gehalten; eine persistente Datenhaltung ist nicht vorgesehen.
Auf einen Blick¶
- Containerisierter Betrieb auf Basis eines Python-Slim-Image, mit den notwendigen Systembibliotheken für die Dokumentverarbeitung
- Webbasierte Bedienoberfläche, die im Browser läuft und keinen Client-Installationsschritt benötigt
- Schichtentrennung in Oberfläche, Orchestrierung (Agenten und State), Kernfunktionen (Dokument, LLM, State) und Export
- Zwei-Agenten-Pipeline mit getrennten System-Prompts für Dialog und Artefakt-Verarbeitung
- LLM-Anbindung über eine OpenAI-kompatible Schnittstelle, mit Wiederholungslogik und exponentiellem Backoff
- Sitzungsbasierter, zustandsbehafteter Speicher ohne Festplattenpersistenz
- Konfiguration über Umgebungsvariablen, einschließlich API-Endpunkt, Modellname und Grenzwerten
Architekturbeschreibung¶
Die Anwendung gliedert sich in vier logische Schichten. Die Oberflächenschicht stellt den Upload von Dokumenten, das Chat-Fenster, die Anzeige der aktuellen Foliengliederung sowie die Export- und Undo-Schaltflächen bereit. Die Orchestrierungsschicht umfasst die beiden Agenten (Chat-Agent und Artefakt-Agent) und die zentrale State-Verwaltung. Die Kernschicht kapselt die wiederverwendbaren Bausteine: das Einlesen und Tokenisieren von Dokumenten, den LLM-Client mit Wiederholungslogik und das State-Objekt mit Versionshistorie. Die Export-Schicht überführt die interne Markdown-Repräsentation in PowerPoint- und Word-Dateien.
flowchart TB
User[Nutzer]
subgraph UI[Oberflächenschicht]
Upload[Upload-Bereich]
Chat[Chat-Fenster]
ArtView[Artefakt-Anzeige]
Export[Export-Schaltflächen]
end
subgraph Orch[Orchestrierungsschicht]
State[State-Verwaltung<br/>Dokumente, Chat, Artefakt, Historie]
ChatAgent[Chat-Agent]
ArtAgent[Artefakt-Agent<br/>Zwei-Phasen-Logik]
end
subgraph Core[Kernschicht]
DocProc[Dokument-Parser<br/>+ Token-Zähler]
LLMClient[LLM-Client<br/>Retry/Backoff]
end
subgraph Exp[Export-Schicht]
MDExp[Markdown-Export]
PPTXExp[PowerPoint-Export]
DOCXExp[Word-Export]
end
LLM[(LLM-API<br/>OpenAI-kompatibel)]
User --> Upload
User --> Chat
User --> Export
Upload --> DocProc
DocProc --> State
Chat --> ChatAgent
ChatAgent --> State
ChatAgent --> LLMClient
State --> ArtAgent
ArtAgent --> LLMClient
ArtAgent --> State
State --> ArtView
LLMClient --> LLM
State --> MDExp
State --> PPTXExp
State --> DOCXExp
MDExp --> User
PPTXExp --> User
DOCXExp --> User
Oberflächenschicht¶
Die Bedienoberfläche ist als webbasierte Single-Page-Anwendung umgesetzt. Sie enthält drei Hauptbereiche: einen Upload-Bereich mit Token-Anzeige, das Chat-Fenster und eine Anzeige der aktuellen Foliengliederung mit Export-, Undo- und Status-Anzeigen. Die Komponenten sind über Ereignisse mit der State-Verwaltung verbunden; nach jedem Ereignis (Upload, Chat-Eingabe, Undo, Export) wird die Anzeige neu gerendert.
Orchestrierungsschicht¶
Den Kern der Verarbeitung bilden zwei Agenten und eine State-Verwaltung. Der Chat-Agent ist für die Nutzerinteraktion zuständig: Er nimmt freie Texteingaben entgegen, extrahiert daraus regelbasiert Angaben zu Vortragsdauer, Zielgruppe, Schwerpunkten und Zielsprache, ergänzt diese um den aktuellen Folienkontext und ruft das LLM mit einem dialogorientierten System-Prompt auf. Der Artefakt-Agent wird nach jedem Dialog-Turn sowie beim erstmaligen Upload ausgeführt. Er arbeitet in zwei Phasen: Die erste Phase erzeugt oder aktualisiert die Markdown-Gliederung aus den Dokumenten und der Nutzeranweisung; die zweite Phase passt die Folienzahl an die Zielgröße an und löst bei Sprachwechsel eine Übersetzung aus. Der Agent erwartet vom LLM eine strukturierte JSON-Antwort, parst diese und entfernt anschließend die internen Quellreferenzen aus dem für die Anzeige bestimmten Artefakt.
Die State-Verwaltung hält den vollständigen Sitzungszustand: hochgeladene Dokumente mit Tokenzahl, den Chat-Verlauf, das aktuelle Artefakt, die Versionshistorie der letzten fünf Artefakt-Stände sowie offene Klärungsfragen. Sie bietet Methoden zum Hinzufügen von Dokumenten und Nachrichten, zum Aktualisieren des Artefakts mit Diff-Beschreibung sowie zum Rückgängigmachen der letzten Änderung. Der State wird zwischen den Aufrufen der Oberfläche serialisiert und deserialisiert weitergereicht.
Kernschicht¶
Die Kernschicht kapselt die wiederverwendbaren Bausteine. Der Dokument-Parser validiert hochgeladene Dateien gegen das konfigurierte Größenlimit und die Liste unterstützter Formate, liest sie über eine generische Partitionierungsbibliothek ein und überführt das Ergebnis in eine vereinheitlichte Markdown-Darstellung. Anschließend wird die Tokenanzahl mit einem BPE-basierten Tokenizer ermittelt; dieser wird auch zur Summenbildung über Dokumente, Chat-Verlauf und Artefakt verwendet. Der LLM-Client kapselt die Aufrufe an die OpenAI-kompatible Schnittstelle, unterscheidet zwischen freiem Textaufruf und JSON-Aufruf und ist mit einer Wiederholungslogik mit exponentiellem Backoff versehen. Bei JSON-Aufrufen extrahiert der Client das JSON aus eingebetteten Code-Blöcken und parst es robust.
Export-Schicht¶
Die Export-Schicht setzt die Markdown-Darstellung in die Zielformate um. Ein gemeinsamer Markdown-Folien-Parser erkennt Folien an Überschriften erster Ebene, sammelt die zugehörigen Stichpunkte (einschließlich untergeordneter Ebenen) und Sprechernotizen und stellt sie als strukturierte Folienobjekte bereit. Ein Text-Formatierer interpretiert dabei Markdown-Auszeichnungen für fett, kursiv und Inline-Code. Die formatspezifischen Exporter erzeugen daraus PowerPoint-Dateien mit getrennten Folien und Notizfeldern beziehungsweise Word-Dokumente mit Folien-Abschnitten und Trennlinien.
Rolle der KI-Komponenten¶
Das LLM kommt an genau zwei Stellen zum Einsatz: im Chat-Agenten zur Erzeugung von Antworten an die nutzende Person und im Artefakt-Agenten zur Erzeugung beziehungsweise Aktualisierung der Foliengliederung. Beide Agenten nutzen denselben LLM-Client, aber unterschiedliche System-Prompts und Aufrufmodi (Freitext im Chat-Agenten, JSON-Antwort im Artefakt-Agenten). Die agentische Steuerung — Phasen, Klärungsfragen, Längen-Anpassung, Übersetzungs-Trigger — erfolgt im Anwendungs-Code und nicht durch das LLM selbst. Embedder und Reranker werden nicht eingesetzt; die Priorisierung von Dokumentabschnitten erfolgt regelbasiert anhand von Position, Überschriftsebene, Länge und Schlüsselbegriffen.
Nebenläufigkeit, Robustheit und Konfiguration¶
Die Anwendung verarbeitet Anfragen sequentiell innerhalb einer Sitzung. Robustheit gegenüber vorübergehenden LLM-Fehlern wird durch die Retry-Logik im LLM-Client hergestellt; die Anzahl der Versuche und die Wartezeiten sind konfigurierbar. Bei dauerhaftem Fehlschlag bleibt der vorherige Artefaktstand erhalten und der Fehler wird im Status angezeigt. Beim Upload werden Dateigröße und Format geprüft; bei Überschreitung des Token-Budgets wird der Upload abgelehnt. Die Konfiguration erfolgt vollständig über Umgebungsvariablen (LLM-Endpunkt, Modellname, API-Schlüssel, Grenzwerte, Server-Port und Pfad).
Technologie-Übersicht¶
- Sprache und Laufzeit: Python 3.13
- Bedienoberfläche: Gradio
- LLM-Anbindung: OpenAI-Python-Client gegen eine OpenAI-kompatible Schnittstelle (lokaler Betrieb möglich)
- Tokenisierung: tiktoken
- Wiederholungslogik: tenacity
- Dokument-Parsing: unstructured
- Export PowerPoint: python-pptx
- Export Word: python-docx
- Markdown-Verarbeitung: markdown-it-py
- Bildverarbeitung (für Dokumentparser): Pillow
- Containerisierung: Docker, Basis-Image Python-Slim, mit Systempaketen für Dokument- und Bildverarbeitung sowie Texterkennung
- Konfiguration: Umgebungsvariablen via dotenv