RAG auf Basis der Rechtsprechung Légifrance
Für ein RAG-System zur Rechtsprechung laden Sie die offenen XML-Archive der DILA herunter (CASS für die im Bulletin de la Cour de cassation veröffentlichten Urteile, INCA für die dort nicht veröffentlichten Urteile), teilen Sie jedes Urteil nach seinen Abschnitten auf, indexieren Sie es mit BGE-M3 in Qdrant und lassen Sie die Nummer des Kassationsverfahrens und die ECLI angeben. Die Bestandsarchive umfassen komprimiert einige hundert MB, keine Dutzende von GB.
Die französische Rechtsprechung wird als offene Daten veröffentlicht, doch die Datensätze haben einen genau abgegrenzten Umfang, eine besondere XML-Struktur und Fallstricke, die allgemeine Tutorials außer Acht lassen. Dieser Leitfaden zeigt den Aufbau einer lokalen semantischen Suchmaschine für diese Gerichtsentscheidungen: Herunterladen, Lesen des XML, Aufteilen nach Abschnitten, Indexieren, gefilterte Suche sowie Grenzen, auf die die Nutzer hingewiesen werden müssen.
#Was ein juristisches RAG ist und was man von ihm erwartet
Ein juristisches RAG-System ist eine semantische Suchmaschine für Gerichtsentscheidungen, gekoppelt mit einem Modell, das anhand der gefundenen Passagen eine Antwort verfasst. Die Suche wandelt die Frage in einen Vektor um und findet die ähnlichsten Auszüge in einer Entscheidungsdatenbank. Anschließend fasst das Modell sie unter Angabe ihrer Fundstellen zusammen. Der Vorteil gegenüber einem Modell allein ist im Rechtsbereich entscheidend: Das Modell antwortet nicht aus dem Gedächtnis, sondern auf Grundlage von Texten, die Sie nachlesen können, mit Angaben zum Gericht, zum Datum, zur Nummer des Kassationsverfahrens und zur ECLI-Kennung.
Dieser Leitfaden zeigt, wie sich diese Suchmaschine mit den von der Direction de l'information légale et administrative (DILA) veröffentlichten offenen Daten auf einem lokalen Rechner aufbauen lässt: Keine Frage eines Juristen wird an einen externen Dienst gesendet. Der Anwendungsfall ist eine Frage wie „Beendigung eines befristeten Arbeitsvertrags (CDD): Welche aktuellen Entscheidungen der Cour de cassation gibt es dazu?“, auf die eine Liste von Textpassagen mit Quellenangaben zurückgegeben wird. Das System gibt keine rechtliche Einschätzung ab: Es findet und zitiert; die juristische Einordnung obliegt der Fachperson.
#Offizielle Datensätze: was sie tatsächlich enthalten
Ihre Dokumente, Ihre KI: ein zuverlässiges lokales RAG für Ihre PDFs, Notizen und E-Mails – ohne Daten in die Cloud zu senden.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
Die DILA veröffentlicht die Entscheidungen in getrennten Datenbanken, die jeweils einen eigenen Abdeckungsbereich haben. Ein wichtiger, oft missverstandener Punkt: Diese Datenbanken enthalten nicht alle in Frankreich ergangenen Entscheidungen. Der unter dem Namen CASS veröffentlichte Bestand des französischen Kassationsgerichtshofs umfasst die im Bulletin veröffentlichten Urteile, die Urteile der Zivilkammern seit 1960 und der Strafkammer seit 1963, mit von Richtern verfassten Schlagworten und Zusammenfassungen. Die nicht im Bulletin veröffentlichten Urteile befinden sich in einer separaten Datenbank namens INCA, die seit 1989 bereitgestellt wird.
| Base | Inhalt | Archiv des Gesamtbestands (komprimiert) |
|---|---|---|
| CASS | Im Bulletin veröffentlichte Entscheidungen der Cour de cassation (Zivilsachen seit 1960, Strafsachen seit 1963) | etwa 248 MB |
| INCA | Nicht im Bulletin veröffentlichte Urteile des französischen Kassationsgerichtshofs seit 1989 | etwa 655 MB |
| CAPP | Auswahl zivil- und strafrechtlicher Entscheidungen der Berufungsgerichte und der Gerichte erster Instanz | etwa 279 MB |
| JADE | Conseil d'État, Verwaltungsberufungsgerichte, Tribunal des conflits (Auswahl je nach Gericht) | etwa 1,2 GB |
Die oben genannten Größen entsprechen den Gesamtarchiven, die bei der Abfrage am 30. September 2026 auf dem DILA-Server aufgeführt waren: einige Hundert Megabyte komprimiert pro Datenbank, weit entfernt von den mehreren Zehn Gigabyte, die manchmal genannt werden. Das entpackte Datenvolumen ist größer, da jede Entscheidung eine kleine XML-Datei ist, aber ein gewöhnlicher Rechner reicht aus. Messen Sie den Platzbedarf auf Ihrem Datenträger, bevor Sie planen.
Es gibt einen zweiten Weg: die Judilibre-API, die von der Cour de cassation bereitgestellt wird, um der Öffentlichkeit kostenlos eine offene Datenbank zugänglich zu machen. Diese wird mit öffentlich ergangenen Entscheidungen gespeist, die gegebenenfalls angereichert und pseudonymisiert sind. Der Zugriff erfolgt über eine Programmierschnittstelle mit Authentifizierung, während die Archive der DILA einfache Dateien zum Herunterladen sind. Für ein lokales RAG sind die Archive der einfachste Ausgangspunkt; Judilibre wird interessant, wenn Sie einen umfassenderen und aktuelleren Bestand wünschen.
#Den Datenbestand herunterladen: zuerst den Gesamtbestand, dann die Aktualisierungen
Jede Datenbank folgt auf dem Server der DILA demselben Schema: ein Archiv mit dem Gesamtbestand, dessen Name mit Freemium beginnt und mit global endet, gefolgt von inkrementellen Archiven mit den Neuerungen. Zum Zeitpunkt der Abfrage stammte das Gesamtbestandsarchiv der Cour de cassation vom 13. Juli 2025; wöchentliche Archive ergänzten es bis Ende September 2026. Daher muss zunächst der Gesamtbestand heruntergeladen werden; anschließend müssen alle späteren inkrementellen Archive in chronologischer Reihenfolge angewendet werden.
Der Name des Archivs mit dem vollständigen Datenbestand ändert sich, wenn die DILA es neu erstellt: Prüfen Sie die Dateiliste des Verzeichnisses erneut, bevor Sie einen Namen fest im Code hinterlegen. Vermeiden Sie außerdem, das Verzeichnis immer wieder herunterzuladen: Ein einziges Archiv mit dem vollständigen Datenbestand und die inkrementellen Aktualisierungen reichen aus, und eine rekursive Spiegelung belastet den öffentlichen Server unnötig.
#Das DILA-XML lesen, ohne das falsche Feld zu wählen
Das Format ist eine Familie von Dokumenttypdefinitionen, die mehreren Datenbanken gemeinsam sind und von der DILA unter dem Namen DTD Légifrance veröffentlicht werden. In einem Wochenarchiv vom September 2026 ist ein Urteil des französischen Kassationsgerichtshofs wie folgt aufgebaut: ein Block mit allgemeinen Metadaten (Kennung, Art), ein Block mit juristischen Metadaten (Titel, Entscheidungsdatum, Gericht, Entscheidungsausgang) und ein für die ordentliche Gerichtsbarkeit spezifischer Block (Aktenzeichen, Spruchkörper, ECLI, Kennzeichnung der Veröffentlichung im Bulletin). Der Volltext befindet sich im Textblock unter dem Inhaltselement, wobei Zeilenumbrüche als br-Tags codiert sind.
In Tutorials begegnen einem zwei Fallstricke. Erstens enthält das Feld NUMERO im juristischen Block eine interne Nummer; die Nummer des Kassationsverfahrens, die Juristen zitieren, steht im spezifischen Block unter NUMEROS_AFFAIRES. Zweitens vermischt das Auslesen des gesamten Dateitextes mit itertext die Metadaten mit dem eigentlichen Urteilstext und verunreinigt die Vektoren: Es muss gezielt das Inhaltselement ausgelesen werden.
#Nach der Struktur der Gerichtsentscheidung aufteilen, nicht nach der Anzahl der Tokens
Eine neuere Entscheidung der Cour de cassation folgt einem erkennbaren Aufbau. In den untersuchten Urteilen finden sich die Überschriften „Faits et procédure“, „Examen des moyens“, dann für jeden Rügegrund „Énoncé du moyen“ und „Réponse de la Cour“ und schließlich der mit „PAR CES MOTIFS“ eingeleitete Urteilstenor. Eine Aufteilung alle 700 Tokens trennt die dem Gericht gestellte Frage von seiner Antwort und erzeugt mehrdeutige Auszüge. Teilen Sie zunächst anhand dieser Überschriften auf und unterteilen Sie anschließend nur die zu langen Blöcke.
Eine zweite Verbesserung, die wenig kostet und viel bringt: Stellen Sie jedem Auszug seine Kopfzeile (Titel der Entscheidung und ECLI) voran. Ein isolierter Auszug wie „Das Berufungsgericht hat die Beweislast umgekehrt“ verrät weder, von welchem Gericht er stammt, noch, von welchem Datum. Mit der Kopfzeile verfügen sowohl das Embedding-Modell als auch der Generator über den Kontext. Greifen Sie bei älteren Entscheidungen mit abweichender Struktur auf eine Aufteilung in überlappende Absätze zurück.
#Indexieren mit BGE-M3 und Qdrant
BGE-M3 ist ein mehrsprachiges Embedding-Modell, das laut seiner offiziellen Modellbeschreibung Vektoren mit 1.024 Dimensionen erzeugt und Eingaben mit bis zu 8.192 Tokens akzeptiert. Es verarbeitet juristisches Französisch in gängigen Anwendungsfällen ordentlich; prüfen Sie seine Leistung dennoch anhand Ihrer eigenen Fragen. Qdrant eignet sich zum Speichern der Vektoren zusammen mit ihren Metadaten. Sein Python-Client bietet einen lokalen Modus ohne Server, doch laut Dokumentation ist dieser für Entwicklung, Prototyping und Tests vorgesehen: Für mehrere Hunderttausend Textauszüge starten Sie den Server (zum Beispiel mit Docker).
Das gängige Tutorial-Beispiel enthält einen unbemerkten Fehler: Wird der Index der Entscheidung als Kennung eines Punktes verwendet, werden alle Textauszüge derselben Entscheidung bis auf den letzten überschrieben. Jeder Textauszug braucht eine eindeutige Kennung. Ein weiteres Detail: Um nach Datum zu filtern, speichern Sie in den Metadaten eine ganze Zahl im Format JJJJMMTT. Damit lässt sich nach einem Datumsintervall filtern.
#Mit Filtern abfragen und die Ergebnisse lesen
Die Suche kodiert die Frage mit demselben Modell und fragt bei Qdrant die ähnlichsten Textauszüge ab, gegebenenfalls durch einen Filter eingeschränkt. Filter nach Spruchkörper, Entscheidungsergebnis oder Datum sind ein echter Vorteil gegenüber einer klassischen Volltextsuche: „Sozialkammer, seit 2023“ wird in zwei Bedingungen für die Metadaten übersetzt, nicht in ein zusätzliches Wort in der Suchanfrage.
#Warum eine rein semantische Suche im Recht nicht ausreicht
Ein Jurist sucht häufig nach exakten Angaben: dem Aktenzeichen eines Kassationsverfahrens, einer Artikelnummer oder einer feststehenden Wendung. Über semantische Ähnlichkeit lassen sich diese schlecht finden, da zwei zahlenmäßig nahe beieinanderliegende Nummern keinen Bedeutungszusammenhang haben. Die Autoren von BGE-M3 empfehlen übrigens in der Modellbeschreibung folgende Pipeline für RAG: hybride Suche, anschließend Reranking. Ergänzen Sie daher die Vektorsuche um eine lexikalische Suche wie BM25, führen Sie die beiden Listen zusammen und lassen Sie die besten Kandidaten anschließend von einem Reranking-Modell neu ordnen.
Bei einem juristischen Dokumentenbestand ist diese Ergänzung nach einer guten Aufteilung in Textabschnitte die wichtigste Verbesserung. Die Leitfäden zur hybriden Suche und zum Reranking erläutern die Umsetzung im Detail; dieser Leitfaden beschränkt sich auf das, was für die Rechtsprechung spezifisch ist.
#Generierung, Aktualisierung und Kontrolle von Zitaten
Übergeben Sie dem Modell für die Generierung die fünf bis acht besten Auszüge mit ihren Referenzen und schreiben Sie vor, dass es ausschließlich auf deren Grundlage antwortet. Ein Modell mit 9 Milliarden Parametern wie Qwen 3.5 9B (6,6 GB in der Ollama-Bibliothek) reicht aus, um Auszüge zusammenzufassen; Mistral Small 24B (14 GB) benötigt 16 GB Videospeicher. Der Prompt muss verlangen, dass für jede Aussage das Aktenzeichen des Kassationsverfahrens (numéro de pourvoi) und der ECLI angegeben werden und dass die Antwort „Keine Entscheidung gefunden“ lautet, wenn die Auszüge die Frage nicht beantworten.
Für Updates veröffentlicht die DILA inkrementelle Archive, den eingesehenen Listen zufolge für CASS und INCA etwa wöchentlich. Ein geplanter Prozess muss die fehlenden Archive herunterladen, analysieren und die Auszüge hinzufügen, wobei stabile Kennungen Duplikate verhindern sollen. Überprüfen Sie abschließend programmgesteuert, ob jede in der Antwort zitierte Referenz in den bereitgestellten Auszügen enthalten ist: Das ist dieselbe Prüflogik wie im Leitfaden zur Vertragsanalyse.
#Grenzen, auf die Nutzer hingewiesen werden sollten
- Teilweise Abdeckung
- CASS enthält nur die im Bulletin veröffentlichten Urteile, INCA die dort nicht veröffentlichten und CAPP eine Auswahl von Entscheidungen der Berufungsgerichte: Dass eine Entscheidung in der Datenbank fehlt, beweist nicht, dass sie nicht existiert.
- Noch nicht aufgenommene oder zu neue Gerichtsentscheidungen
- Eine sehr aktuelle Entscheidung ist möglicherweise noch nicht im neuesten inkrementellen Archiv enthalten. Gleichen Sie die Angaben bei einem sensiblen Fall mit Légifrance ab.
- Entwicklung des Rechts
- Ein älteres Urteil kann durch eine Änderung der Rechtsprechung oder eine Reform überholt sein. Das System findet Text, bewertet aber nicht, welches rechtliche Gewicht eine darin vertretene Lösung heute noch hat.
- Pseudonymisierung
- Die Namen sind verdeckt. Suchen Sie niemals nach der Identität der Beteiligten.
- Keine Rechtsberatung
- Das Tool hilft beim Finden und Zitieren. Die rechtliche Einordnung der Tatsachen, die Anwendung auf den konkreten Fall und die Beratung bleiben Aufgabe der Fachperson.
- Einen Vertrag ohne Datenleck analysieren
- Hybride Suche: BM25 und Vektoren
- Einen Reranker in die Pipeline integrieren
- Dokumente aufteilen – Strategien
- BGE-M3: Embeddings für Französisch
- Qdrant: Die Vektordatenbank für ein lokales RAG
- Quelle: Datensatz CASS auf data.gouv.fr
- Quelle: Archiv der CASS auf dem Server der DILA
- Quelle: API Judilibre auf data.gouv.fr
- Quelle: Modellbeschreibung BGE-M3
- Quelle: Python-Client von Qdrant
Was ist ein juristisches RAG-System?+
Wo finden Sie die Rechtsprechung der Cour de cassation als offene Daten?+
Ist der Bestand vollständig?+
Welches Embedding-Modell sollten Sie für juristisches Französisch wählen?+
Ist eine GPU zum Indexieren der Gerichtsentscheidungen erforderlich?+
Können diese Entscheidungen in einem kommerziellen Produkt verwendet werden?+
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.