280 Zeilen Code, einige hundert Nutzungen täglich: Der Einstieg in LLM-Coding#
Was passiert, wenn man zum ersten Mal ein praktisches Problem mit LLM-gestütztem Coding angeht? Ein Experiment zur Entwicklung eines Dokumenten-Zusammenfassungs-Tools vor fast einem Jahr markiert den Startpunkt einer methodischen Lernreise von einfachen zu immer komplexeren LLM-gestützten Programmen.
Der Ausgangspunkt: Erstes Experiment, konkreter Bedarf#
Der praktische Bedarf war klar: schnelle Zusammenfassungen von arXiv-Papers nach unterschiedlichen Fragestellungen, auch für große Dokumente. Gleichzeitig war dies der erste bewusste Versuch, LLM-gestütztes Coding systematisch zu erkunden. Drei zentrale Herausforderungen sollten verstanden werden: Umgang mit Kontextbeschränkungen, Vermeidung von Halluzinationen und Durchsetzung von Prompt-Following.
Dieses erste Experiment steht am Anfang einer Serie, die den Weg von einfachen Tools zu immer komplexeren Programmen dokumentiert. Die hier entwickelten Grundprinzipien bildeten das Fundament für alle nachfolgenden Projekte.
Die technische Lösung#
Das resultierende Tool verarbeitet PDF-, DOCX- und ODT-Dateien mit einer zweistufigen Chunking-Strategie: Dokumente werden in 10.000-Zeichen-Segmente zerlegt, einzeln zusammengefasst und dann in einer Meta-Zusammenfassung synthetisiert. Die Implementierung umfasst 280 Zeilen Python-Code mit Gradio als UI-Framework und Mistral Small 2506 (32K Kontext) als Backend-LLM.
Ein kritischer Erfolgsfaktor war pymupdf4llm, das PDF-Inhalte direkt in LLM-freundliches Markdown konvertiert. Zusätzlich extrahiert das Tool explizit strukturelle Elemente wie Überschriften, Tabellen und Bildunterschriften mit Tags, was die Identifikation zentraler Inhalte erheblich verbessert.
Entwicklungsprozess und Iterationen#
Die Entwicklung erfolgte über mehrere Wochen verteilt in 5-6 Stunden Gesamtzeit. Bemerkenswert war die kurze Spezifikationsphase von nur 30 Minuten, gefolgt von iterativer Ko-Entwicklung mit verschiedenen LLMs. Die Architektur benötigte 4-5 Hauptiterationen, primär zur Optimierung der Chunking-Strategie.
Die Vermeidung von Overengineering gelang durch inkrementelles Feature-Adding: Jede Funktion wurde separat hinzugefügt, anstatt eine komplexe Gesamtarchitektur vorab zu spezifizieren.
Zentrale methodische Erkenntnisse#
Architektur-Ownership blieb menschlich: Die Architekturvorschläge der LLMs waren nicht gut nutzbar. Coding funktionierte in diesem Projekt mit LLMs gut in kleinen, eng umrissenen Schritten, während strategische Architekturentscheidungen menschliche Expertise erforderten.
Prompt-Engineering für Produktionsumgebungen: Zwei Techniken erwiesen sich als besonders wirksam:
Großschreibung in Prompts verstärkte kritische Anweisungen signifikant, insbesondere bei ungünstigem Prompt-zu-Content-Verhältnis.
Explizite Prompts für Zusatzanweisungen mit doppelten Verstärkungen: “Wenn nicht genügend Informationen vorliegen und nichts dazu beschrieben werden kann, schreibe auch nichts und füge nichts hinzu.”
Die Chunking-Strategie: Die zweistufige Zusammenfassung (Chunk → Meta) funktionierte überraschend gut, trotz ihrer Einfachheit. Die Chunk-Größe erwies sich als kritischer Parameter: Eine Reduktion verbesserte die Qualität, erhöhte aber die Verarbeitungszeit (teilweise mehrere Minuten für große Dokumente).
Eine zentrale Erkenntnis: Ein wichtiger Workflow-Change war die Beobachtung, dass mehr Zeit in Vorab-Spezifikation und Architektur-Festlegung investiert wurde, nachdem sich gezeigt hatte, dass das Überlassen dieser Entscheidungen an den iterativen Prozess weniger effektiv war.
Möglichkeiten und praktische Nutzung#
Das Tool wird im VPN einige hundert Mal täglich genutzt. Die Rückmeldungen sind positiv, aber nicht exzellent. Herausforderungen zeigen sich bei:
- Grafisch komplexen PDFs, bei denen Text-Extraktion an ihre Grenzen stößt
- Der Balance zwischen Qualität (kleinere Chunks) und Performance (längere Verarbeitungszeit)
- Den fundamentalen LLM-Limitierungen: Kontextbeschränkungen, gelegentliche Halluzinationen, unzureichendes Prompt-Following
Die überraschende Einfachheit#
Was am meisten überrascht: Ein so kompakter Code (280 Zeilen, 10 Funktionen, 7 Kern-Bibliotheken) generiert hochwertige und hilfreiche Zusammenfassungen mit sechs verschiedenen Analysemodi, von Kurzversion bis kritischer Reflexion. Die Lösung ist weit einfacher als initial erwartet, aber funktional ausreichend für intensive produktive Nutzung.
Historische Einordnung und Serienkontext#
Dieses Tool entstand vor über einem Jahr als erstes systematisches LLM-Coding-Experiment. Seitdem haben sich alle beteiligten Technologien erheblich weiterentwickelt: LLMs mit größeren Kontexten, bessere Bibliotheken, ausgefeiltere Prompt-Engineering-Techniken. Die hier dokumentierten Erkenntnisse sind daher im historischen Kontext zu verstehen.
Im Rahmen dieser Artikelserie markiert dieses Projekt jedoch den wichtigen Startpunkt: Von hier aus entwickelte sich der Weg zu immer komplexeren Programmen und verfeinerten Methoden. Die fundamentalen Prinzipien – Architektur-Ownership, Einfachheit, inkrementelles Vorgehen – blieben auch bei späteren, komplexeren Projekten relevant.
Beobachtungen zum Vorgehen#
Dieses Experiment zeigt, dass LLM-gestütztes Coding in klar definierten Kontexten hocheffizient sein kann. Im konkreten Fall haben sich folgende Aspekte als hilfreich erwiesen:
- Die eigene Planung der Architektur und der Einsatz von LLMs für eng umrissene Implementierungsschritte
- Die Wahl von Bibliotheken, die bereits LLM-Integration berücksichtigen (wie pymupdf4llm)
- Das Verständnis von Prompt-Engineering als kritischen Teil der Systemarchitektur
- Die Priorisierung von Einfachheit über vorzeitige Optimierung
Eine zentrale Beobachtung aus diesem ersten Experiment: LLM-Coding ermöglichte die schnelle Entwicklung eines praktisch nutzbaren Tools, wobei die Verantwortung für strategische technische Entscheidungen beim Menschen blieb und iterativ in kleinen Schritten gearbeitet wurde. Diese Grundprinzipien bildeten das Fundament für alle nachfolgenden, komplexeren Projekte der Serie. Weitere Experimente werden zeigen, ob diese Beobachtungen auf andere Kontexte übertragbar sind.
Teil 1 der Serie “Methodische Erkenntnisse aus LLM-Coding-Experimenten” – Dokumentation einer Lernreise von einfachen Tools zu komplexen Programmen. Dieses erste Experiment entstand vor fast einem Jahr; seitdem haben sich die Technologien erheblich weiterentwickelt, aber die methodischen Grundprinzipien bleiben relevant.