RAG sur contrats et politiques internes : recherche, comparaison et synthèse sourcées. Pourquoi la traçabilité (document, article, version), le versioning et les permissions sont la condition d'usage en juridique.
Les équipes juridiques croulent sous une matière dense et à fort enjeu : contrats, politiques internes, jurisprudence, clauses types, précédents. Retrouver la bonne clause dans le bon contrat, vérifier qu'une politique est à jour, comparer des engagements d'un fournisseur à l'autre — chaque tâche est chronophage et l'erreur se paie cher. C'est un terrain idéal pour le RAG… à condition de respecter une exigence non négociable dans ce domaine : la traçabilité.
Voici comment construire un assistant juridique interne qui fait gagner du temps sans jamais sacrifier la rigueur.
Le problème juridique : du volume, des enjeux, zéro droit à l'erreur
Un service juridique manipule des documents qui partagent trois caractéristiques :
- Volumineux et hétérogènes : des centaines de contrats, des politiques en plusieurs versions, des annexes, des avenants.
- À fort enjeu : une clause mal lue ou une version périmée peut engager l'entreprise.
- Exigeant la preuve : un juriste ne se contente jamais d'une réponse ; il veut la source exacte — le contrat, l'article, la version.
Un assistant qui « répond » sans citer précisément sa source est inutilisable en juridique. Pire, il est dangereux. La traçabilité n'est pas une option de confort : c'est la condition d'usage.
En juridique, une réponse sans source n'a aucune valeur. La question n'est pas « que dit l'IA ? » mais « dans quel document, à quel article, dans quelle version ? ».
Ce qu'un assistant juridique RAG sait faire
Bien conçu, il accélère des tâches très concrètes :
- Recherche dans les contrats — « Quels contrats fournisseurs contiennent une clause de non-concurrence de plus de 24 mois ? »
- Vérification de conformité — confronter une pratique à la politique interne en vigueur.
- Comparaison — mettre en regard les clauses de responsabilité de plusieurs contrats.
- Synthèse sourcée — résumer les obligations d'un contrat avec renvoi à chaque article.
- Premier niveau de réponse — répondre aux questions récurrentes des métiers (NDA, RGPD, politique d'achat) sans solliciter un juriste pour chaque cas.
L'objectif n'est pas de remplacer le juriste, mais de lui éviter la recherche fastidieuse et de désengorger les demandes simples.
À quoi ressemble une bonne réponse sourcée
La différence entre un gadget et un outil de travail tient dans le format de la réponse. Comparez.
Question d'un acheteur : « Notre contrat de prestation avec ACME nous autorise-t-il à résilier sans pénalité si le fournisseur dépasse les délais ? »
Réponse inutilisable : « Oui, vous pouvez résilier en cas de retard. » Aucun juriste n'agira sur cette base.
Réponse exploitable :
Oui, sous conditions. Le Contrat de prestation ACME, Article 9.2 « Résiliation pour manquement » (version du 2025-03-14, en vigueur), prévoit une résiliation de plein droit après une mise en demeure restée sans effet pendant 30 jours. La pénalité de sortie de l'Article 12.1 ne s'applique pas dans ce cas (elle vise la résiliation pour convenance).
Sources : ACME-MSA · Art. 9.2 · v2025-03-14 ; Art. 12.1 · v2025-03-14.
La seconde réponse cite le document, l'article, la version, et distingue deux clauses qui se contredisent en apparence. Le juriste clique, vérifie, valide en deux minutes. C'est le seul niveau de qualité acceptable.
Le découpage qui préserve la structure
Le découpage générique « 1000 tokens, 200 de chevauchement » est désastreux sur un contrat : il coupe une clause en plein milieu, sépare le titre de l'article de son contenu, et mélange la fin d'une clause de responsabilité avec le début d'une clause de confidentialité. La récupération remonte alors des fragments inexploitables, et la citation pointe vers un « morceau » sans identité.
Un contrat se découpe par unité juridique : article, section, sous-clause. La structure est l'unité de sens, pas le compteur de tokens. Concrètement, on parse la hiérarchie (Titre → Article → Paragraphe → Alinéa) et on émet un chunk par clause, en attachant des métadonnées riches :
{
"text": "Article 9.2 — Résiliation pour manquement. En cas de...",
"metadata": {
"document_id": "ACME-MSA",
"document_title": "Contrat de prestation ACME",
"doc_type": "contrat_prestation",
"article_number": "9.2",
"article_title": "Résiliation pour manquement",
"parent_section": "9. Durée et résiliation",
"version": "2025-03-14",
"effective_from": "2025-04-01",
"effective_to": null,
"status": "en_vigueur",
"counterparty": "ACME SAS",
"confidentiality": "restreint",
"owning_team": "juridique-achats"
}
}
Quelques règles qui font la différence :
- Une clause = un chunk (ou un petit groupe de chunks si la clause est très longue, avec chevauchement à l'intérieur de la clause uniquement, jamais entre deux clauses distinctes).
- Préfixer chaque chunk de son contexte — le numéro et le titre de l'article, voire la section parente, dans le texte vectorisé. C'est l'esprit du contextual retrieval : un fragment isolé « le délai est de 30 jours » ne veut rien dire ; « Article 9.2 Résiliation — le délai est de 30 jours » est récupérable et citable.
- Conserver les renvois — les contrats sont truffés de « sous réserve de l'Article 12 ». Stocker ces références en métadonnées permet d'aller chercher la clause liée au moment de répondre.
- Tableaux et annexes : les grilles tarifaires et SLA méritent un traitement à part (extraction structurée), sous peine de devenir illisibles une fois aplaties en texte.
Sur un corpus juridique, le découpage est le projet. Un bon modèle ne rattrape jamais un découpage qui détruit la structure des clauses.
La mécanique du versioning : quelle version fait foi, et quand
C'est le point le plus sous-estimé — et le plus dangereux. Une politique de télétravail existe en v1 (2023), v2 (2024) et v3 (2026). Un avenant modifie l'Article 7 d'un contrat sans toucher au reste. Servir la mauvaise version, c'est répondre faux avec aplomb.
La règle : chaque clause porte une période de validité, et la récupération est filtrée par la date pertinente.
- Chaque version d'un document (ou d'une clause amendée par avenant) porte
effective_from et effective_to. La version courante a effective_to = null.
- Par défaut, l'assistant ne récupère que les clauses en vigueur à la date du jour. La requête vectorielle est doublée d'un filtre temporel.
- Pour une question historique (« quelle était notre politique de congés en juin 2024 ? »), l'utilisateur peut fixer une date de référence ; le filtre devient « clause valide au 2024-06-01 ».
- Un avenant ne « remplace » pas le contrat : il ferme la période de l'ancienne clause (
effective_to = date de l'avenant) et ouvre une nouvelle clause. L'historique reste interrogeable, mais jamais servi par erreur comme actuel.
-- Récupération de la clause en vigueur à une date donnée
SELECT text, metadata
FROM document_chunks
WHERE document_id = 'ACME-MSA'
AND (metadata->>'effective_from')::date <= :as_of_date
AND ( metadata->>'effective_to' IS NULL
OR (metadata->>'effective_to')::date > :as_of_date )
ORDER BY embedding <=> :query_embedding -- similarité pgvector
LIMIT 10;
Le réflexe à inscrire dans le prompt système : si plusieurs versions remontent, l'assistant annonce laquelle fait foi et signale l'existence des autres (« version en vigueur depuis le 2025-04-01 ; une version antérieure existait jusqu'à cette date »). Jamais de fusion silencieuse de deux versions.
Une clause sans date de validité est une bombe à retardement. Le versioning n'est pas un raffinement : sans lui, l'assistant ment dès le premier avenant.
Le contrôle d'accès appliqué à la récupération
Tous les contrats ne sont pas lisibles par tous. Un contrat M&A confidentiel, les conditions salariales d'un dirigeant, un litige en cours : ces documents ne doivent jamais remonter dans la réponse d'un utilisateur non habilité — y compris de façon indirecte, via une synthèse.
L'erreur classique consiste à filtrer à l'affichage : on récupère tout, puis on masque. C'est une fuite garantie, car le LLM a déjà vu le contenu et peut le restituer dans sa réponse. Le filtre doit s'appliquer à la récupération, en amont du modèle.
Concrètement, les permissions de l'utilisateur sont injectées dans la requête vectorielle comme contrainte dure :
-- L'utilisateur n'a accès qu'à certaines équipes / niveaux de confidentialité
SELECT text, metadata
FROM document_chunks
WHERE metadata->>'owning_team' = ANY(:user_teams)
AND metadata->>'confidentiality' = ANY(:user_clearances)
AND (metadata->>'effective_to' IS NULL OR (metadata->>'effective_to')::date > now())
ORDER BY embedding <=> :query_embedding
LIMIT 10;
Exemple concret. Un membre de l'équipe Achats interroge l'assistant sur « nos engagements de non-débauchage ». Le corpus contient une clause pertinente dans un contrat de l'équipe Fusions-acquisitions, classé confidentiel-direction. Comme confidentiel-direction n'est pas dans ses habilitations, cette clause n'entre même pas dans le contexte du LLM. L'assistant répond sur la base des seuls contrats Achats, et — point important — ne laisse pas entendre qu'une réponse plus complète existe ailleurs (ce qui serait déjà une fuite). Le filtrage à la source garantit qu'on ne peut pas extraire par la conversation ce qu'on ne pourrait pas ouvrir directement.
Mini-scénario : comparer une clause entre deux contrats
La comparaison est l'un des usages à plus forte valeur, et un bon test de l'architecture. Question : « Compare la clause de limitation de responsabilité entre le contrat ACME et le contrat Globex. »
Le pipeline bien conçu procède ainsi :
- Requête ciblée par document — au lieu d'une seule recherche globale, l'assistant lance deux récupérations filtrées :
document_id = ACME-MSA et document_id = Globex-MSA, toutes deux restreintes au thème « limitation de responsabilité » et aux clauses en vigueur.
- Récupération des bonnes clauses — Art. 11 chez ACME, Art. 8.3 chez Globex (les numéros diffèrent, d'où l'importance de chercher par sens et non par numéro).
- Réponse structurée et sourcée :
|
ACME (Art. 11, v2025-03-14) |
Globex (Art. 8.3, v2024-11-02) |
| Plafond |
12 mois de redevances |
Montant total payé sur 24 mois |
| Dommages indirects |
Exclus |
Exclus sauf faute lourde |
| Exceptions au plafond |
Atteinte aux données, IP |
Aucune |
À retenir : le plafond Globex est plus élevé, mais ACME exclut totalement les dommages indirects alors que Globex ménage une exception en cas de faute lourde — plus protecteur pour nous côté ACME sur ce point précis.
Sources : ACME-MSA · Art. 11 · v2025-03-14 ; Globex-MSA · Art. 8.3 · v2024-11-02.
Chaque ligne du tableau est traçable jusqu'à sa clause d'origine. Le juriste ne refait pas le travail : il valide une comparaison déjà sourcée. C'est là que le RAG juridique paie réellement.
Les garde-fous indispensables
- Refus plutôt qu'invention — sur une question dont la réponse n'est pas dans le corpus, l'assistant doit dire qu'il ne sait pas. En juridique, une hallucination confiante est inacceptable.
- Pas de conseil juridique déguisé — l'assistant retrouve et synthétise l'information ; il ne se substitue pas au jugement du juriste. Cadrer cet usage explicitement.
- Fraîcheur des versions — une politique abrogée ne doit jamais être servie comme en vigueur. Le cycle de mise à jour du corpus est critique.
- Confidentialité — les contrats sont parmi les données les plus sensibles de l'entreprise. Hébergement souverain et cloisonnement strict s'imposent (voir nos articles sur la souveraineté).
Un assistant juridique se juge à sa prudence autant qu'à son utilité : mieux vaut un « je ne trouve pas » honnête qu'une clause inventée avec aplomb.
Les pièges réels
Au-delà des principes, voici ce qui fait échouer les projets en production :
- Le découpage générique — le piège n°1. Un chunking à la tronçonneuse détruit la structure des clauses et rend toute citation douteuse. Investissez dans un découpage structure-aware avant toute autre optimisation.
- L'avenant oublié — le contrat principal est indexé, mais l'avenant qui modifie l'Article 7 dort dans un autre dossier. L'assistant sert une clause périmée en toute bonne foi. Le rattachement avenant ↔ contrat doit être systématique.
- Le scan non océrisé — un contrat signé est souvent un PDF image. Sans OCR de qualité, il est invisible pour la recherche. Pire, un OCR médiocre introduit des coquilles dans des montants ou des délais.
- La citation par numéro de page — fragile : la pagination change d'une version à l'autre. Citez par article et version, jamais par page seule.
- Le filtrage à l'affichage — déjà évoqué, mais il mérite d'être répété : c'est la fuite de confidentialité la plus fréquente. Filtrez à la récupération.
- La langue du corpus — contrats en français, en anglais, parfois bilingues. Un embedding multilingue (
bge-m3, Voyage, Cohere) est indispensable ; un modèle monolingue rate la moitié des correspondances.
- L'absence de golden set — sans jeu de questions de référence vérifiées par un juriste, impossible de mesurer si l'assistant pointe vraiment vers la bonne clause. Mettez-le en place dès le départ.
Mesurer la valeur
- Temps de recherche économisé par requête (avant/après).
- Taux de réponses sourcées — il doit viser 100 % ; une réponse non sourcée est un défaut.
- Taux de désengorgement — part des demandes métier traitées sans solliciter un juriste.
- Précision vérifiée — sur un échantillon (le golden set), les citations pointent-elles bien vers la bonne clause/version ? On suit ici des métriques de type context precision et context recall (RAGAS), couplées à une relecture humaine sur les cas sensibles.
- Taux de refus pertinents — l'assistant sait-il dire « je ne trouve pas » plutôt qu'inventer ? Un taux de refus trop bas sur des questions hors corpus est un signal d'alerte.
Conclusion
Le juridique illustre parfaitement une vérité du RAG d'entreprise : la valeur ne vient pas de la fluidité de la réponse, mais de sa vérifiabilité. Un assistant juridique qui cite systématiquement sa source, respecte les versions et les permissions, et sait reconnaître ses limites devient un véritable accélérateur — un juriste augmenté, pas un juriste remplacé. La traçabilité, loin de freiner l'usage, est précisément ce qui le rend possible.
Pour aller plus loin
- RGPD et IA générative : le guide de conformité de vos projets RAG
- Souveraineté de l'IA pour l'entreprise européenne : le guide stratégique 2026