Introduction

En tant qu'architecte senior ayant déployé des systèmes d'IA en production dans des environnements hautement régulés (finance, santé, secteur public), je peux vous confirmer que la conformité légale des API IA est devenue un impératif non négociable. Les réglementations comme le RGPD, la directive IA européenne, et les lois sectorielles exigent désormais une traçabilité complète et une auditabilité en temps réel de chaque interaction avec les modèles d'intelligence artificielle.

Dans ce tutoriel, je vais vous présenter une architecture complète d'un outil d'audit de conformité pour les API IA, construite autour de l'API HolySheep qui offre des avantages significatifs : un taux de change optimal avec ¥1=$1 soit une économie de 85% par rapport aux fournisseurs traditionnels, une latence inférieure à 50ms qui permet un audit en temps réel sans créer de goulot d'étranglement, et la possibilité de payer via WeChat et Alipay pour les équipes asiatiques.

Vous pouvez vous inscrire ici pour obtenir vos crédits gratuits et commencer à tester cette architecture.

Architecture Globale du Système d'Audit

Le système d'audit de conformité se compose de quatre couches distinctes mais interdépendantes :

Implémentation du Module Principal

Commençons par l'implémentation du client d'audit complet. Ce module intègre nativement les appels à l'API HolySheep pour l'analyse de contenu, tout en maintenant un audit trail complet.

#!/usr/bin/env python3
"""
Compliance Audit Client pour API IA
Auteur: HolySheep AI Technical Team
Version: 2.1.0
License: MIT

Ce module implémente un système complet d'audit de conformité
pour les interactions avec les API d'IA, incluant:
- Journalisation des prompts et réponses
- Détection de PII (Personally Identifiable Information)
- Analyse de contenu réglementé
- Calcul de coûts en temps réel
"""

import asyncio
import hashlib
import hmac
import json
import logging
import time
from dataclasses import dataclass, field, asdict
from datetime import datetime, timedelta, timezone
from enum import Enum
from typing import Any, Optional, Dict, List, Callable, Union
from contextlib import asynccontextmanager
import traceback

Dépendances optionnelles

try: import aiohttp AIOHTTP_AVAILABLE = True except ImportError: AIOHTTP_AVAILABLE = False try: import cryptography from cryptography.fernet import Fernet CRYPTO_AVAILABLE = True except ImportError: CRYPTO_AVAILABLE = False

Configuration HolySheep API

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY" # Remplacez par votre clé

Configuration des tarifs HolySheep 2026 (USD par million de tokens)

HOLYSHEEP_PRICING = { "gpt-4.1": {"input": 8.00, "output": 8.00}, "claude-sonnet-4.5": {"input": 15.00, "output": 15.00}, "gemini-2.5-flash": {"input": 2.50, "output": 2.50}, "deepseek-v3.2": {"input": 0.42, "output": 0.42}, }

Mapping des modèles

