Aller au contenu

Par où commencer

En bref

piighost masque les données confidentielles d'un texte avant qu'un modèle d'IA le lise, puis remet les vraies valeurs dans la réponse. C'est une bibliothèque Python, sans interface graphique. Elle se branche sur LangChain, Pydantic AI, LlamaIndex ou Claude Code, ou s'utilise à distance par le serveur piighost-api. Elle se configure par un fichier TOML ou JSON et par la commande piighost. Les raisons de dé-identifier, juridiques et techniques, sont expliquées dans Pourquoi dé-identifier ?.

Le trajet d'un message :

  1. L'utilisateur écrit son message avec ses vraies données, par exemple son nom et son e-mail.
  2. piighost repère les valeurs sensibles, par exemple les noms, les e-mails, les téléphones ou les secrets.
  3. Il les remplace par des jetons. Un jeton est un texte de remplacement, comme <<PERSON:1>>, qui reste le même dans toute la conversation.
  4. Le modèle répond avec ces jetons.
  5. piighost remet les vraies valeurs dans la réponse affichée.

Ce qu'est cette documentation métier. Elle décrit ce que piighost doit faire. La façon de l'utiliser est dans la documentation technique. On y définit :

  • les besoins de chaque profil, c'est-à-dire le responsable conformité, le développeur, l'exploitant et l'utilisateur de l'application.
  • les règles que suit chaque traitement, chacune avec son identifiant, comme BR-MSG-05.
  • les tests d'acceptation qui vérifient chaque besoin.
  • l'endroit du code où chaque règle s'applique.

Son objectif. Dé-identifier une conversation avec un LLM est une pratique encore nouvelle, et ses règles ne sont écrites nulle part. Cette documentation les écrit, pour qu'on puisse les discuter, les vérifier et les faire évoluer ensemble. Chacun peut proposer un besoin ou contester une règle.

Comment la lire. Commencez par Besoins par profil pour trouver ce qui concerne votre profil. En cas de désaccord, le code et les tests ont raison. Les termes sont définis dans le glossaire.

Je cherche à comprendre…

