Guide technique

Systèmes IA dans l'UE : Concevoir pour le RGPD dès le Jour Un

Guide d'architecture pour construire des systèmes IA conformes au RGPD. Frontières de confiance, tokenisation sémantique, restauration pilotée par politique, et scénarios de production réels.

19 avril 202615 min de lectureÉquipe d'Ingénierie Oronts

Le Mur de Conformité Dont Personne ne te Prévient

Voilà le truc : la plupart des architectures IA sont techniquement illégales dans l'UE dès qu'elles touchent aux données clients.

Pas parce que les équipes s'en fichent. Elles sont concernées. Le problème est plus simple et plus brutal : l'architecture par défaut de chaque tutoriel IA, chaque quickstart RAG, chaque framework d'agents envoie les données brutes des clients directement à un fournisseur de modèle externe. Noms, emails, identifiants clients, références de commande, données de facturation. Tout ça traverse vers une infrastructure que tu ne contrôles pas. Dans l'UE, selon les articles 44-49 du RGPD, c'est une violation de la protection des données avant même d'arriver aux parties intéressantes.

On a percuté ce mur nous-mêmes. On construisait un système de communication client alimenté par l'IA pour un client entreprise en Allemagne. La démo était brillante : personnalisée, contextualisée, de l'allemand formel avec des formules de politesse genrées correctes. Puis le service juridique a revu le diagramme d'architecture et posé une seule question :

"Où exactement le nom du client quitte-t-il notre infrastructure ?"

Tout s'est arrêté pendant trois semaines. La réponse ingénierie ("l'API d'OpenAI, mais ils n'entraînent pas sur nos données") n'a satisfait personne. Ni le DPO, ni le juridique, ni l'équipe d'achat du client.

L'industrie te donne un faux choix : soit utiliser l'IA de manière non sécurisée avec des données brutes, soit supprimer les données jusqu'à ce que l'IA devienne inutile. On a passé des mois à construire une troisième voie. C'est devenu le fondement d'OGuardAI, notre runtime open-source de protection sémantique des données. Cet article, c'est tout ce qu'on a appris.

Pourquoi Ça Compte Au-Delà du Juridique

Avant d'entrer dans l'architecture : ce n'est pas seulement un problème de conformité. C'est un bloqueur business, un risque sécurité, et un défi d'ingénierie, simultanément. Tu peux voir comment on aborde les projets enterprise sur notre page méthodologie et notre vue d'ensemble des services.

Partie prenanteCe qu'elle demandeCe dont elle a vraiment besoin
CEO / Fondateur"On peut utiliser l'IA en toute sécurité ?"Un OUI clair avec des preuves pour le board et les investisseurs
CTO / VP Engineering"C'est quoi l'architecture ?"Un modèle de frontière de confiance qui résiste à un audit de sécurité
DPO / Juridique"Où vont les données personnelles ?"La preuve que les données brutes ne quittent jamais l'infrastructure contrôlée
Product Owner"On peut toujours personnaliser ?"La confirmation que la qualité de l'output IA ne se dégrade pas
Ingénieur Senior"Comment j'implémente ça ?"APIs, SDKs, pipeline de détection, modes de restauration
Architecte Plateforme"Ça scale ?"Conception multi-tenant, multi-langue, multi-politique

Si une seule de ces personnes dit non, ton projet IA est mort. C'est pourquoi cette architecture doit satisfaire tout le monde en même temps.

Le Modèle de Frontière de Confiance

Le concept le plus important dans l'architecture IA conforme au RGPD, c'est la frontière de confiance. Ce n'est pas une bibliothèque. Ce n'est pas un flag de config. C'est une décision architecturale sur les données qui transitent vers des systèmes que tu ne contrôles pas entièrement. Si tu découvres notre approche de l'architecture système chez Oronts, ce guide fournit un contexte utile.

┌──────────────────────────────────────────────────────────────────┐
│                      TRUSTED ZONE                                │
│                  (Your Infrastructure)                            │
│                                                                  │
│  ┌────────────┐    ┌────────────┐    ┌──────────────────────┐   │
│  │  Raw PII   │───▶│  Detect    │───▶│  Session Mapping     │   │
│  │  Input     │    │  Engine    │    │  (AES-256-GCM        │   │
│  │            │    │            │    │   encrypted)         │   │
│  └────────────┘    └─────┬──────┘    └──────────────────────┘   │
│                          │                                       │
│                          ▼                                       │
│                ┌──────────────────┐                               │
│                │  Tokenized Text  │                               │
│                │  + entity_context│                               │
│                └────────┬─────────┘                               │
│ ════════════════════════╪════════════════════════════════════════ │
│            TRUST        │       BOUNDARY                         │
│ ════════════════════════╪════════════════════════════════════════ │
│                         ▼                                        │
│     ┌───────────────────────────────────────────┐               │
│     │            UNTRUSTED ZONE                  │               │
│     │     (LLM Provider / External API)          │               │
│     │                                            │               │
│     │  Sees: {{person:p_001}}, {{email:e_001}}   │               │
│     │  + metadata: gender=female, formality=     │               │
│     │    formal, language=de                     │               │
│     │  Never sees: "Sara Mustermann",                 │               │
│     │    "sara.mustermann@beispiel.de"              │               │
│     └──────────────────────┬─────────────────────┘               │
│                            │                                     │
│                            ▼                                     │
│     ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐   │
│     │ Token Repair  │─▶│ Output Guard │─▶│  Rehydrate       │   │
│     │ (3-stage)     │  │ (catch new   │  │  (policy-driven  │   │
│     │               │  │  PII)        │  │   restore)       │   │
│     └──────────────┘  └──────────────┘  └──────────────────┘   │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