MODEL_MAPPING = { "gpt-4": "gpt-4.1", "claude": "claude-sonnet-4.5", "gemini-flash": "gemini-2.5-flash", "deepseek": "deepseek-v3.2", } class AuditLevel(Enum): """Niveaux d'audit disponibles""" MINIMAL = "minimal" # Timestamps et IDs uniquement STANDARD = "standard" # Prompts et réponses hashés FULL = "full" # Contenu complet avec métadonnées COMPLIANCE = "compliance" # Audit complet pour conformité réglementaire class ContentCategory(Enum): """Catégories de contenu pour classification""" CLEAN = "clean" PII_DETECTED = "pii_detected" SENSITIVE_DATA = "sensitive_data" POLICY_VIOLATION = "policy_violation" SUSPICIOUS = "suspicious" COMPLIANT = "compliant" class ViolationType(Enum): """Types de violations potentielles""" NONE = "none" GDPR_PII = "gdpr_pii" # Données personnelles non protégées FINANCIAL_PCI = "financial_pci" # Données de carte bancaire HEALTH_HIPAA = "health_hipaa" # Informations de santé AGE_RESTRICTION = "age_restriction" # Contenu inadapté aux mineurs PROHIBITED_CONTENT = "prohibited" # Contenu interdit par la politique @dataclass class AuditEntry: """Entrée d'audit individuelle""" entry_id: str timestamp: str request_id: str user_id: Optional[str] session_id: str ip_address: Optional[str] model: str prompt_tokens: int completion_tokens: int total_tokens: int cost_usd: float cost_cny: float latency_ms: float prompt_hash: str response_hash: str prompt_preview: str response_preview: str content_category: str violations: List[str] compliance_flags: Dict[str, bool] metadata: Dict[str, Any] def to_dict(self) -> Dict[str, Any]: """Convertit l'entrée en dictionnaire sérialisable""" data = asdict(self) data['timestamp'] = self.timestamp.isoformat() if isinstance(self.timestamp, datetime) else self.timestamp return data @classmethod def from_dict(cls, data: Dict[str, Any]) -> 'AuditEntry': """Crée une entrée depuis un dictionnaire""" if isinstance(data.get('timestamp'), str): data['timestamp'] = datetime.fromisoformat(data['timestamp']) return cls(**data) class CostCalculator: """Calculateur de coûts pour l'API HolySheep""" def __init__(self, pricing: Optional[Dict[str, Dict[str, float]]] = None): self.pricing = pricing or HOLYSHEEP_PRICING def calculate_cost( self, model: str, prompt_tokens: int, completion_tokens: int ) -> Dict[str, Union[float, Dict[str, float]]]: """ Calcule le coût exact en USD et CNY Args: model: Nom du modèle (ex: "deepseek-v3.2") prompt_tokens: Nombre de tokens d'entrée completion_tokens: Nombre de tokens de sortie Returns: Dict contenant les coûts détaillés """ # Normalisation du nom du modèle normalized_model = MODEL_MAPPING.get(model, model) if normalized_model not in self.pricing: # Prix par défaut si modèle non reconnu logging.warning(f"Modèle {model} non reconnu, utilisation du prix DeepSeek") normalized_model = "deepseek-v3.2" pricing = self.pricing[normalized_model] # Calcul des coûts input_cost = (prompt_tokens / 1_000_000) * pricing["input"] output_cost = (completion_tokens / 1_000_000) * pricing["output"] total_usd = input_cost + output_cost # Conversion CNY (taux HolySheep: ¥1 = $1) total_cny = total_usd return { "input_tokens": prompt_tokens, "output_tokens": completion_tokens, "total_tokens": prompt_tokens + completion_tokens, "input_cost_usd": round(input_cost, 6), "output_cost_usd": round(output_cost, 6), "total_usd": round(total_usd, 6), "total_cny": round(total_cny, 6), "model": normalized_model, "pricing_tier": pricing } class PIIAnalyzer: """Analyseur de PII intégré à HolySheep API""" PII_PATTERNS = { "email": r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', "phone_fr": r'\b(?:\+33|0033|0)[1-9](?:[.\-\s]?\d{2}){4}\b', "phone_cn": r'\b1[3-9]\d{9}\b', "ssn_us": r'\b\d{3}-\d{2}-\d{4}\b', "credit_card": r'\b(?:\d{4}[-\s]?){3}\d{4}\b', "iban": r'\b[A-Z]{2}\d{2}[A-Z0-9]{4,30}\b', "passport": r'\b[A-Z]{1,2}\d{6,9}\b', } def __init__(self, api_key: str, base_url: str = HOLYSHEEP_BASE_URL): self.api_key = api_key self.base_url = base_url self._session = None async def analyze_content(self, text: str) -> Dict[str, Any]: """ Analyse le contenu pour détecter les PII Returns: Dict avec les types de PII détectés et leurslocalisations """ import re findings = { "has_pii": False, "pii_types": [], "occurrences": [], "risk_score": 0.0 } for pii_type, pattern in self.PII_PATTERNS.items(): matches = list(re.finditer(pattern, text, re.IGNORECASE)) if matches: findings["has_pii"] = True findings["pii_types"].append(pii_type) for match in matches: findings["occurrences"].append({ "type": pii_type, "value": match.group(), "start": match.start(), "end": match.end() }) # Calcul du score de risque if findings["has_pii"]: findings["risk_score"] = min(1.0, len(findings["occurrences"]) * 0.2) return findings async def analyze_with_ai(self, text: str) -> Dict[str, Any]: """ Utilise HolySheep API pour une analyse sémantique plus approfondie Cette méthode est plus précise pour détecter des PII dans des contextes complexes """ headers = { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" } prompt = f"""Analyse ce texte pour les données personnelles (PII) et conforms au RGPD: Texte à analyser: {text[:2000]} # Limite de caractères Réponds en JSON avec: - pii_detected: boolean - pii_types: array des types trouvés (email, phone, address, name, etc.) - risk_level: low/medium/high/critical - gdpr_violations: array des articles RGPD potentiellement violés - recommendations: array de recommandations de remediation""" payload = { "model": "deepseek-v3.2", # Modèle le plus économique "messages": [ {"role": "user", "content": prompt} ], "temperature": 0.1, "max_tokens": 500 } if not AIOHTTP_AVAILABLE: return {"error": "aiohttp requis pour cette fonctionnalité"} async with aiohttp.ClientSession() as session: async with session.post( f"{self.base_url}/chat/completions", headers=headers, json=payload, timeout=aiohttp.ClientTimeout(total=10) ) as response: if response.status != 200: return {"error": f"API error: {response.status}"} result = await response.json() content = result["choices"][0]["message"]["content"] # Parsing JSON de la réponse try: import json as json_module return json_module.loads(content) except: return {"raw_analysis": content} class ComplianceAuditClient: """ Client principal d'audit de conformité pour les API IA Fonctionnalités: - Journalisation complète de toutes les interactions - Détection automatique de PII - Calcul de coûts en temps réel - Génération de rapports d'audit - Conformité RGPD et autres réglementations """ def __init__( self, api_key: str = HOLYSHEEP_API_KEY, base_url: str = HOLYSHEEP_BASE_URL, audit_level: AuditLevel = AuditLevel.COMPLIANCE, encryption_key: Optional[bytes] = None, storage_backend: Optional[Any] = None ): self.api_key = api_key self.base_url = base_url self.audit_level = audit_level self.audit_log: List[AuditEntry] = [] self.cost_calculator = CostCalculator() self.pii_analyzer = PIIAnalyzer(api_key, base_url) # Configuration du chiffrement si disponible if encryption_key and CRYPTO_AVAILABLE: self.cipher = Fernet(encryption_key) else: self.cipher = None # Backend de stockage self.storage = storage_backend or InMemoryAuditStorage() # Configuration du logging self.logger = logging.getLogger("ComplianceAudit") self.logger.setLevel(logging.INFO) # Compteurs de statistiques self.stats = { "total_requests": 0, "total_tokens": 0, "total_cost_usd": 0.0, "total_cost_cny": 0.0, "violations_detected": 0, "pii_detected": 0, "avg_latency_ms": 0.0 } def _generate_entry_id(self, session_id: str, index: int) -> str: """Génère un ID unique pour l'entrée d'audit""" timestamp = datetime.now(timezone.utc).isoformat() data = f"{session_id}:{index}:{timestamp}" return hashlib.sha256(data.encode()).hexdigest()[:16] def _hash_content(self, content: str) -> str: """Génère un hash SHA-256 du contenu""" return hashlib.sha256(content.encode()).hexdigest() def _create_preview(self, content: str, max_length: int = 200) -> str: """Crée un aperçu tronqué du contenu""" if len(content) <= max_length: return content return content[:max_length] + "..." @asynccontextmanager async def audit_request( self, model: str, messages: List[Dict[str, str]], user_id: Optional[str] = None, session_id: Optional[str] = None, ip_address: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None ): """ Context manager pour auditer une requête API Usage: async with client.audit_request("deepseek-v3.2", messages) as result: response = result["response"] """ session_id = session_id or hashlib.md5(str(time.time()).encode()).hexdigest() request_id = hashlib.uuid4().hex start_time = time.time() # Construire le prompt complet pour l'analyse prompt_text = "\n".join([m.get("content", "") for m in messages]) entry = AuditEntry( entry_id=self._generate_entry_id(session_id, self.stats["total_requests"]), timestamp=datetime.now(timezone.utc), request_id=request_id, user_id=user_id, session_id=session_id, ip_address=ip_address, model=model, prompt_tokens=0, completion_tokens=0, total_tokens=0, cost_usd=0.0, cost_cny=0.0, latency_ms=0.0, prompt_hash=self._hash_content(prompt_text), response_hash="", prompt_preview=self._create_preview(prompt_text), response_preview="", content_category=ContentCategory.CLEAN.value, violations=[], compliance_flags={ "gdpr_compliant": True, "pii_analyzed": False, "encrypted": self.cipher is not None }, metadata=metadata or {} ) result_data = {"entry": entry, "response": None, "error": None} try: # Effectuer la requête API response = await self._make_request(model, messages) # Extraire les informations de la réponse usage = response.get("usage", {}) prompt_tokens = usage.get("prompt_tokens", 0) completion_tokens = usage.get("completion_tokens", 0) # Calculer les coûts costs = self.cost_calculator.calculate_cost(model, prompt_tokens, completion_tokens) # Mettre à jour l'entrée d'audit response_content = response.get("choices", [{}])[0].get("message", {}).get("content", "") entry.prompt_tokens = prompt_tokens entry.completion_tokens = completion_tokens entry.total_tokens = costs["total_tokens"] entry.cost_usd = costs["total_usd"] entry.cost_cny = costs["total_cny"] entry.latency_ms = (time.time() - start_time) * 1000 entry.response_hash = self._hash_content(response_content) entry.response_preview = self._create_preview(response_content) # Analyser le contenu pour PII if self.audit_level in [AuditLevel.FULL, AuditLevel.COMPLIANCE]: pii_analysis = await self.pii_analyzer.analyze_content(prompt_text) if pii_analysis["has_pii"]: entry.content_category = ContentCategory.PII_DETECTED.value entry.compliance_flags["pii_analyzed"] = True entry.violations.append(f"PII_DETECTED:{','.join(pii_analysis['pii_types'])}") # Analyser la réponse également if response_content: response_pii = await self.pii_analyzer.analyze_content(response_content) if response_pii["has_pii"]: entry.content_category = ContentCategory.SENSITIVE_DATA.value entry.violations.append(f"PII_IN_RESPONSE:{','.join(response_pii['pii_types'])}") result_data["response"] = response except Exception as e: entry.violations.append(f"ERROR:{type(e).__name__}") result_data["error"] = str(e) self.logger.error(f"Erreur lors de la requête: {traceback.format_exc()}") finally: # Calculer la latence finale entry.latency_ms = (time.time() - start_time) * 1000 # Mettre à jour les statistiques self._update_stats(entry) # Stocker l'entrée d'audit await self.storage.store(entry) self.audit_log.append(entry) yield result_data async def _make_request( self, model: str, messages: List[Dict[str, str]] ) -> Dict[str, Any]: """Effectue la requête vers l'API HolySheep""" if not AIOHTTP_AVAILABLE: raise RuntimeError("aiohttp est requis. Installez-le: pip install aiohttp") headers = { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" } payload = { "model": model, "messages": messages, "temperature": 0.7, "max_tokens": 4096 } async with aiohttp.ClientSession() as session: async with session.post( f"{self.base_url}/chat/completions", headers=headers, json=payload, timeout=aiohttp.ClientTimeout(total=60) ) as response: if response.status != 200: error_text = await response.text() raise RuntimeError(f"API request failed: {response.status} - {error_text}") return await response.json() def _update_stats(self, entry: AuditEntry): """Met à jour les statistiques globales""" self.stats["total_requests"] += 1 self.stats["total_tokens"] += entry.total_tokens self.stats["total_cost_usd"] += entry.cost_usd self.stats["total_cost_cny"] += entry.cost_cny if entry.violations: self.stats["violations_detected"] += len(entry.violations) if entry.content_category in [ContentCategory.PII_DETECTED.value, ContentCategory.SENSITIVE_DATA.value]: self.stats["pii_detected"] += 1 # Moyenne mobile de la latence n = self.stats["total_requests"] current_avg = self.stats["avg_latency_ms"] self.stats["avg_latency_ms"] = ((current_avg * (n - 1)) + entry.latency_ms) / n async def generate_compliance_report( self, start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, user_id: Optional[str] = None ) -> Dict[str, Any]: """ Génère un rapport de conformité complet Args: start_date: Date de début de la période end_date: Date de fin de la période user_id: Filtrer par utilisateur spécifique Returns: Rapport complet de conformité """ entries = await self.storage.query( start_date=start_date, end_date=end_date, user_id=user_id ) # Calcul des métriques total_entries = len(entries) violation_count = sum(1 for e in entries if e.violations) pii_count = sum(1 for e in entries if e.content_category in [ ContentCategory.PII_DETECTED.value, ContentCategory.SENSITIVE_DATA.value ]) # Répartition par catégorie category_breakdown = {} for entry in entries: cat = entry.content_category category_breakdown[cat] = category_breakdown.get(cat, 0) + 1 # Calcul des coûts par modèle cost_by_model = {} for entry in entries: model = entry.model if model not in cost_by_model: cost_by_model[model] = {"usd": 0.0, "cny": 0.0, "tokens": 0} cost_by_model[model]["usd"] += entry.cost_usd cost_by_model[model]["cny"] += entry.cost_cny cost_by_model[model]["tokens"] += entry.total_tokens return { "report_metadata": { "generated_at": datetime.now(timezone.utc).isoformat(), "period_start": start_date.isoformat() if start_date else None, "period_end": end_date.isoformat() if end_date else None, "user_filter": user_id }, "summary": { "total_requests": total_entries, "total_tokens": sum(e.total_tokens for e in entries), "total_cost_usd": sum(e.cost_usd for e in entries), "total_cost_cny": sum(e.cost_cny for e in entries), "avg_latency_ms": sum(e.latency_ms for e in entries) / max(1, total_entries), "violations_detected": violation_count, "pii_incidents": pii_count, "compliance_rate": ((total_entries - violation_count) / max(1, total_entries)) * 100 }, "category_breakdown": category_breakdown, "cost_by_model": cost_by_model, "violations_detail": [ {"entry_id": e.entry_id, "violations": e.violations} for e in entries if e.violations ] } def get_stats(self) -> Dict[str, Any]: """Retourne les statistiques actuelles""" return self.stats.copy() class InMemoryAuditStorage: """Stockage en mémoire pour les entrées d'audit (production: utilisez une DB)""" def __init__(self): self.entries: List[AuditEntry] = [] self._lock = asyncio.Lock() async def store(self, entry: AuditEntry): """Stocke une entrée d'audit""" async with self._lock: self.entries.append(entry) async def query( self, start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, user_id: Optional[str] = None ) -> List[AuditEntry]: """Interroge les entrées d'audit""" async with self._lock: results = self.entries.copy() if start_date: results = [e for e in results if e.timestamp >= start_date] if end_date: results = [e for e in results if e.timestamp <= end_date] if user_id: results = [e for e in results if e.user_id == user_id] return results

