Sirocco
← Études de cas

SaaS B2B

Assistant IA d'entreprise RAG avec contrôle d'accès

38k documents, ACL propagation automatique, 72% rated utile, recherche 14min→90sec, 1,8 FTE sauvés.

03 — Résultats

Résultats

38k docs, 1,7s latence, 72% utile, 14min→90sec recherche

Détails techniques

Le grand groupe industriel français qui nous a commandé ce projet réunit cinq filiales et 4 200 collaborateurs répartis entre la R&D, l'industrie et le BTP. La documentation interne — fiches techniques, procédures qualité, comptes-rendus de projet, normes internes — s'était sédimentée sur quinze ans entre trois SharePoint, deux instances Notion, plusieurs partages SMB et une wiki Confluence en bout de course. Une étude interne avait estimé que les ingénieurs passaient en moyenne 14 minutes par recherche documentaire, et que 30% des questions reposées trois mois plus tard relevaient de documents qui existaient déjà mais étaient introuvables. La promesse d'un assistant IA était évidente ; le piège, dans un groupe industriel, est que la confidentialité prime sur la commodité. Notre première décision technique a été de refuser le pattern « un seul index Qdrant pour tout le corpus avec un filtre user_id à la requête ». Ce design fuit dès qu'un développeur oublie le filtre, et il rend les audits impossibles. Nous avons opté pour une propagation automatique des ACL depuis la source : un connecteur Python par système (SharePoint Graph API, Notion API officielle, SMB via pysmb avec un compte service à droits délégués) extrait pour chaque document à la fois le contenu et la liste exacte des utilisateurs et groupes autorisés. Cette ACL est sérialisée comme métadonnée Qdrant, et les requêtes appliquent un filtre obligatoire sur l'intersection (`user_groups ∩ doc_acl ≠ ∅`). L'ingestion documentaire elle-même est plus complexe qu'il n'y paraît. La librairie Unstructured gère bien les PDF natifs, les Office, les emails et les HTML, mais beaucoup de procédures industrielles sont des scans numérisés des années 90 — page A4 inclinée, tampons, mentions manuscrites. Nous avons donc ajouté un Tesseract 5 piloté par un détecteur de qualité : si le PDF a un layer texte exploitable, on l'utilise directement ; sinon, OCR sur images binarisées avec préprocessing OpenCV (deskew, denoise, dilation des caractères). Les tableaux sont extraits séparément par Camelot avant le chunking pour éviter de mélanger lignes et cellules dans un même chunk de prose. Les embeddings utilisent bge-m3 multilingue, qui couvre français, anglais, allemand et chinois — utile pour ce groupe dont l'usine en Asie produit des rapports techniques en chinois. Le choix multilingue évite la duplication de l'index et permet à un ingénieur français de retrouver un document de spécification en anglais ou en chinois si pertinent. La granularité du chunking est calibrée à 800 tokens avec 200 de chevauchement — assez fin pour des extraits ciblés, assez large pour préserver le contexte d'un paragraphe technique complet. La qualité de la récupération bénéficie d'un re-ranker cross-encoder (BGE Reranker v2-m3) en second étage : les 30 premiers résultats de la recherche vectorielle sont rescorés deux à deux avec la requête utilisateur, et seuls les 6 meilleurs sont passés au LLM. Cette étape coûte 250 ms supplémentaires mais améliore la pertinence du top-3 d'environ 18 points NDCG sur notre benchmark interne. Le re-ranker tourne sur un GPU L4 mutualisé avec l'embedding ; on évite ainsi d'attaquer un service externe pour cette étape sensible aux données. Le choix du LLM est routé par classification du document. Les documents marqués « sensible » (classification interne C3+) sont traités exclusivement par Mistral Large hébergé sur des GPU H100 en France, dans un VPC dédié. Les documents publics ou peu sensibles peuvent partir vers GPT-4o (Azure OpenAI région France-Centrale) si le routeur estime que la qualité de réponse l'exige. Ce routage est observable et auditable : chaque requête loggée précise quel modèle a été appelé, et la DSI peut couper l'envoi vers OpenAI à tout moment via un feature flag. Les garde-fous anti-fuites couvrent trois couches. Avant l'envoi au LLM, un NER (spaCy fr-FR + en-US + de-DE) masque les numéros de téléphone, IBAN, emails et noms propres marqués personnels. Toutes les requêtes (utilisateur, contexte, réponse) sont écrites dans un journal d'audit append-only signé hash-chaîné, conservé deux ans. Les réponses doivent obligatoirement contenir des citations sources avec lien direct vers le document d'origine ; si le LLM ne fournit pas de citation pour une affirmation, le contrôleur post-traitement la marque « non vérifiée » et l'affiche en gris dans l'interface. Après neuf mois de production, l'assistant indexe 38 000 documents (PDF, Office, emails, scans OCR), répond en 1,7 seconde médiane, et 72% des réponses sont notées « utile » par les utilisateurs. Le temps moyen de recherche documentaire est tombé de 14 minutes à 90 secondes, ce qui représente l'équivalent de 1,8 ETP libérés sur l'année. Surtout — et c'est ce qui a permis la généralisation — l'audit interne n'a remonté aucune fuite de donnée sensible, et l'inspection ANSSI commandée par la direction a validé l'architecture comme conforme à la doctrine de souveraineté numérique du groupe.