Besoin métierPage à lire
Ce que chaque profil attend de piighost, et comment le vérifierBesoins par profil
Ce que le modèle voit vraiment d'un messageProtéger un message avant l'envoi au modèle
Pourquoi un nom est resté en clair, ou à moitiéProtéger un message avant l'envoi au modèle
Comment une personne garde le même jeton d'un message à l'autreSuivre une conversation et restaurer la réponse
Ce qui se passe quand on corrige un message à la mainSuivre une conversation et restaurer la réponse
Comment effacer une conversation (droit à l'effacement)Suivre une conversation et restaurer la réponse
Garder le nom de l'entreprise en clair, ou toujours masquer un code interneImposer une liste à masquer et une liste à laisser en clair
Ce que reçoit un outil de l'agent, et ce que le modèle lit de son résultatLaisser un outil agir sur les vraies valeurs
Pourquoi un jeton apparaît pendant qu'une réponse s'afficheAfficher une réponse au fil de l'eau
Ce que voit chaque acteur selon l'outil utilisé (LangChain, Claude Code…)Brancher la protection sur un agent et ses outils
Ce qui se passe quand un modèle répond malBesoins par profil, points de vigilance
Où sont stockées les données des conversations, et si elles sont chiffréesStocker les conversations et protéger les traces
Pourquoi piighost fonctionne ainsi, décision par décisionDécisions de conception
Le sens d'un terme ou d'un sigleGlossaire
Ce qui est décidé et reste à fairePoints à régler

Pourquoi piighost fonctionne ainsi

Chaque règle découle d'une décision de conception. La page Décisions de conception les explique dans l'ordre où elles se sont posées, avec un exemple pour chacune.

  • Dé-identifier un texte :
    • DEC-01  : Remplacer chaque donnée confidentielle par un jeton.
    • DEC-02  : Trouver chaque valeur et sa position exacte.
    • DEC-03  : Encadrer chaque jeton par << et >>.
    • DEC-04  : Dire dans le jeton de quel type de donnée il s'agit.
    • DEC-05  : Donner à chaque entité son propre identifiant.
    • DEC-06  : Regrouper les détections d'une même entité.
    • DEC-07  : Ne garder qu'un passage quand deux détections se recouvrent.
    • DEC-08  : Garder la correspondance pour restaurer les vraies valeurs.
    • DEC-09  : Laisser corriger la détection.
    • DEC-10  : Relire le texte protégé avant l'envoi, en option.
  • Tenir une conversation :
    • DEC-11  : Garder le même jeton pendant toute la conversation.
    • DEC-12  : Exiger l'identifiant de la conversation.
    • DEC-13  : Neutraliser un jeton tapé par l'utilisateur.
    • DEC-14  : Refuser un jeton inventé par le modèle.
    • DEC-15  : Laisser en clair une valeur que l'assistant cite le premier.
  • Laisser un agent agir :
    • DEC-16  : Donner la vraie valeur aux outils, et le jeton au modèle.
    • DEC-17  : Restaurer la réponse pendant qu'elle arrive.
  • Mettre en production :
    • DEC-18  : Protéger la mémoire stockée.
    • DEC-19  : Préférer la protection à la disponibilité.
    • DEC-20  : Configurer un pipeline par fichier et par le catalogue.
  • L'architecture :
    • DEC-21  : Faire de chaque étape un port remplaçable.
    • DEC-22  : Rendre asynchrones les étapes qui attendent.

Modifier le code

Pour modifier le code, la documentation technique indique quelles pages lire et quels fichiers ouvrir. Voir Modifier le code de piighost.

Les groupes de la documentation métier

Points de vigilance transverses

  1. L'identifiant de conversation décide du partage des jetons. Un appel sans identifiant est refusé, par LangChain, les hooks Claude Code et le serveur. Une application qui nomme default partage ses jetons entre tous ses utilisateurs. Seule la commande piighost anonymize se rabat sur default, pour essayer un texte isolé. Voir Suivre une conversation.
  2. Corriger un message ancien peut renuméroter les jetons, et une réponse du modèle peut alors être restaurée avec le nom d'une autre personne. Voir Suivre une conversation.
  3. Des vraies valeurs restent stockées hors du modèle. Le modèle ne voit que des jetons, mais deux endroits gardent les vraies valeurs. La mémoire de piighost les garde en clair si son stockage n'est pas chiffré. L'historique que l'agent enregistre, avec LangGraph ou Pydantic AI, garde le texte des messages restauré. Certains textes ne passent pas non plus par piighost. C'est le cas du résultat d'un outil Claude Code que piighost ne relit pas, comme Grep. C'est aussi le cas du résultat d'un outil dont le réglage l'envoie en clair au modèle, voir Laisser un outil agir. Chiffrez la mémoire, et protégez l'historique de l'agent comme une donnée personnelle. Voir Stocker les conversations et Brancher la protection sur un agent.
  4. Les traces techniques portent le texte en clair par défaut. Configurez un masqueur de traces avant de les envoyer à un service tiers. Voir Stocker les conversations et protéger les traces.
  5. Effacer une conversation ne vide pas tout de suite les autres instances du serveur. Le stockage et l'instance qui reçoit la demande sont vidés. Les autres instances gardent une copie des valeurs dans leur cache de jetons, jusqu'à la fin de la durée de vie de ce cache. Sans durée de vie réglée, la copie reste jusqu'à ce que le cache plein la chasse. Voir Stocker les conversations.
  6. Un détecteur ou un garde-fou LLM refuse le message quand il ne peut pas lire la réponse de son propre LLM. Le message ne part pas, et l'application reçoit une erreur. Le réglage fail_open laisse partir le message sans cette détection ou sans cette vérification. Voir les points de vigilance de Besoins par profil et DEC-19 .