Example d'utilisation

async def main(): """Exemple d'utilisation du client d'audit""" client = ComplianceAuditClient( api_key=HOLYSHEEP_API_KEY, audit_level=AuditLevel.COMPLIANCE ) # Exemple de conversation à auditer messages = [ {"role": "system", "content": "Tu es un assistant médical."}, {"role": "user", "content": "Mon patient Jean Dupont, né le 15/03/1980, " "contact: [email protected], téléphone: 06 12 34 56 78, " "présente ces symptômes depuis une semaine..."} ] async with client.audit_request( model="deepseek-v3.2", messages=messages, user_id="user_12345", session_id="session_abc", metadata={"context": "medical_consultation"} ) as result: if result["error"]: print(f"Erreur: {result['error']}") else: print(f"Réponse reçue: {result['response']}") print(f"Entrée d'audit: {result['entry'].entry_id}") # Générer le rapport de conformité report = await client.generate_compliance_report() print(f"\n=== RAPPORT DE CONPLIANCE ===") print(f"Requêtes totales: {report['summary']['total_requests']}") print(f"Coût total USD: ${report['summary']['total_cost_usd']:.4f}") print(f"Coût total CNY: ¥{report['summary']['total_cost_cny']:.4f}") print(f"Taux de conformité: {report['summary']['compliance_rate']:.1f}%") print(f"Incidents PII: {report['summary']['pii_incidents']}") if __name__ == "__main__": asyncio.run(main())

