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 :
- L'utilisateur écrit son message avec ses vraies données, par exemple son nom et son e-mail.
piighostrepère les valeurs sensibles, par exemple les noms, les e-mails, les téléphones ou les secrets.- 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. - Le modèle répond avec ces jetons.
piighostremet 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étier | Page à lire |
|---|---|
Ce que chaque profil attend de piighost, et comment le vérifier | Besoins par profil |
| Ce que le modèle voit vraiment d'un message | Proté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'autre | Suivre une conversation et restaurer la réponse |
| Ce qui se passe quand on corrige un message à la main | Suivre 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 interne | Imposer 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ésultat | Laisser un outil agir sur les vraies valeurs |
| Pourquoi un jeton apparaît pendant qu'une réponse s'affiche | Afficher 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 mal | Besoins par profil, points de vigilance |
| Où sont stockées les données des conversations, et si elles sont chiffrées | Stocker les conversations et protéger les traces |
Pourquoi piighost fonctionne ainsi, décision par décision | Décisions de conception |
| Le sens d'un terme ou d'un sigle | Glossaire |
| Ce qui est décidé et reste à faire | Points à 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 :
- Laisser un agent agir :
- Mettre en production :
- L'architecture :
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
- Besoins :
- Processus :
- Intégrations :
- Exploitation :
- Architecture :
- Tests :
- Référence :
Points de vigilance transverses
- 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
defaultpartage ses jetons entre tous ses utilisateurs. Seule la commandepiighost anonymizese rabat surdefault, pour essayer un texte isolé. Voir Suivre une conversation. - 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.
- 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
piighostles 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 parpiighost. C'est le cas du résultat d'un outil Claude Code quepiighostne 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. - 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.
- 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.
- 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_openlaisse partir le message sans cette détection ou sans cette vérification. Voir les points de vigilance de Besoins par profil et DEC-19 .