La règle est absolue : les données personnelles brutes restent dans la zone de confiance. Seuls les tokens sémantiques traversent vers la zone non fiable. Le LLM ne voit jamais un vrai nom, un vrai email, un vrai numéro de téléphone, un vrai IBAN. Il voit {{person:p_001}}, {{email:e_001}}, {{phone:ph_001}}.

ZoneContientNe contient jamais
Zone de confiance (ton runtime)Données personnelles brutes, mappages de tokens, clés de chiffrement, règles de politique
Zone non fiable (LLMs, outils, logs, vector stores)Uniquement des tokens {{type:id}} + métadonnées sûresNoms bruts, emails, identifiants, toute donnée personnelle
Franchissement de frontièreTexte tokenisé + métadonnées entity_contextToute valeur sensible brute

C'est ce qui fait signer les contrats enterprise. Pas les fonctionnalités. Des frontières de confiance prouvables.

Pourquoi le Masquage Naïf Détruit la Qualité IA

La première chose que chaque équipe essaie, c'est le remplacement de chaînes : remplacer "Sara Mustermann" par [NAME], envoyer au modèle, remplacer [NAME] à nouveau.

Ça échoue de manière catastrophique en production :

ProblèmeCe qui se passeImpact business
Collapse sémantique[NAME] ne porte aucun contexte, le modèle ne peut pas déterminer le genre, la formalité, la relationOutput générique qui ressemble à du spam
Formule de politesse allemande"Sehr geehrte Frau Mustermann" devient "Sehr geehrte [NAME]", grammaticalement casséCommunication non professionnelle
Confusion multi-entitésDeux personnes dans un texte, toutes les deux [NAME], le modèle les confondLa mauvaise personne reçoit la confirmation de remboursement
Ambiguïté de restaurationTrois [NAME] dans l'output, lequel est lequel ?Échec d'intégrité des données
Honorifiques arabesLe préfixe honorifique correct dépend du genre, du statut, de la relationOutput culturellement offensant

Le problème de la formule de politesse allemande à lui seul a tué notre première approche. En communication professionnelle allemande, tu as besoin de :

  • Genre : "Herr" (M.) ou "Frau" (Mme). Se tromper de genre est une faute professionnelle sérieuse
  • Cas grammatical correct : "Sehr geehrter Herr" vs "Sehr geehrte Frau" (terminaison différente selon le genre)
  • Reconnaissance des titres : préfixe "Dr." ou "Prof." quand applicable
  • Cohérence : la même personne doit être adressée de la même façon tout au long d'un document de 3 pages

Si ton modèle voit seulement [NAME], il est littéralement incapable de produire une lettre formelle allemande correcte. L'output est soit grammaticalement faux, culturellement inapproprié, ou tellement générique qu'il ressemble à un template. Et les emails génériques ne convertissent pas. C'est exactement le type de mode de défaillance IA qui tue l'adoption enterprise.

Tokenisation Sémantique : L'Architecture Qui Fonctionne

La tokenisation sémantique est fondamentalement différente du masquage. Au lieu de supprimer de l'information, elle remplace les valeurs brutes par des tokens qui portent suffisamment de métadonnées pour que le LLM produise un output correct, sans jamais voir les données réelles.

Format des Tokens et Métadonnées

{{type:id}}
  • type : l'un des 12+ types d'entités enregistrés (person, email, phone, company, customer_id, order, address, iban, ssn, ip, passport, health_id)
  • id : identifiant déterministe à portée de session (préfixe + compteur : p_001, e_001, ph_001)

Chaque token porte des métadonnées structurées. C'est ce qui le rend sémantique, pas juste un placeholder :