Module de Détection de Contenu Sensible

Ce module avancé utilise l'analyse sémantique de HolySheep pour détecter les contenus réglementés dans les deux sens (entrée et sortie), avec une précision accrue grâce aux modèles de langage.

#!/usr/bin/env python3
"""
Content Policy Enforcer - Module de détection de contenu sensible
Version: 1.5.0

Ce module implémente:
- Détection de contenus prohibés
- Vérification de conformité age-gating
- Analyse de sentiments pour contenu sensible
- Blacklist/whitelist configurable
- Alertes en temps réel
"""

import asyncio
import re
from typing import Dict, List, Optional, Tuple, Set
from dataclasses import dataclass
from enum import Enum
import json


class ContentType(Enum):
    """Types de contenus sensibles"""
    VIOLENCE = "violence"
    SEXUAL = "sexual"
    HATE = "hate_speech"
    SELF_HARM = "self_harm"
    FRAUD = "fraud"
    ILLEGAL = "illegal_content"
    HARASSMENT = "harassment"
    MISINFORMATION = "misinformation"
    POLITICAL = "political"
    RELIGIOUS = "religious"


class SeverityLevel(Enum):
    """Niveaux de sévérité"""
    SAFE = "safe"
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"


@dataclass
class PolicyViolation:
    """Représente une violation de politique détectée"""
    category: ContentType
    severity: SeverityLevel
    confidence: float  # 0.0 à 1.0
    matched_patterns: List[str]
    suggestion: str
    requires_review: bool
    auto_action: Optional[str] = None  # "block", "redact", "warn"


