Aller au contenu

Conformité — règles d'organisation

La Conformité est une couche optionnelle qui vérifie chaque requête API de votre compte selon des règles que vous définissez, avant qu’elle n’atteigne le modèle. Détection de données personnelles, périmètre d’usage, souveraineté, ton — appliqués automatiquement, côté Astrolabe Chat (France/UE).

Un interrupteur global pour tout le compte :

ModeEffet
ObservationLes règles sont seulement journalisées — rien n’est bloqué ni modifié. Idéal pour roder vos règles avant de les appliquer.
ApplicationLes règles s’appliquent réellement (masquage, anonymisation, blocage, réécriture).

Détection déterministe (sans IA générative), par type. Pour chaque type, une action :

ActionEffet
Ne pas contrôlerType ignoré
MasquerLa donnée est remplacée par <type> (ex. <e-mail>) avant le modèle
AnonymiserRemplacée par un code stable <type:abc123> — même donnée → même code (cohérence préservée dans la requête)
BloquerLa requête est rejetée (400) si ce type est détecté

Types détectés : e-mail, téléphone, nom, adresse/lieu, IBAN, carte bancaire, adresse IP, URL, portefeuille crypto, NIR (sécurité sociale), RNA (association), SIREN, SIRET, passeport, plaque d’immatriculation.

  • Modèles auto-hébergés uniquement : n’autorise que les modèles servis sur notre propre infra (astrolabe-*) et rejette tout modèle en cloud — y compris les modèles UE (mistral-*, pourtant sous juridiction UE) —, même demandés explicitement → requête rejetée (400). C’est le cran le plus strict de la souveraineté : au-delà de « données en UE », « données jamais hors de notre infra ».
  • Longueur maximale d’une requête (caractères) → au-delà, rejet (400).

Des règles en langage naturel (ce qui est autorisé, le ton attendu, le vocabulaire à employer), vérifiées par un modèle de garde souverain. En cas de non-respect :

  • Bloquer : requête rejetée (400),
  • Réécrire : la requête est corrigée avant d’être transmise (sinon bloquée).

Une requête rejetée renvoie un 400 avec un message explicite :

{
"error": {
"message": "Requête refusée par les règles de votre organisation : la requête contient des données personnelles interdites (e-mail).",
"code": "400"
}
}
from openai import OpenAI, BadRequestError
client = OpenAI(base_url="https://api.astrolabe.chat/v1", api_key="sk-…")
try:
r = client.chat.completions.create(
model="mistral-small",
messages=[{"role": "user", "content": ""}],
max_tokens=300,
)
except BadRequestError as e:
# Règle de conformité violée → message dans e.message ; adapter la requête.
print("Refusé :", e.message)
  • Détection de noms et lieux : très bonne en français, jamais parfaite (modèle statistique).
  • Le filtrage est un filet de sécurité robuste, pas une garantie absolue — à compléter par vos propres bonnes pratiques.