Umsetzung
Die Implementierung erfolgte als Streamlit-Webanwendung mit modularem Aufbau:
Dokumentenverarbeitung: Zunächst wurde ein spezialisierter PDF-Prozessor entwickelt, der mit der Docling-Bibliothek arbeitet. Diese erkennt automatisch die Struktur juristischer Dokumente und extrahiert Paragraphen (§), Artikel, Absätze und andere rechtliche Referenzen. Das System verwendet einen hybriden Chunking-Ansatz, der Dokumente in 512-Token-Segmente unterteilt, dabei aber semantische Grenzen respektiert. Es können verschiedene Chunking-Strategien weiter erprobt werden.
BMF-Scraper: Ein automatisierter Scraper wurde implementiert, der die Website des Bundesfinanzministeriums durchsucht und neue BMF-Schreiben herunterlädt. Der Scraper implementiert intelligente Retry-Mechanismen bei Netzwerkfehlern. Die heruntergeladenen Dokumente werden automatisch mit Metadaten wie Veröffentlichungsdatum versehen.
Vektorstore und Retrieval: Für die effiziente Suche werden alle Dokumente in einem ChromaDB-Vektorstore gespeichert. Dabei wird das Embedding-Modell "sentence-transformers/all-MiniLM-L6-v2" verwendet. Die Retrieval-Komponente nutzt Maximum Marginal Relevance (MMR), um diverse und relevante Ergebnisse zu liefern.
LLM-Integration: Das System unterstützt sowohl lokale Modelle über Ollama als auch Cloud-basierte Modelle via OpenAI API. Ein spezialisiertes Prompt-Template stellt sicher, dass Antworten präzise Quellenangaben mit Paragraphen und Seitenzahlen enthalten.
Benutzeroberfläche: Die intuitive Streamlit-Oberfläche ermöglicht:
-
Upload einzelner PDFs oder ganzer Archive (ZIP/RAR)
-
Verwaltung mehrerer Dokumentensammlungen
-
Parallele Analyse verschiedener Rechtstexte
-
Export der Analyseergebnisse
Persistenz und Caching: Verarbeitete Dokumente werden lokal gespeichert, um Neuverarbeitungen zu vermeiden. Ein intelligentes Caching-System reduziert Latenzzeiten bei wiederholten Anfragen.
Die Software wurde iterativ mit Feedback von KMU-Vertretern entwickelt und getestet. Besonderer Wert wurde auf die Verständlichkeit der Antworten und die Präzision der Quellenangaben gelegt.
Tests mit realen BMF-Schreiben und Gesetzestexten zeigten, dass das System komplexe juristische Zusammenhänge korrekt erfasst und in allgemeinverständlicher Sprache wiedergeben kann. Die automatische Extraktion von Paragraphenverweisen erreicht eine Genauigkeit von über 95%.
Technische Herausforderungen
Eine zentrale technische Herausforderung bei der Entwicklung des Lawcheckers war die Implementierung einer präzisen Chunking-Strategie für juristische Texte. Rechtsdokumente folgen einer hochgradig hierarchischen Struktur mit Büchern, Teilen, Kapiteln, Abschnitten, Paragraphen, Absätzen, Sätzen und Nummern. Diese Struktur muss beim Zerteilen der Dokumente erhalten bleiben, da juristische Verweise oft auf spezifische Hierarchieebenen zeigen.
Herkömmliche Chunking-Methoden, die rein nach Zeichenanzahl oder Tokens trennen, zerstören diese semantischen Zusammenhänge. Ein Paragraph könnte mitten im Satz getrennt werden, oder zusammengehörige Absätze würden auseinandergerissen. Dies führt zu unvollständigen oder missverständlichen Antworten bei der KI-gestützten Analyse.
Die Lösung liegt in der Implementierung eines hybriden Chunking-Ansatzes mit Docling. Dieser nutzt recursive Chunking-Strategien, die die Dokumenthierarchie respektieren. Der Algorithmus identifiziert zunächst die rechtlichen Strukturelemente über Regular Expressions (z.B. "§\s*\d+[a-z]?" für Paragraphen) und nutzt diese als natürliche Trennpunkte. Innerhalb dieser Grenzen wird dann nach semantischer Kohärenz optimiert. Falls ein Paragraph zu lang für einen einzelnen Chunk ist, erfolgt die Teilung bevorzugt an Absatzgrenzen, dann an Satznummern und erst als letzte Option mitten im Text.
Besonders komplex ist die Behandlung von Querverweisen. Ein Verweis wie "gemäß § 12 Abs. 3 Satz 2 i.V.m. § 15" muss im selben Chunk bleiben wie der zugehörige Kontext, um die Referenz auflösen zu können. Das System musste lernen, diese Verweisketten zu erkennen und beim Chunking zu berücksichtigen. Zusätzlich werden Metadaten wie die rechtliche Referenz, Seitenzahlen und übergeordnete Gliederungsebenen jedem Chunk beigefügt, um bei der späteren Retrieval-Phase präzise Quellenangaben zu ermöglichen.