@dataclass
class PolicyCheckResult:
    """Résultat complet d'une vérification de politique"""
    is_compliant: bool
    violations: List[PolicyViolation]
    overall_risk_score: float
    requires_human_review: bool
    metadata: Dict[str, any]


class ContentPolicyDatabase:
    """Base de données de politiques de contenu"""
    
    # Patterns regex pour détection rapide
    PATTERNS = {
        ContentType.VIOLENCE: [
            (r'\b(tuer|murder|assassiner|homicide)\b', 0.7),
            (r'\b(arme|weapon|gun|pistolet)\b', 0.5),
            (r'\b(bombe|bomb|explosif|explosive)\b', 0.9),
        ],
        ContentType.SEXUAL: [
            (r'\b(sexe|sex|nudité|nudity)\b', 0.6),
            (r'\b(pornographie|pornography)\b', 0.9),
        ],
        ContentType.SELF_HARM: [
            (r'\b(suicide|automutilation|self-harm)\b', 0.9),
            (r'\b(se blesser|hurt oneself)\b', 0.8),
        ],
        ContentType.FRAUD: [
            (r'\b(arnaque|fraud|scam|phishing)\b', 0.7),
            (r'\b(faux compte|fake account)\b', 0.6),
        ],
        ContentType.HARASSMENT: [
            (r'\b(harcèlement|harassment|menace|threat)\b', 0.7),
            (r'\b(doxing|doxxing)\b', 0.9),
        ],
    }
    
    # Blacklist de mots spécifiques
    BLACKLIST = {
        ContentType.VIOLENCE: {"terrorisme", "terrorist", "attentat"},
        ContentType.SELF_HARM: {"suicider", "ends life"},
        ContentType.FRAUD: {"pyramid scheme", "ponzi"},
        ContentType.ILLEGAL: {"drogue", "drug", "stupéfiant"},
    }