ChampValeursFinalitéExemple
gendermale, female, unknownGenre grammatical pour la génération d'adresses"Frau" vs "Herr"
formalityformal, informalContrôle du registre"Sehr geehrte" vs "Hallo"
languageISO 639-1 (de, en, ar, fr...)Langue source de l'entitéDétermine les règles de réhydratation
rolerecipient, sender, subject, referenceRôle sémantique dans la conversationQui est adressé vs qui est mentionné
belongs_toID du token parentLien d'appartenanceL'email e_001 appartient à la personne p_001

Ces métadonnées sont envoyées au LLM en tant qu'entity_context. Des informations de niveau type, sûres, qui ne contiennent aucune valeur brute :

{
  "entity_context": [
    {
      "token": "{{person:p_001}}",
      "type": "person",
      "gender": "female",
      "formality": "formal",
      "language": "de",
      "role": "recipient"
    },
    {
      "token": "{{email:e_001}}",
      "type": "email",
      "belongs_to": "p_001"
    },
    {
      "token": "{{customer_id:cid_001}}",
      "type": "customer_id"
    }
  ]
}

Le modèle sait qu'il écrit à une destinataire formelle, féminine, germanophone. Il ne connaît pas son nom.

Le Pipeline de Détection

La détection, ce n'est pas un simple regex. C'est un système en couches qui combine vitesse et précision :

CoucheTechnologieLatenceCe qu'elle captureConfiance
Regex intégrésPatterns compilés (Rust)~1-5msEmails, téléphones, IBANs, IPs, URLs, SSNs, IDs structurés0.95-1.0
Heuristiques de patternsRègles contextuelles~2-8msIDs clients (format spécifique), références de commande, dates0.80-0.95
Modèles NERspaCy / transformers (sidecar Python)~15-50msNoms de personnes, noms d'entreprises, adresses, PII non structurées0.70-0.95
Détecteurs personnalisésRègles définies par l'utilisateurVariableEntités spécifiques au domaine (codes produits, refs internes)Configurable

En production, tu lances le regex en premier (rapide, haute précision pour les données structurées), puis le NER pour les entités non structurées. L'approche en couches fait que les données personnelles structurées comme les emails et les IBANs sont capturées à latence quasi nulle, tandis que les noms et adresses reçoivent le traitement NER complet. Pour surveiller les performances dans le temps, consulte notre guide sur l'observabilité IA.

// Exemple de configuration de détection
const config = {
  detectors: ["builtin_regex", "ner_spacy"],
  entity_types: ["person", "email", "phone", "customer_id", "iban"],
  threshold: 0.7,  // confiance minimum pour tokeniser
  language: "de"   // indication pour le modèle NER
};

Scénario de Production Complet : Support Client Allemand

Parcourons un cycle de production complet. Pas un exemple simplifié, mais ce qui se passe réellement dans un vrai système de communication client.

Entrée (ticket de support client) :

Hallo, ich bin Sara Mustermann. Meine Kundennummer ist 948221.
Ich warte seit 5 Tagen auf meine Rückzahlung.
Meine E-Mail ist sara.mustermann@beispiel.de, bitte schickt mir eine Bestätigung.

Étape 1 : Détection

EntitéTypeConfianceDétecteurMétadonnées
Sara Mustermannperson0.95ner_spacygender: female, formality: formal, language: de, role: recipient
948221customer_id0.99builtin_regex
sara.mustermann@beispiel.deemail1.0builtin_regexbelongs_to: p_001

Étape 2 : Texte sécurisé tokenisé (envoyé au LLM)

Hallo, ich bin {{person:p_001}}. Meine Kundennummer ist {{customer_id:cid_001}}.
Ich warte seit 5 Tagen auf meine Rückzahlung.
Meine E-Mail ist {{email:e_001}}, bitte schickt mir eine Bestätigung.

Étape 3 : Le LLM génère la réponse (sortie du modèle)

Sehr geehrte {{person:p_001}},

vielen Dank für Ihre Nachricht. Es tut uns leid, dass Sie bereits seit
5 Tagen auf Ihre Rückzahlung warten.

Wir haben Ihren Fall unter der Kundennummer {{customer_id:cid_001}}
überprüft und die Rückzahlung wurde heute angewiesen. Sie erhalten
eine Bestätigung an {{email:e_001}} innerhalb der nächsten 24 Stunden.

Mit freundlichen Grüßen,
Ihr Support-Team

Étape 4 : Réhydratation (canal de sortie : customer_email, restauration : formatted)

Sehr geehrte Frau Sara Mustermann,

vielen Dank für Ihre Nachricht. Es tut uns leid, dass Sie bereits seit
5 Tagen auf Ihre Rückzahlung warten.

Wir haben Ihren Fall unter der Kundennummer 948221 überprüft und die
Rückzahlung wurde heute angewiesen. Sie erhalten eine Bestätigung
an sara.mustermann@beispiel.de innerhalb der nächsten 24 Stunden.

