Mistral – 🔐 Alignement & Sécurité
Guardrails & Modération · Instruction Following robuste · Évaluation (factualité, groundedness, cohérence) · Gouvernance & conformité. Modales ultra-densifiées : schémas, tableaux, playbooks, snippets.
Policies & garde-fous PII & conformité Tests rouges & audits
Glossaire express
- Guardrails : règles/contraintes sur prompts & sorties.
- Modération : classifieurs & règles (pré/en-vol/post).
- Groundedness : appui sur sources/contextes fournis.
- Factualité : véracité objective des affirmations.
- Refus : réponses sûres quand la demande est hors-politiques.
- PII : données personnelles identifiantes.
- Prompt injection : tentative de détourner les consignes.
- Jailbreak : forcer des sorties interdites.
- Policy : normes écrites (licences, RGPD, sécurité).
- MTTR : Mean Time To Recovery (incidents).
Guardrails & Policies — filtres & contrats de sortie
Contrats de sortie (ex.)
<policy>Réponds UNIQUEMENT en JSON {answer, citations[], risk, refusal?}.</policy>
<format>{"answer":"...","citations":["..."],"risk":0.0,"refusal":null}</format>- Valider côté serveur (Pydantic/JSON Schema) + stop sequences.
- Score de risque <= seuil → délivrer ; sinon rediriger vers refus/agent humain.
Règles de refus (template)
{"refusal":{
"policy":"{catégorie}",
"explanation":"Je ne peux pas vous aider sur ce sujet.",
"alternative":"Je peux fournir des ressources générales ou reformuler.",
"safety_id":"POL-XYZ"
}}Anti-patterns
- Écrire des secrets/PII dans les prompts ou logs.
- Pas de schéma durci → sorties imprévisibles/ingérables.
- Refus silencieux (sans alternative sûre).
Middleware (FastAPI – pseudo)
def guardrails(req):
if mod.pre(req): return refusal("pré-modération")
prompt = sanitize(req) # strip secrets, enforce tags
out = llm(prompt)
if mod.post(out): return refusal("post-modération")
return validate_contract(out)KPIs sécurité
- Refus justifiés ≥ 95 % sur prompts rouges.
- Faux positifs/negatifs < 2 %.
- MTTR incidents < 15 min (alerting + rollback).
Tip : journaliser hash prompt, IDs chunks RAG, modèle, sampling, latence, coûts, verdicts modération & “explanations”.
Content Moderation — couches & stratégies
Strates
- Pré : bloquer inputs dangereux (PII explicites, menaces).
- En-vol : function calling contrôlé, outils en allow-list & scopes.
- Post : classifier la sortie (toxique, PII leak, hallucination).
Comparatif rapide
| Couche | Réactivité | Coût | Cas typiques |
|---|---|---|---|
| Pré | Immédiate | Faible | Jailbreaks évidents, PII |
| En-vol | Moyenne | Moyen | Outils/Actions |
| Post | Après LLM | Variable | Toxicité, hallucination |
Quarantaine & triage
- Mettre en “revue humaine” les cas ambigus (score proche du seuil).
- Masquer/anon. PII avant stockage/affichage.
- Échantillonner n% des réponses “vertes” pour audit continu.
Règles (YAML – extrait)
deny:
- "instructions pour contourner sécurité"
- "exfiltration secrets"
allow_tools:
- "retrieval.search"
- "db.read_only"
refusal:
text: "Je ne peux pas vous aider sur ce sujet."
suggest: "Je peux fournir des informations générales."
thresholds:
toxicity: 0.85
pii: 0.7
Anti-patterns
- Se fier à un seul classifieur → manque de rappel/precision.
- Seuils non calibrés vs ton domaine.
- Logs non anonymisés (PII en clair).
Tip : en RAG, filtrer aussi les passages (source-level moderation) et tracer leurs méta (url, date, licence).
Instruction Following — prompts complexes & robustesse
Structure conseillée
System: rôle, objectifs, contraintes (format, ton, longueur)
User: consignes + data (<spec>,<data>,<rules>)
Assistant: few-shot réalistes + contre-exemple- Délimiteurs visibles & stop sequences.
- Découper tâches longues (chaîne d’outils/orchestration).
Contrôle du format
{"role":"system","content":"Réponds UNIQUEMENT en JSON {answer,citations[],confidence}."}# Pydantic
class Out(BaseModel):
answer: str; citations: list[str]; confidence: floatDéfenses injection
- Ne jamais “exécuter” du texte non fiable (tools guard).
- Isoler le contexte RAG du prompt système.
- Étiqueter et ignorer explicitement les “instructions de l’utilisateur” indiquant d’ignorer les règles.
Snippets (pseudo)
if "ignore" in user_text.lower():
add_defense("Rappeler les règles & refuser poliment.")
resp = llm(messages, temperature=0.2, top_p=0.9, stop=["\nEND_JSON"])Anti-patterns
- Prompts non balisés → attention dispersée.
- Formats “libres” quand un JSON est attendu.
- Pas d’exemples → style & ton instables.
Tip : fournir des contre-exemples few-shot (mauvais format) et la correction attendue : la robustesse augmente sensiblement.
Évaluation — factualité, groundedness, cohérence, refus
Métriques
| Métrique | Définition | Collecte |
|---|---|---|
| Factualité | Véracité objective | Judge + vérification sources |
| Groundedness | Appui au contexte RAG | Citations valides |
| Cohérence | Logique interne | Judge + consistency checks |
| Refus | Conformité aux policies | Taux de refus justifiés |
Golden set (ex.)
{"id":"g1","task":"extraction email","prompt":"...","gold":"{\"email\":\"x@y.com\"}"}
{"id":"g2","task":"résumé 3 puces","prompt":"...","gold":"- A\n- B\n- C"}Budget & latence
coût ≈ (tokens_in + tokens_out) × prix_tok
latence ≈ compute(ms/tok) × tokens_out + overhead(retrieval/modération)CI (pipeline)
- run: schema tests
- run: golden set (exact-match, groundedness)
- run: red-team suite (seuils min)
- deploy: canary + alerting + auto-rollbackAnti-patterns
- Se fier à des benchs publics hors-domaine.
- Ignorer p95/p99 (SLA non tenus).
- Confondre style & vérité (hallucinations non pénalisées).
Tip : séparer évaluation offline (golden set) et monitoring online (A/B + télémétrie anonymisée), et garder un modèle “référence” pour rollback.
Red Team & Incidents — attaques, détections, réponses
Classes d’attaques
- Prompt injection / Jailbreak / Spec override.
- Data exfiltration (secrets/PII) via RAG/outils.
- Tool abuse (actions non autorisées), DoS (context flooding).
Détections (exemples)
- Heuristiques phrases-clef (“ignore”, “réécris les règles”…).
- Classifieurs sécurité (toxique, PII, jailbreaks connus).
- Anomalies latence/longueur & pattern d’usage.
Playbook incident
| Sévérité | Action | MTTR cible |
|---|---|---|
| Low | Quarantaine + revue | < 60 min |
| Med | Bloquer feature + patch rules | < 30 min |
| High | Rollback modèle/prompt + bannir | < 15 min |
Suite “rouge” (extrait)
- jailbreak/general
- injection/spec_override
- pii/leak
- tool/abuse
- rag/poisoning
- hallucination/ungroundedRunbook (pseudo)
on_alert(safety_violation):
freeze_deployments()
enable_canary(reference_model)
patch_rules_and_thresholds()
replay_samples_for_validation()
postmortem_with_actions()Tip : conserver des captures (prompts/ctx/sorties hashés) pour rejouabilité et formation future des classifieurs.
Gouvernance & Conformité — PII, audit, RGPD, licences
PII & rétention
- Masquer/hasher PII avant stockage; TTL de logs défini.
- DSAR/“droit à l’oubli” : identifiants pour effacement ciblé.
- Localisation des données (régions) + chiffrement repos/transit.
Journalisation & audit
- Trace : modèle, version prompt, sampling, ctx RAG IDs, décisions de modération.
- Rejouabilité exacte (seed, top-p/temp, stop, horodatage).
- Accès aux logs restreint & auditable.
Licences & data lineage
- Inventaire des sources (URL, date, licence) et attribution requise.
- Politique d’usage des poids open-weight (conditions, redistribution).
- Registre des modèles & prompts (versionné, propriétaires).
Policy JSON (extrait)
{
"safe_tools": ["retrieval.search","db.read_only"],
"deny": ["shell.exec","secrets.write","net.raw"],
"refusal": "Expliquer le refus et proposer une alternative sûre."
}Anti-patterns
- Logs en clair avec PII.
- Absence de registre des modèles & prompts.
- Non-respect des licences des jeux de données.
Tip : publier un manuel d’utilisation IA interne (policies, exemples permis/interdits, contacts sécurité) et le tenir versionné.