class ContentPolicyEnforcer:
    """
    Moteur de vérification de politique de contenu
    
    Fonctionnalités:
    - Analyse par patterns regex (rapide)
    - Analyse sémantique via HolySheep API (précise)
    - Système de scoring de risque
    - Actions automatiques configurables
    """
    
    def __init__(
        self,
        api_key: str,
        base_url: str = HOLYSHEEP_BASE_URL,
        strict_mode: bool = True
    ):
        self.api_key = api_key
        self.base_url = base_url
        self.strict_mode = strict_mode
        self.policy_db = ContentPolicyDatabase()
        
        # Configuration des seuils
        self.thresholds = {
            SeverityLevel.CRITICAL: 0.95,
            SeverityLevel.HIGH: 0.80,
            SeverityLevel.MEDIUM: 0.60,
            SeverityLevel.LOW: 0.40,
        }
        
        # Compteurs de statistiques
        self.stats = {
            "total_checks": 0,
            "violations_blocked": 0,
            "violations_redacted": 0,
            "warnings_issued": 0,
        }
    
    async def check_content(
        self,
        text: str,
        context: Optional[Dict[str, any]] = None
    ) -> PolicyCheckResult:
        """
        Vérifie le contenu contre toutes les politiques
        
        Args:
            text: Texte à vérifier
            context: Contexte additionnel (langage, région, etc.)
            
        Returns:
            PolicyCheckResult avec le verdict complet
        """
        self.stats["total_checks"] += 1
        violations = []
        
        # Étape 1: Vérification par patterns (rapide)
        pattern_violations = await self._check_patterns(text)
        violations.extend(pattern_violations)
        
        # Étape 2: Vérification par blacklist
        blacklist_violations = self._check_blacklist(text)
        violations.extend(blacklist_violations)
        
        # Étape 3: Analyse sémantique via API (si violations suspectées)
        if violations or self.strict_mode:
            semantic_violations = await self._semantic_analysis(text, context)
            violations.extend(semantic_v