Mit freundlichen Grüßen,
Ihr Support-Team

Ce qui s'est passé :

  • Le LLM a écrit de l'allemand formel correct : "Sehr geehrte" (pas "Sehr geehrter") parce qu'il savait que la destinataire est féminine
  • "Frau" a été ajouté automatiquement pendant la restauration formatted. Le modèle n'a jamais décidé ça
  • L'ID client a été restauré parce que la politique l'autorise pour les emails aux clients
  • L'email a été restauré parce que la cliente a explicitement demandé une confirmation à cette adresse
  • Le modèle n'a jamais vu "Sara Mustermann", "948221", ni "sara.mustermann@beispiel.de"

Trois Niveaux de Protection pour Différentes Données

Toutes les données ne sont pas également sensibles. Un modèle à trois niveaux gère cette réalité. Ce type d'approche pilotée par politique est au coeur de la façon dont nous concevons les systèmes IA et les pipelines de workflow IA chez Oronts.

Niveau 1 : Masquage dur (jamais réversible)

S'applique à : iban, ssn, passport, health_id

Ceux-ci portent des obligations réglementaires (RGPD Art. 9 catégories spéciales, PCI-DSS, HIPAA). Leurs valeurs brutes ne sont jamais stockées sous forme réversible.

ActionComportementQuand l'utiliser
blockRequête rejetée si l'entité est détectéeInterdiction absolue (ex: données de santé dans l'IA marketing)
removeEntité supprimée du texte entièrementMinimisation des données, l'entité n'est pas nécessaire
abstractRemplacée par une étiquette de catégorie : [IBAN on file]Le LLM a besoin de savoir qu'elle existe, pas sa valeur
hard_maskMasque de longueur fixe : DE** **** **** **** **Préserver le format sans révéler la valeur

Niveau 2 : Tokenisation réversible (contrôlée par politique)

S'applique à : person, email, phone, company, customer_id, order, address, ip, url

Ceux-ci sont tokenisés avec des métadonnées sémantiques et restaurés selon la politique du canal de sortie. La même tokenisation produit des résultats différents pour des audiences différentes :

Mode de restaurationPersonEmailPhone
fullSara Mustermannsara.mustermann@beispiel.de+49 30 12345678
partialS. Mustermanns***@beispiel.de***5678
masked**** ******s***********************e+** ** ********
formattedFrau Sara Mustermannsara.mustermann@beispiel.de (E-Mail)+49 30 12345678 (Mobil)
abstract(weibliche Kundin)(E-Mail hinterlegt)(Telefon hinterlegt)
none[REDACTED][REDACTED][REDACTED]

Les mêmes données tokenisées, des politiques différentes par canal :

Canal de sortiepersonemailcustomer_idiban
customer_emailformattedfullfullnone
internal_summaryfullfullfullpartial (4 derniers)
export/analyticsabstractnoneabstractnone
log_safenonenonenonenone

C'est l'insight clé : tokenise une fois, restaure différemment par canal. Le client reçoit "Frau Sara Mustermann" dans son email. L'équipe interne voit "Sara Mustermann" avec tous les détails. L'export analytics voit "(female customer)". Le journal d'audit ne voit aucune donnée personnelle.

Niveau 3 : Abstraction sémantique (métadonnées uniquement)

S'applique à : genre, formalité, statut VIP, département

Aucune valeur brute n'est stockée. Seules les métadonnées sémantiques circulent dans le système. Le LLM sait que la destinataire est féminine et formelle. Suffisant pour produire une grammaire correcte, sans aucune donnée brute impliquée.

Workflows Agentiques : Là Où Ça Devient Exponentiellement Plus Dur

Les appels LLM simples, c'est le cas facile. Les systèmes IA agentiques, où un agent IA effectue plusieurs étapes avec des outils, multiplient la surface de fuite de manière exponentielle. Nous couvrons l'architecture des agents en profondeur dans notre guide d'architecture multi-agents, mais ici nous nous concentrons spécifiquement sur le défi de la protection des données.

Considère un workflow d'agent de support :

Step 1: Read ticket           → PII in ticket text
Step 2: Look up customer      → PII in CRM response
Step 3: Check billing         → PII in billing data
Step 4: Draft response        → PII in prompt + output
Step 5: Trigger refund        → PII in API call

Cinq étapes = cinq points de fuite potentiels. Sans protection, les données fuient dans le contexte du modèle, les arguments d'appels d'outils, les chaînes de raisonnement intermédiaires, la mémoire de l'agent, et les logs. Chaque étape aggrave le risque.

La solution : envelopper chaque franchissement de frontière de confiance, pas juste l'appel LLM final.

Step 1: Read ticket
  → Raw ticket with PII
  → TRANSFORM → Agent sees tokenized ticket

