PIIShade Tout ce que le modèle sait faire, rien de ce qu'il n'a pas à savoir.
PIIShade remplace les données confidentielles de vos prompts par des jetons avant qu'elles n'atteignent le modèle, puis restitue les vraies valeurs dans la réponse. Détecteurs au choix (regex, NER ou LLM), et des proxys compatibles OpenAI et Anthropic avec le serveur piighost-api.
Se branche sur
- LangChain
- Pydantic AI
- LlamaIndex
from langchain.agents import create_agentfrom piighost.integrations.langchain import PIIAnonymizationMiddleware middleware = PIIAnonymizationMiddleware(pipeline=pipeline) agent = create_agent( model="openai:gpt-5.6", tools=[send_email], middleware=[middleware],)# le modèle ne voit que des jetons ; send_email reçoit les vraies valeursLe problème
Vous ne devriez pas avoir à choisir entre de bons modèles et la confidentialité
Modèle hébergé
- Qualité
- oui, La meilleure
- Données exposées
- non, Toutes
- Contrainte
- oui, Aucune
- Gains
- oui, Oui
Modèle local
- Qualité
- non, Dégradée
- Données exposées
- oui, Aucune
- Contrainte
- non, GPU et exploitation
- Gains
- en partie, Partiels
Interdire
- Qualité
- non, Aucune
- Données exposées
- oui, Aucune
- Contrainte
- oui, Rien
- Gains
- non, Aucun, et contourné
PIIShade
- Qualité
- oui, La meilleure
- Données exposées
- oui, Aucune
- Contrainte
- en partie, Une infra CPU
- Gains
- oui, Oui
Une limite à connaître. PIIShade fait de la pseudonymisation au sens du RGPD, pas de l'anonymisation : les correspondances entre valeurs et jetons sont conservées chez vous le temps de la conversation, et se protègent comme des données personnelles.
Pourquoi PIIShade
Plus qu'un détecteur de PII
Les détecteurs regex et NER savent repérer les données confidentielles. Dé-identifier un échange avec un LLM demande en plus de les remplacer, de les suivre d'un message à l'autre et de les restituer. PIIShade orchestre tout cela pour vous.
Des détecteurs composables
Regex, NER ou LLM, dans un même pipeline. Vous gardez celui en qui vous avez confiance.
Des jetons qui reviennent seuls
Le modèle lit <<PERSON:1>>, votre utilisateur et vos outils lisent le vrai nom.
Le même jeton tout au long
Une valeur garde son jeton d'un message à l'autre, et le modèle ne perd pas le fil.
Un fichier, votre infrastructure
Tout le pipeline tient dans un TOML, validé en ligne de commande, exécuté chez vous.
Détecteurs pris en charge
- Regex
- GLiNER2
- spaCy
- Transformers
- Presidio
Fonctionnement
Une couche entre votre agent et le modèle
Utilisateur → piishade
Envoie le dossier #ACME-9123 à marie.lambert@acme.com
piishade → Modèle
Envoie le dossier <<ID:1>> à <<EMAIL:1>>
Modèle → piishade
send_email(to=<<EMAIL:1>>)
piishade → Outils
send_email(to=marie.lambert@acme.com)
Outils → piishade
E-mail envoyé à marie.lambert@acme.com
piishade → Modèle
E-mail envoyé à <<EMAIL:1>>
Modèle → piishade
Le dossier <<ID:1>> a été envoyé à <<EMAIL:1>>.
piishade → Utilisateur
Le dossier #ACME-9123 a été envoyé à marie.lambert@acme.com.
La colonne du modèle ne contient que des jetons. Même ce que renvoient les outils est dé-identifié avant que le modèle ne le lise.
L'écosystème
Une couche de confidentialité, plusieurs projets
Commencez par la bibliothèque. Passez au serveur quand plusieurs services partagent un pipeline, et voyez l'ensemble à l'œuvre dans la démo de chat et le relecteur de CV.
piighost
La bibliothèque centrale. Construisez des pipelines de dé-identification pour vos agents IA.
En savoir pluspiighost-api
Un serveur REST qui héberge un pipeline PIIShade derrière HTTP.
En savoir pluspiighost-chat
Un chatbot de démonstration qui dé-identifie les messages avant que le LLM ne les voie.
En savoir pluspiighost-proofreader
Un relecteur de CV par LLM qui dé-identifie les documents avant tout appel au LLM.
En savoir plus<<PROJECT_NAME:2b1f4a>>
À venir.
<<PROJECT_NAME:7c43e9>>
À venir.
<<PROJECT_NAME:9af0d2>>
À venir.
<<PROJECT_NAME:1e8c75>>
À venir.
<<PROJECT_NAME:f30b86>>
À venir.
Démarrage rapide
Branchez-le sur votre framework d'agent
Ajoutez PIIShade au framework que vous utilisez déjà. Votre code d'agent reste le même.
uv add 'piighost[langchain,gliner2]' from langchain.agents import create_agent from piighost.components.detector.ner import Gliner2Detectorfrom piighost.pipeline import ThreadAnonymizationPipelinefrom piighost.integrations.langchain import PIIAnonymizationMiddleware # N'importe quel détecteur convient : regex, NER ou LLM.detector = Gliner2Detector("fastino/gliner2-multi-v1", labels=["PERSON", "LOCATION"])pipeline = ThreadAnonymizationPipeline(detector)middleware = PIIAnonymizationMiddleware(pipeline=pipeline) agent = create_agent( model="openai:gpt-5.6-terra", tools=[lookup_city], middleware=[middleware],) # Le modèle ne voit que <<PERSON:1>>, lookup_city reçoit « Patrick ».FAQ
Questions fréquentes
Une question qui n'est pas ici ? La communauté et la documentation répondent.
Pourquoi dé-identifier plutôt qu'héberger le modèle soi-même ?
<<PERSON:1>> sortent de chez vous. C'est une couche de défense, pas une solution miracle. La page Philosophie détaille le compromis.De quoi ai-je besoin en production ?
load_thread_pipeline pour une conversation (load_pipeline pour un texte isolé). pip install 'piighost[config]' suffit pour des regex ; ajoutez l'extra de votre détecteur (gliner2, spacy, transformers ou llm), et redis pour partager la mémoire entre processus. Plusieurs services ? Déployez piighost-api.Puis-je utiliser PIIShade avec Claude Code ?
pip install 'piighost[client]'.Quels frameworks sont pris en charge ?
base_url.PIIShade est-il conforme au RGPD ?
Quelle différence entre anonymisation et dé-identification ?
Qu'est-ce qui est réellement envoyé au modèle ?
<<PERSON:1>>. La correspondance reste de votre côté le temps de la conversation, et PIIShade restaure les valeurs localement.Tout ce que le modèle sait faire,
rien de ce qu'il n'a pas à savoir.
Livrez vos fonctionnalités d'IA sans donner les données confidentielles de vos clients. Installez PIIShade, branchez votre détecteur et gardez les données personnelles hors du modèle.
LlamaIndex
GLiNER2
spaCy
Presidio