RAG sobre jurisprudência Légifrance
Para um RAG sobre jurisprudência, baixe os arquivos XML abertos da DILA (CASS para os acórdãos publicados no Boletim da Corte de Cassação, INCA para os não publicados), divida cada acórdão conforme suas seções, indexe com BGE-M3 no Qdrant e exija a citação do recurso de cassação e do ECLI. Os arquivos do acervo completo ocupam algumas centenas de MB quando compactados, não dezenas de GB.
A jurisprudência francesa é publicada em dados abertos, mas seus conjuntos de dados têm um escopo específico, uma estrutura XML particular e armadilhas que os tutoriais genéricos ignoram. Este guia constrói um motor de busca semântico local com base nessas decisões: download, leitura do XML, divisão por seções, indexação, busca filtrada e limitações a serem apresentadas aos usuários.
#O que é um RAG jurídico e o que se pede a ele
Um RAG jurídico é um mecanismo de busca semântica em decisões judiciais, combinado a um modelo que redige uma resposta com base nos trechos encontrados. A busca transforma a pergunta em um vetor, encontra os trechos mais próximos em uma base de decisões e, em seguida, o modelo os sintetiza citando suas referências. A vantagem em relação a um modelo isolado é decisiva no direito: o modelo não responde de memória, mas com base em textos que você pode reler, com órgão jurisdicional, data, número do recurso de cassação e identificador ECLI.
Este guia constrói esse mecanismo com dados abertos publicados pela Direção da Informação Legal e Administrativa (DILA), em uma máquina local: nenhuma pergunta de um profissional do direito é enviada a um serviço externo. O caso de uso é uma pergunta como “rescisão de um CDD: quais são as decisões recentes da Corte de Cassação?”, com uma lista de trechos acompanhados de suas fontes como resposta. O sistema não emite um parecer: ele localiza e cita, e cabe ao profissional fazer a qualificação jurídica.
#Conjuntos de dados oficiais: o que eles realmente contêm
Seus documentos, sua IA: um RAG local confiável para seus PDFs, notas e e-mails — sem enviar nada para a nuvem.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
A DILA disponibiliza as decisões em bases distintas, cada uma com seu escopo. Um ponto importante, frequentemente mal compreendido: essas bases não contêm todas as decisões proferidas na França. O acervo da Corte de Cassação publicado sob o nome CASS reúne os acórdãos publicados no Boletim, os das câmaras civis desde 1960 e os da câmara criminal desde 1963, com títulos e resumos redigidos pelos magistrados. Os acórdãos inéditos, não publicados no Boletim, estão em uma base separada, INCA, disponibilizada desde 1989.
| Base | Conteúdo | Arquivo completo de dados (compactado) |
|---|---|---|
| CASS | Decisões da Corte de Cassação publicadas no Boletim (civis desde 1960, criminais desde 1963) | cerca de 248 MB |
| INCA | Decisões inéditas da Corte de Cassação, não publicadas no Boletim, desde 1989 | cerca de 655 MB |
| CAPP | Seleção de decisões civis e penais dos tribunais de apelação e dos órgãos jurisdicionais de primeira instância | aproximadamente 279 MB |
| JADE | Conselho de Estado, tribunais administrativos de apelação, Tribunal dos Conflitos (seleção conforme a jurisdição) | cerca de 1,2 GB |
Os tamanhos acima são os dos arquivos compactados completos listados no servidor da DILA na consulta de 30 de setembro de 2026: algumas centenas de megabytes compactados por base, muito longe das dezenas de gigabytes às vezes citadas. O volume descompactado é maior, pois cada decisão é um pequeno arquivo XML, mas um computador padrão é suficiente. Meça esse volume no seu disco antes de planejar.
Existe uma segunda opção: a API Judilibre, implementada pela Corte de Cassação para disponibilizar gratuitamente ao público uma base aberta alimentada por decisões proferidas publicamente, eventualmente enriquecidas e pseudonimizadas. O acesso é feito por uma interface de programação com autenticação, enquanto os arquivos da DILA são simples arquivos para download. Para um RAG local, os arquivos são o ponto de partida mais simples; Judilibre se torna pertinente quando você quer um acervo mais completo e atualizado.
#Baixar o acervo: primeiro a base completa, depois as atualizações
Cada base segue o mesmo esquema no servidor da DILA: um arquivo com a base completa, cujo nome começa com Freemium e termina com global, seguido de arquivos incrementais que trazem as novidades. Na data da consulta, o arquivo com a base completa da Corte de Cassação datava de 13 de julho de 2025, e arquivos semanais o complementavam até o fim de setembro de 2026. Portanto, é necessário baixar a base completa e depois aplicar todos os arquivos incrementais posteriores, em ordem.
O nome do arquivo compactado com a base completa muda quando a DILA o gera novamente: confira a lista da pasta antes de fixar um nome no código. Evite também baixar a pasta repetidamente: um único arquivo compactado com a base completa e as atualizações incrementais são suficientes, e um espelhamento recursivo sobrecarrega desnecessariamente o servidor público.
#Ler o XML DILA sem confundir os campos
O formato é uma família de definições de tipos de documentos comuns a várias bases, publicada pela DILA sob o nome DTD Légifrance. Em um arquivo semanal de setembro de 2026, a estrutura de um acórdão da Corte de Cassação é a seguinte: um bloco de metadados comuns (identificador, natureza), um bloco de metadados jurídicos (título, data da decisão, jurisdição, resultado) e um bloco específico da justiça judicial (número do processo, composição do órgão julgador, ECLI, indicador de publicação no Boletim). O texto integral está no bloco textual, dentro do elemento de conteúdo, com quebras de linha codificadas em tags br.
Duas armadilhas são comuns nos tutoriais. Primeiro, o campo NUMERO do bloco jurídico é um número interno; o número do recurso de cassação, aquele que os juristas citam, está no bloco específico em NUMEROS_AFFAIRES. Segundo, recuperar todo o texto do arquivo com itertext mistura os metadados com o corpo do acórdão e polui os vetores: é necessário selecionar o elemento de conteúdo.
#Dividir pela estrutura da decisão, não pelo número de tokens
Uma decisão recente da Corte de Cassação segue uma estrutura reconhecível. Nos acórdãos analisados, encontram-se os títulos “Faits et procédure”, “Examen des moyens”, depois, para cada argumento, “Énoncé du moyen” e “Réponse de la Cour” e, por fim, o dispositivo introduzido por “PAR CES MOTIFS”. Dividir o texto a cada 700 tokens separa a pergunta apresentada à Corte de sua resposta e produz trechos ambíguos. Divida primeiro de acordo com esses títulos e depois subdivida apenas os blocos longos demais.
Segunda melhoria, que custa pouco e rende muito: coloque o cabeçalho (título da decisão e ECLI) no início de cada trecho. Um trecho isolado do tipo "o tribunal de apelação inverteu o ônus da prova" não informa de qual jurisdição nem de que data provém. Com o cabeçalho, tanto o modelo de embedding quanto o gerador dispõem do contexto. Para decisões mais antigas, cuja estrutura difere, recorra à divisão em parágrafos com sobreposição.
#Indexar com BGE-M3 e Qdrant
O BGE-M3 é um modelo de embedding multilíngue que gera vetores de 1.024 dimensões e aceita entradas de até 8.192 tokens, de acordo com sua ficha oficial. Ele lida corretamente com o francês jurídico nos usos comuns; ainda assim, avalie seu desempenho com suas perguntas. O Qdrant é adequado para armazenar os vetores com seus metadados. Seu cliente Python oferece um modo local sem servidor, mas a documentação o destina ao desenvolvimento, à prototipagem e aos testes: para várias centenas de milhares de trechos, inicie o servidor (por exemplo, com Docker).
O exemplo comum em tutoriais contém um erro silencioso: usar o índice da decisão como identificador de um ponto sobrescreve todos os trechos de uma mesma decisão, exceto o último. É necessário um identificador único por trecho. Outro detalhe: para filtrar por data, armazene um inteiro no formato AAAAMMDD nos metadados, o que permite filtrar por intervalo.
#Consultar com filtros e ler os resultados
A busca codifica a pergunta com o mesmo modelo e solicita ao Qdrant os trechos mais próximos, eventualmente restringidos por um filtro. Os filtros por composição do órgão julgador, resultado da decisão ou data são uma verdadeira vantagem em relação a uma busca tradicional de texto completo: “câmara social, desde 2023” se traduz em duas condições sobre os metadados, e não em uma palavra a mais na consulta.
#Por que a pesquisa semântica sozinha não é suficiente no direito
Um jurista costuma procurar elementos exatos: um número de recurso de cassação, um número de artigo, uma expressão consagrada. A similaridade semântica não os encontra bem, pois dois números próximos não têm nenhuma relação de sentido. Os autores do BGE-M3 também recomendam, na ficha do modelo, o seguinte pipeline para o RAG: busca híbrida seguida de reclassificação. Portanto, adicione uma busca lexical do tipo BM25 em paralelo aos vetores, combine as duas listas e depois passe os melhores candidatos por um modelo de reclassificação.
Em um acervo jurídico, esse acréscimo é a melhoria que mais importa depois de uma boa divisão em trechos. Os guias sobre busca híbrida e reranqueamento detalham a implementação; este guia se limita ao que é específico da jurisprudência.
#Geração, atualizações e controle de citações
Para a geração, envie ao modelo os cinco a oito melhores trechos com suas referências e exija que ele responda apenas com base nesses trechos. Um modelo de 9 bilhões de parâmetros, como Qwen 3.5 9B (6,6 GB na biblioteca Ollama), é suficiente para resumir trechos; Mistral Small 24B (14 GB) exige 16 GB de memória de vídeo. O prompt deve exigir que o modelo cite, para cada afirmação, o número do recurso de cassação e o ECLI, e responda “nenhuma decisão encontrada” quando os trechos não responderem à pergunta.
Quanto às atualizações, a DILA publica arquivos incrementais, aproximadamente uma vez por semana para CASS e INCA, conforme as listas consultadas. Um processo agendado deve baixar os que faltam, analisá-los e adicionar os trechos, com identificadores estáveis para evitar duplicações. Por fim, verifique por meio de um programa se cada referência citada na resposta está presente nos trechos fornecidos: é a mesma lógica de controle do guia sobre a análise de contratos.
#Limites a serem exibidos aos usuários
- Cobertura parcial
- CASS contém apenas os acórdãos publicados no Boletim, INCA os não publicados, CAPP uma seleção de decisões dos tribunais de apelação: a ausência de uma decisão na base não prova que ela não exista.
- Decisões ainda não incorporadas à base ou muito recentes
- Uma decisão muito recente pode ainda não estar no arquivo incremental mais recente. Confira também no Légifrance se o caso for sensível.
- Evolução do direito
- Um acórdão antigo pode ter sido superado por uma mudança de entendimento jurisprudencial ou uma reforma. O sistema recupera texto, mas não avalia a autoridade atual de uma solução jurídica.
- Pseudonimização
- Os nomes estão ocultos. Nunca busque descobrir a identidade das partes.
- Nenhum parecer jurídico
- A ferramenta ajuda a encontrar e citar. A qualificação dos fatos, a aplicação ao caso e a orientação jurídica continuam sendo responsabilidade do profissional.
- Analisar um contrato sem vazamento
- Busca híbrida: BM25 e vetores
- Adicionar um reranker ao seu pipeline
- Estratégias de divisão de documentos
- BGE-M3: embeddings para o francês
- Qdrant: o banco vetorial de um RAG local
- Fonte: conjunto de dados CASS no data.gouv.fr
- Fonte: arquivos CASS no servidor da DILA
- Fonte: API Judilibre no data.gouv.fr
- Fonte: ficha do modelo BGE-M3
- Fonte: cliente Python do Qdrant
O que é um RAG jurídico?+
Onde encontrar a jurisprudência da Corte de Cassação em dados abertos?+
O acervo está completo?+
Qual modelo de embedding escolher para o francês jurídico?+
É necessária uma GPU para indexar decisões?+
É possível usar essas decisões em um produto comercial?+
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.