Step 2: Look up customer (tool call)
  Agent requests: get_customer({{customer_id:cid_001}})
  → Runtime intercepts → real ID used for lookup (inside trust boundary)
  → Tool response TRANSFORMED before returning to agent

Step 3: Check billing (tool call)
  Agent requests: check_billing({{customer_id:cid_001}})
  → Same pattern: real ID used internally, response tokenized

Step 4: Draft response
  Agent has: tokenized ticket + tokenized customer info + tokenized billing
  → Generates response with tokens
  → REHYDRATE for customer_email channel

Step 5: Trigger refund (tool call)
  Agent requests: issue_refund({{customer_id:cid_001}}, {{order:o_001}})
  → Runtime passes real values to refund API (inside trust boundary)
  → Confirmation tokenized before returning to agent

L'agent ne voit jamais de données personnelles brutes à aucune étape. Les payloads d'outils sont gouvernés étape par étape. Chaque franchissement de la frontière de confiance est protégé. La piste d'audit montre exactement quelles entités ont été détectées, tokenisées et restaurées à chaque étape, sans contenir elle-même de données personnelles. Pour les portes d'approbation qui rendent les décisions d'agents sûres, consulte notre guide sur les systèmes IA human-in-the-loop.

Protection du Pipeline RAG

La génération augmentée par récupération (RAG) introduit un second vecteur de fuite : ton vector store. Si tu indexes des documents avec des données personnelles brutes, l'intégralité de ton pipeline de retrieval devient un système réglementé par le RGPD. Pour un regard approfondi sur l'architecture RAG elle-même, consulte notre guide des systèmes RAG entreprise et notre guide d'architecture de recherche vectorielle.

Deux approches :

A. Tokenisation à l'Ingestion

Les documents sont tokenisés avant le chunking et l'embedding :

  • Les chunks contiennent {{person:p_001}} au lieu de vrais noms
  • Les embeddings sont construits sur du texte tokenisé
  • Le vector store ne contient jamais de données personnelles brutes
  • Compromis : qualité de retrieval légèrement inférieure pour les requêtes basées sur les noms

B. Tokenisation au Moment de la Requête (Recommandé)

Les documents sont stockés bruts dans un environnement contrôlé. Au moment de la requête :

User: "What is the status of Sara Mustermann's refund?"

→ TRANSFORM query: "What is the status of {{person:p_001}}'s refund?"
→ RETRIEVE: chunks about refund policies (may contain PII)
→ TRANSFORM retrieved chunks: replace PII with tokens
→ LLM: generates answer using only tokens
→ REHYDRATE: restore per output channel policy
→ User sees: personalized answer with real names where allowed

L'approche au moment de la requête préserve la qualité de retrieval (les embeddings matchent sur les termes réels) tout en protégeant la frontière LLM. Le vector store est dans la zone de confiance ; seul le LLM est en dehors.

Architecture de Session : Sécurité Stateless

Un système de production ne peut pas se permettre un état de session côté serveur pour chaque requête. On a conçu des sessions scellées : des blobs chiffrés AES-256-GCM qui voyagent avec la requête.

Transform request → runtime creates token map
                  → serializes + encrypts with AES-256-GCM
                  → returns encrypted blob as session_state
                  → client stores blob (opaque, tamper-proof)

Rehydrate request → client sends session_state blob back
                  → runtime verifies GCM authentication tag
                  → decrypts → resolves tokens → restores values
                  → no server-side state required

Pourquoi c'est important architecturalement :

PropriétéSessions ScelléesSessions Côté Serveur
État serveurZéroNécessite Redis/DB
Scaling horizontalTrivial, n'importe quelle instance gère n'importe quelle requêteNécessite un store de sessions partagé
Mode d'échecSi le blob est perdu, la réhydratation échoue gracieusementSi Redis tombe, tout s'effondre
Détection de falsificationTag d'authentification GCM, intégrité au niveau du bitNécessite une couche HMAC en plus
Multi-tourPasser le blob en avant, nouveaux blobs pour les nouveaux toursID de session + gestion du TTL

L'enveloppe de session scellée contient l'ID de session, l'ID du tenant, la version de la politique, le timestamp d'expiration, et la token map chiffrée. Le tout vérifié par le tag d'authentification GCM. Si un seul bit change, le blob entier est rejeté. Échec fermé, toujours.

Réparation de Tokens : Gérer les Imperfections du LLM

Les LLMs ne sont pas des processeurs de texte parfaits. Quand tu envoies {{person:p_001}}, le modèle peut retourner :

