RAG sobre la jurisprudencia Légifrance
Para un RAG sobre jurisprudencia, descarga los archivos XML abiertos de la DILA (CASS para las sentencias publicadas en el Boletín del Tribunal de Casación, INCA para las no publicadas), divide cada sentencia según sus secciones, indéxalas con BGE-M3 en Qdrant y haz que se citen el número del recurso de casación y el ECLI. Los archivos completos de cada base pesan unos cientos de MB comprimidos, no decenas de GB.
La jurisprudencia francesa se publica como datos abiertos, pero sus conjuntos de datos tienen un alcance preciso, una estructura XML particular y dificultades que los tutoriales genéricos pasan por alto. Esta guía construye un motor de búsqueda semántica local sobre estas resoluciones: descarga, lectura del XML, división por secciones, indexación, búsqueda filtrada y límites que deben mostrarse a los usuarios.
#¿Qué es un RAG jurídico y qué se le pide?
Un RAG jurídico es un motor de búsqueda semántica sobre resoluciones judiciales, combinado con un modelo que redacta una respuesta a partir de los pasajes recuperados. La búsqueda transforma la pregunta en un vector, recupera los fragmentos más cercanos en una base de resoluciones y luego el modelo los sintetiza citando sus referencias. La ventaja frente a un modelo por sí solo es decisiva en derecho: el modelo no responde de memoria, sino a partir de textos que puedes volver a leer, con el órgano jurisdiccional, la fecha, el número del recurso de casación y el identificador ECLI.
Esta guía construye este motor con los datos abiertos publicados por la Dirección de Información Legal y Administrativa (DILA), en una máquina local: ninguna pregunta de un jurista se envía a un servicio externo. El caso de uso es una pregunta como «Rescisión de un CDD: ¿qué decisiones recientes hay del Tribunal de Casación?», que devuelve una lista de pasajes con sus fuentes. El sistema no emite un dictamen: recupera y cita, y corresponde al profesional realizar la calificación jurídica.
#Conjuntos de datos oficiales: lo que realmente contienen
Tus documentos, tu IA: un RAG local fiable sobre tus PDF, notas y correos — sin enviar nada a la nube.
- Espacio en línea de por vida
- PDF + archivos
- Reembolsado 30 j
La DILA difunde las decisiones en bases separadas, cada una con su ámbito. Un punto importante, a menudo mal entendido: estas bases no contienen todas las decisiones dictadas en Francia. El fondo de la Corte de Casación publicado bajo el nombre CASS reúne las sentencias publicadas en el Boletín, las de las salas civiles desde 1960 y las de la sala penal desde 1963, con títulos y resúmenes redactados por los magistrados. Las sentencias inéditas, no publicadas en el Boletín, están en una base separada, INCA, difundida desde 1989.
| Base | Contenido | Archivo del conjunto completo de datos (comprimido) |
|---|---|---|
| CASS | Sentencias del Tribunal de Casación publicadas en el Boletín (civiles desde 1960, penales desde 1963) | aproximadamente 248 MB |
| INCA | Sentencias inéditas del Tribunal de Casación, no publicadas en el Boletín, desde 1989 | alrededor de 655 MB |
| CAPP | Selección de resoluciones civiles y penales de los tribunales de apelación y de los órganos judiciales de primera instancia | aproximadamente 279 MB |
| JADE | Consejo de Estado, tribunales administrativos de apelación, Tribunal de Conflictos (selección según la jurisdicción) | aproximadamente 1,2 GB |
Los tamaños indicados arriba corresponden a los archivos comprimidos globales que figuraban en el servidor de la DILA cuando se consultó el 30 de septiembre de 2026: unos cientos de megabytes comprimidos por base de datos, muy lejos de las decenas de gigabytes que a veces se citan. El volumen descomprimido es mayor, porque cada resolución es un pequeño archivo XML, pero basta con un equipo estándar. Mídelo en tu disco antes de planificar.
Existe una segunda vía: la API Judilibre, implementada por el Tribunal de Casación para poner a disposición del público, de forma gratuita, una base abierta alimentada por las resoluciones dictadas públicamente, que pueden estar enriquecidas y seudonimizadas. Se accede a ella a través de una interfaz de programación con autenticación, mientras que los archivos de la DILA son simples ficheros para descargar. Para un RAG local, los archivos son el punto de partida más sencillo; Judilibre resulta pertinente cuando quieres una colección más completa y actualizada.
#Descargar el corpus: datos iniciales y luego actualizaciones
Cada base sigue el mismo esquema en el servidor de la DILA: un archivo con el conjunto completo de datos, cuyo nombre empieza por Freemium y termina en global, seguido de archivos incrementales que aportan las novedades. En la fecha de consulta, el archivo con el conjunto completo de datos del Tribunal de Casación databa del 13 de julio de 2025 y los archivos semanales lo completaban hasta finales de septiembre de 2026. Por tanto, hay que descargar el archivo completo y luego aplicar todos los archivos incrementales posteriores en orden.
El nombre del archivo de datos completos cambia cuando la DILA lo regenera: revisa el listado del directorio antes de escribir un nombre fijo en el código. Evita también descargar el directorio en bucle: basta con un único archivo de datos completos y las actualizaciones incrementales, y una réplica recursiva sobrecarga innecesariamente el servidor público.
#Leer el XML DILA sin equivocarse en el campo
El formato es una familia de definiciones de tipos de documentos comunes a varias bases, publicada por la DILA con el nombre DTD Légifrance. En un archivo semanal de septiembre de 2026, la estructura de una sentencia del Tribunal de Casación es la siguiente: un bloque de metadatos comunes (identificador, naturaleza), un bloque de metadatos jurídicos (título, fecha de la decisión, órgano jurisdiccional, sentido del fallo) y un bloque específico de la justicia ordinaria (número de asunto, composición del tribunal, ECLI, indicador de publicación en el Boletín). El texto íntegro se encuentra en el bloque textual, dentro del elemento de contenido, con saltos de línea codificados mediante etiquetas br.
Hay dos errores habituales en los tutoriales. Primero, el campo NUMERO del bloque jurídico es un número interno; el número del recurso de casación, el que citan los juristas, está en el bloque específico bajo NUMEROS_AFFAIRES. Segundo, recuperar todo el texto del archivo con itertext mezcla los metadatos con el cuerpo de la sentencia y contamina los vectores: hay que seleccionar el elemento de contenido.
#Dividir según la estructura de la resolución, no por el número de tokens
Una resolución reciente del Tribunal de Casación sigue una estructura reconocible. En las sentencias examinadas, aparecen los títulos «Faits et procédure», «Examen des moyens», luego, para cada motivo, «Énoncé du moyen» y «Réponse de la Cour», y finalmente el fallo, introducido por «PAR CES MOTIFS». Dividir cada 700 tokens separa la cuestión planteada al Tribunal de su respuesta y produce fragmentos ambiguos. Divide primero según estos títulos y luego subdivide solo los bloques demasiado largos.
Segunda mejora, que cuesta poco y aporta mucho: antepón a cada extracto su encabezado (título de la resolución y ECLI). Un extracto aislado como «el tribunal de apelación invirtió la carga de la prueba» no indica de qué órgano jurisdiccional procede ni cuál es su fecha. Con el encabezado, tanto el modelo de embeddings como el generador disponen del contexto. Para las resoluciones más antiguas, cuya estructura es distinta, recurre a una segmentación por párrafos con solapamiento.
#Indexar con BGE-M3 y Qdrant
BGE-M3 es un modelo de embeddings multilingüe que produce vectores de 1 024 dimensiones y acepta entradas de hasta 8 192 tokens, según su ficha oficial. Maneja correctamente el francés jurídico en los usos habituales; aun así, evalúalo con tus propias preguntas. Qdrant es adecuado para almacenar los vectores junto con sus metadatos. Su cliente de Python ofrece un modo local sin servidor, pero su documentación lo destina al desarrollo, al prototipado y a las pruebas: para varios cientos de miles de fragmentos, inicia el servidor (por ejemplo, con Docker).
El ejemplo habitual de los tutoriales contiene un error silencioso: usar el índice de la decisión como identificador de un punto sobrescribe todos los extractos de una misma decisión excepto el último. Se necesita un identificador único por extracto. Otro detalle: para filtrar por fecha, almacena un entero en formato AAAAMMDD en los metadatos, lo que permite filtrar por intervalos.
#Hacer consultas con filtros y leer los resultados
La búsqueda codifica la pregunta con el mismo modelo y pide a Qdrant los fragmentos más cercanos, restringidos por un filtro si procede. Los filtros por composición del tribunal, sentido del fallo o fecha ofrecen una verdadera ventaja frente a una búsqueda de texto completo tradicional: «sala de lo social, desde 2023» se traduce en dos condiciones sobre los metadatos, no en una palabra más en la consulta.
#¿Por qué una búsqueda exclusivamente semántica no basta en derecho?
Un jurista suele buscar elementos exactos: un número de recurso de casación, un número de artículo, una expresión consagrada. La similitud semántica no los recupera bien, porque dos números cercanos no guardan ninguna relación de significado. De hecho, los autores de BGE-M3 recomiendan en la ficha del modelo el siguiente pipeline para el RAG: búsqueda híbrida y después reordenamiento. Añade, por tanto, una búsqueda léxica de tipo BM25 junto a los vectores, fusiona las dos listas y pasa los mejores candidatos por un modelo de reordenamiento.
En un corpus jurídico, este añadido es la mejora más importante después de una buena segmentación. Las guías sobre búsqueda híbrida y sobre reordenación de resultados detallan la implementación; esta guía se limita a lo que es específico de la jurisprudencia.
#Generación, actualizaciones y control de citas
Para la generación, envía al modelo los cinco a ocho mejores extractos con sus referencias y exige que responda solo a partir de ellos. Un modelo de 9 mil millones de parámetros como Qwen 3.5 9B (6,6 GB en la biblioteca Ollama) basta para resumir extractos; Mistral Small 24B (14 GB) requiere 16 GB de VRAM. El prompt debe exigir que se cite, para cada afirmación, el número del recurso de casación y el ECLI, y que se responda «no se ha encontrado ninguna resolución» cuando los extractos no respondan a la pregunta.
En cuanto a las actualizaciones, la DILA publica archivos incrementales, aproximadamente cada semana para CASS y INCA según las listas consultadas. Un proceso programado debe descargar los que faltan, analizarlos y añadir los extractos, con identificadores estables para evitar duplicados. Por último, verifica mediante un programa que cada referencia citada en la respuesta figure en los extractos proporcionados: es la misma lógica de control que en la guía sobre el análisis de contratos.
#Limitaciones que debes mostrar a los usuarios
- Cobertura parcial
- CASS solo incluye los fallos publicados en el Boletín, INCA los no publicados, CAPP una selección de sentencias de apelación: la ausencia de una decisión en la base no demuestra que no exista.
- Resoluciones no incorporadas o demasiado recientes
- Una resolución muy reciente puede no estar todavía en el último archivo incremental. Contrasta la información con Légifrance si se trata de un expediente delicado.
- Evolución del derecho
- Una sentencia antigua puede haber quedado superada por un cambio de jurisprudencia o una reforma. El sistema recupera texto; no evalúa la autoridad actual de una solución jurídica.
- Seudonimización
- Los nombres están ocultos. Nunca busques identificar a las partes.
- Sin asesoramiento jurídico
- La herramienta ayuda a encontrar y citar. La calificación de los hechos, su aplicación al caso y el consejo siguen siendo responsabilidad del profesional.
- Analizar un contrato sin filtraciones de datos
- Búsqueda híbrida: BM25 y vectores
- Añadir un reranker a tu pipeline
- Estrategias de división de documentos
- BGE-M3: embeddings para el francés
- Qdrant: la base vectorial de un RAG local
- Fuente: conjunto de datos CASS en data.gouv.fr
- Fuente: archivos CASS en el servidor de la DILA
- Fuente: API Judilibre en data.gouv.fr
- Fuente: ficha del modelo BGE-M3
- Fuente: cliente Python de Qdrant
¿Qué es un RAG jurídico?+
¿Dónde encontrar la jurisprudencia de la Corte de Casación en datos abiertos?+
¿Está completo el fondo documental?+
¿Qué modelo de embedding elegir para el francés jurídico?+
¿Se necesita un GPU para indexar las resoluciones judiciales?+
¿Se pueden usar estas decisiones en un producto comercial?+
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.