MutationExempleFréquence
Accolades externes manquantes{person:p_001}~1-2%
Type en majuscule{{Person:p_001}}~0.5-1%
Espaces ajoutés{{ person:p_001 }}~0.5%
Tronqué à la limite du token{{person:p_001~0.3%
Coupé sur plusieurs lignes{{person:\np_001}}~0.1%

Un système de production a besoin d'un pipeline de réparation en trois étapes :

  1. Parse strict : regex canonique {{type:id}}. Gère ~97% des cas.
  2. Réparation déterministe : patterns de mutation connus (accolades manquantes, normalisation de casse, collapse d'espaces). Attrape ~2.5%.
  3. Résolution floue : distance de Levenshtein par rapport aux tokens connus dans la session. Dernier recours pour les ~0.5% restants.

Sans réparation de tokens, tes emails aux clients contiennent {{person:p_001}} au lieu d'un nom. On a vu ça arriver à un taux de ~2-5% chez différents fournisseurs de modèles. Certains modèles (GPT-4o, Claude) préservent bien les tokens ; les modèles plus petits ou locaux font pire.

Output Guard : Capturer les Données Personnelles Hallucinées

Voici un risque que la plupart des équipes ratent : le LLM peut halluciner des données personnelles qui n'étaient pas dans l'input original. Nous couvrons d'autres modes de défaillance IA dans un guide dédié, mais celui-ci mérite une attention particulière.

Si tu demandes au modèle d'écrire une réponse à {{person:p_001}}, il pourrait inventer un numéro de téléphone, une adresse, ou le nom d'un collègue à partir de ses données d'entraînement. Ces données personnelles hallucinées ne sont pas protégées par ta tokenisation, parce qu'elles n'ont jamais été tokenisées.

La solution : un second passage d'output guard qui lance le pipeline de détection sur la réponse du modèle. S'il trouve des données personnelles qui ne correspondent à aucun token connu dans la session, il les signale ou les supprime.

┌───────────────┐     ┌───────────────┐     ┌───────────────┐
│  LLM Response │────▶│  Token Repair  │────▶│  Output Guard  │
│  (with tokens)│     │  (3-stage)     │     │  (detect NEW   │
│               │     │               │     │   PII in output)│
└───────────────┘     └───────────────┘     └────────┬───────┘
                                                      │
                                              ┌───────▼───────┐
                                              │   Rehydrate    │
                                              │  (restore known│
                                              │   tokens only) │
                                              └───────────────┘

Le modèle a inventé un numéro de téléphone ? Capturé. A mentionné le vrai nom d'une personne depuis ses données d'entraînement ? Capturé. A référencé une vraie entreprise qui n'était pas dans l'input ? Signalé pour revue.

Réhydratation Sensible à la Langue

L'allemand, ce n'est que le début. Chaque langue a des règles grammaticales qui interagissent avec les données personnelles :

LangueDéfiOutput correctOutput cassé (masquage naïf)
AllemandFormule de politesse genrée"Sehr geehrte Frau Mustermann""Sehr geehrte [NAME]"
AllemandCas grammatical"Schreiben Sie Herrn Mustermann" (accusatif)"Schreiben Sie [NAME]"
ArabePréfixe honorifique + RTL"السيدة موسترمان المحترمة""[NAME]"
FrançaisArticles genrés"Chère Madame Mustermann""Cher/Chère [NAME]"
AnglaisContrôle du registre"Dear Ms. Mustermann" vs "Hi Sara""Dear [NAME]"

Les métadonnées du token (gender, formality, language) permettent une réhydratation correcte dans n'importe quelle langue. Le mode de restauration formatted applique des règles spécifiques à chaque langue :

  • Allemand formel féminin : "Frau" + nom complet → "Frau Sara Mustermann"
  • Allemand formel masculin : "Herr" + nom complet → "Herr Refaat K."
  • Arabe formel féminin : préfixe honorifique en RTL → "السيدة موسترمان"
  • Français formel féminin : "Madame" + nom de famille → "Madame Mustermann"

Le LLM produit la bonne structure grammaticale parce qu'il sait que le token représente une destinataire formelle féminine. Il ne connaît pas son nom, mais l'output est grammaticalement parfait.

Pistes d'Audit Qui Ne Créent Pas de Nouvelles Responsabilités

Ton infrastructure de logging devient une responsabilité RGPD au moment où tu logues des prompts bruts. Ton Datadog, CloudWatch, Elasticsearch : tous deviennent des systèmes qui traitent des données personnelles, chacun nécessitant sa propre documentation RGPD, ses politiques de rétention, et ses procédures d'accès aux données des sujets.

La règle : loguer les tokens, jamais les valeurs.

// Correct : log structuré audit-safe
{
  "event": "transform_complete",
  "session_id": "ses_a8f3c2",
  "entities_detected": 3,
  "entity_types": ["person", "email", "customer_id"],
  "token_ids": ["p_001", "e_001", "cid_001"],
  "policy_applied": "german-support",
  "protection_levels": [2, 2, 2],
  "detection_time_ms": 8,
  "transform_time_ms": 12
}

// Faux : PII dans les logs. Maintenant tout ton pipeline de logs est réglementé RGPD
{
  "event": "transform_complete",
  "original_name": "Sara Mustermann",           // PII dans les logs !
  "original_email": "sara.mustermann@beispiel.de",   // PII dans les logs !
  "prompt": "Hallo, ich bin Sara Mustermann..."  // PII dans les logs !
}

Chaque opération est entièrement auditable : tu peux tracer que p_001 a été détecté par ner_spacy avec une confiance de 0.95, tokenisé sous la politique german-support, et restauré en mode formatted sur le canal customer_email. Tu peux reconstruire la chaîne complète. Mais la piste d'audit elle-même ne contient aucune donnée personnelle.

Cela satisfait :

  • RGPD Art. 30 : Registre des activités de traitement. Tu peux démontrer exactement ce qui arrive aux données personnelles
  • RGPD Art. 35 : Analyse d'impact relative à la protection des données. Ta piste d'audit prouve que l'architecture fonctionne sans être elle-même un risque data
  • RGPD Art. 5(1)(c) : Minimisation des données. Seules les données nécessaires sont traitées, et uniquement sous forme tokenisée en dehors de la frontière de confiance

CRM Copilot : Mêmes Données, Canaux Différents

Regardons un scénario CRM où le même input produit des outputs différents par canal. C'est le type d'architecture logicielle sur mesure que nous construisons régulièrement pour les clients enterprise.

Entrée d'enregistrement CRM :

{
  "contact_name": "Refaat K.",
  "email": "r.k@oronts.com",
  "company": "Oronts GmbH",
  "deal_value": "€125,000",
  "quote_id": "Q-2026-0847",
  "last_interaction": "Discussed pricing, needs board approval"
}

Prompt tokenisé envoyé au LLM :

Draft a follow-up email to {{person:p_001}} at {{company:c_001}}.
Context: discussed pricing, needs board approval.
Deal reference: {{order:o_001}}.
Tone: professional, friendly, not pushy.

Le LLM ne voit jamais "Refaat K.", "Oronts GmbH", "€125,000", ni l'ID du devis. Il rédige un email de suivi avec des tokens.

Décisions de politique par entité et canal de sortie :

EntitéTypecustomer_emailinternal_summaryanalytics_export
Refaat K.personfullfullabstract
r.k@oronts.comemailnone (pas dans le body)fullnone
Oronts GmbHcompanyfullfullabstract
€125,000ordernone (jamais en sortie)fullabstract
Q-2026-0847orderfull (nécessaire comme ref)fullnone

Même tokenisation. Trois outputs complètement différents. L'email au client contient le nom et la référence de devis mais jamais la valeur du deal. Le résumé interne contient tout. L'export analytics ne contient que des agrégats anonymisés.

Feuille de Route d'Implémentation

Si tout ça te semble beaucoup à implémenter seul, notre équipe de consulting a guidé plusieurs clients enterprise à travers exactement ce processus. Tu peux aussi demander un devis pour une revue d'architecture de frontière de confiance.

Phase 1 : Cartographier tes Flux de Données

  • Inventorie chaque endroit où des données personnelles entrent dans ton pipeline IA (prompts, chunks RAG, appels d'outils, mémoire de l'agent, messages d'erreur, logs)
  • Identifie quelles données le LLM a réellement besoin vs ce qu'il reçoit actuellement
  • Dessine la frontière de confiance : ce qui reste dedans, ce qui la traverse

Phase 2 : Construire la Détection

  • Commence par le regex pour les données personnelles structurées (emails, téléphones, IBANs). C'est rapide et haute précision
  • Ajoute le NER pour les noms et adresses. Utilise spaCy ou transformers avec des modèles spécifiques à chaque langue
  • Fixe les seuils de confiance : 0.95+ pour le regex, 0.70+ pour le NER
  • Teste le taux de faux négatifs. Des données personnelles manquées, c'est pire que des faux positifs

Phase 3 : Implémenter la Tokenisation

  • Définis ton format de token ({{type:id}}) et le schéma de métadonnées
  • Construis le mappage de session avec le chiffrement scellé (AES-256-GCM)
  • Implémente les niveaux de protection par type d'entité
  • Crée des politiques par canal de sortie

Phase 4 : Pipeline de Réhydratation

  • Réparation de tokens (strict → déterministe → flou)
  • Output guard (détecter les données personnelles hallucinées dans les réponses du modèle)
  • Modes de restauration pilotés par politique, par canal
  • Formatage sensible à la langue (adresses genrées, honorifiques)

Phase 5 : Intégration de la Conformité

  • Logging d'audit structuré (IDs de tokens, jamais les valeurs)
  • Registre de traitement RGPD Art. 30
  • AIPD RGPD Art. 35 avec preuves architecturales
  • Intégration avec le processus de revue de ton DPO
  • Consulte notre vue d'ensemble confiance et conformité pour la façon dont nous documentons ces garanties pour nos clients

Pièges Courants

  1. Loguer les prompts bruts. Ton Datadog devient un système réglementé RGPD du jour au lendemain. Logue les IDs de tokens, jamais les valeurs.
  2. Sauter la réparation de tokens. 2-5% des réponses LLM auront des tokens malformés. Ton client voit {{person:p_001}} au lieu d'un nom.
  3. Pas d'output guard. Le modèle hallucine des données personnelles depuis ses données d'entraînement. Tu viens de fuiter le vrai numéro de téléphone de quelqu'un d'autre.
  4. Le même mode de restauration partout. Les emails clients et les dashboards analytics ont besoin de niveaux de détail fondamentalement différents.
  5. Ignorer les workflows agentiques. Un agent en 5 étapes a 5+ points de fuite. Protéger seulement l'appel LLM final, c'est comme verrouiller la porte d'entrée avec les fenêtres ouvertes.
  6. "Auto-hébergeons notre propre LLM." Coûte 10x plus cher, prend 6+ mois, et tu as toujours besoin de gouvernance des données. Le problème, c'est l'architecture, pas l'hébergement.
  7. Traiter la conformité après coup. Le juridique va bloquer ton déploiement six semaines avant le lancement. Implique-les dès le premier jour.
  8. Pas de sessions scellées. L'état de session côté serveur signifie que ton cluster Redis devient un point de défaillance unique pour chaque requête IA.
  9. Masquage ignorant la langue. [NAME] dans une correspondance formelle allemande, c'est une perte de crédibilité professionnelle immédiate.
  10. Embarquer des données personnelles dans les vecteurs. Ta base de données vectorielle devient le plus grand stock de données personnelles non audité de ton infrastructure.

Points Clés à Retenir

  • La frontière de confiance est une décision d'architecture, pas une bibliothèque. Dessine-la, applique-la à chaque franchissement, audite-la sans données personnelles dans les logs.
  • La tokenisation sémantique préserve la qualité IA là où le masquage naïf la détruit. Le modèle reçoit le genre, la formalité, les métadonnées de langue. Suffisant pour une grammaire correcte sans valeurs brutes.
  • Trois niveaux de protection correspondent à la sensibilité réelle des données : masque dur pour le réglementé, tokenise l'utile, abstrait les métadonnées.
  • La restauration pilotée par politique signifie qu'une tokenisation sert tous les canaux : les emails clients reçoivent des noms formatés, l'analytics reçoit des labels abstraits, les logs ne reçoivent rien.
  • Les workflows agentiques multiplient le risque exponentiellement. Chaque appel d'outil, chaque étape de raisonnement, chaque écriture en mémoire est un point de fuite potentiel. Protège chaque franchissement de frontière.
  • Les sessions scellées éliminent l'état serveur. Les blobs chiffrés AES-256-GCM voyagent avec la requête, scalent horizontalement, et échouent fermé en cas de falsification.
  • La réhydratation sensible à la langue est la différence entre "Dear [NAME]" et "Sehr geehrte Frau Mustermann". Cette différence détermine si ton client enterprise approuve le système.

Construire des systèmes IA qui sont à la fois puissants et conformes au RGPD, ce n'est pas une contradiction. C'est un problème d'architecture. La solution consiste à tracer les bonnes frontières de confiance, préserver les bonnes métadonnées, et contrôler la restauration par canal de sortie.

On a construit OGuardAI comme un runtime open-source exactement pour ce problème. Détecter, transformer, réhydrater avec la tokenisation sémantique, les sessions scellées, et la restauration pilotée par politique. C'est l'architecture décrite dans cet article, packagée comme un système prêt pour la production.

Si tu évalues des architectures IA pour ton entreprise, nos services IA couvrent la stack complète, de la conception de frontière de confiance au déploiement en production. Tu peux aussi explorer notre approche de la protection des données et de la conformité, ou en lire plus sur l'orchestration IA entreprise et la gouvernance IA en production.

Prêt à concevoir une architecture IA conforme au RGPD ? Parle à notre équipe ou demande un devis. On a livré ça pour des systèmes de production qui traitent des milliers d'interactions clients quotidiennement en allemand, arabe, français et anglais.

Sujets couverts

IA RGPDprotection données IAGDPR AIfrontière de confiancetokenisation sémantiquetrust boundaryarchitecture RGPD IAconfidentialité données IAconformité IA UEAI EU Act

Prêt à construire des systèmes IA prêts pour la production ?

Notre équipe est spécialisée dans les systèmes IA prêts pour la production. Discutons de comment nous pouvons aider.

Démarrer une conversation