Aller au contenu

Quick-start observabilité IA

monsys.ai propose une couche d’observabilité passive et de niveau audit pour vos applications LLM. Ce guide vous mène d’un compte vide à votre premier evidence pack signé en environ quinze minutes.

Ce que vous obtenez

  • Un token d’ingestion lié à une application (un par application).
  • Un SDK (Python, Node ou Go, ~150 LOC) qui enveloppe chaque appel LLM dans une trace.
  • Rédaction PII à la source (IBAN-BE, RRN, BTW, KBO, email, téléphone).
  • Coûts et tokens par requête dans le dashboard.
  • Alertes d’anomalies (pics de coût, pics de refus, taux de fuite PII…).
  • Un evidence pack signé Ed25519 téléchargeable par période, avec un vérifieur offline pour votre auditeur.

0. Prérequis

Votre tenant doit avoir ai_observability_enabled = true. C’est désactivé par défaut. Demandez-le via info@be-hosted.be ou via votre ticket d’onboarding beta — nous activons le flag dans les 24h après signature de l’avenant IA du DPA.

1. Générer un token d’ingestion

Dans le dashboard :

  1. Nav à gauche → IA
  2. Applications → Nouvelle
  3. Remplissez name (ex. bot-support)
  4. Choisissez un redaction_level :
    • off — aucune rédaction (sandbox/test uniquement)
    • hash-only — seuls les hashes de contenu sont stockés
    • pattern-redact — IBAN/RRN/BTW remplacés par des jetons, reste préservé (défaut, recommandé)
    • full-content-strip — chaînes vides pour tous les champs texte libre
  5. Cliquez Créer — le token (aiv_...) n’est affiché qu’une fois. Sauvegardez-le maintenant ; seul le SHA256 est conservé.

2. Installer un SDK

Python

Fenêtre de terminal
# Pas de pip install — copiez monsys_ai.py depuis /sdk/python/
export MONSYS_AI_ENDPOINT=https://api.monsys.ai/api/v1/ai/ingest
export MONSYS_AI_TOKEN=aiv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
from monsys_ai import Tracer
tracer = Tracer()
with tracer.trace("rag.chat") as t:
with t.span("openai.chat", provider="openai", model="gpt-4o") as s:
s.prompt = user_msg
resp = client.chat.completions.create(...)
s.completion = resp.choices[0].message.content
s.input_tokens = resp.usage.prompt_tokens
s.output_tokens = resp.usage.completion_tokens

Un POST HTTP par trace, pas de batching, pas de threads en arrière-plan. Les erreurs sont loggées ; elles ne lèvent jamais d’exception.

Node (TypeScript)

import { Tracer } from "./monsys-ai";
const tracer = new Tracer();
await tracer.trace("rag.chat", async (t) => {
await t.span("openai.chat", { provider: "openai", model: "gpt-4o" }, async (s) => {
const resp = await openai.chat.completions.create({...});
s.record({
prompt: userMsg,
completion: resp.choices[0].message.content!,
inputTokens: resp.usage!.prompt_tokens,
outputTokens: resp.usage!.completion_tokens,
});
});
});

Go

tracer, _ := monsysai.New(monsysai.Options{})
_ = tracer.Trace(ctx, "rag.chat", func(t *monsysai.Trace) error {
return t.Span(ctx, "openai.chat",
monsysai.SpanOpts{Provider: "openai", Model: "gpt-4o"},
func(s *monsysai.Span) error {
s.Prompt = userMsg
return nil
})
})

3. Vérifier dans le dashboard

En quelques secondes vous verrez :

  • IA → Traces — liste chronologique, cliquez pour l’arbre de spans avec provider, modèle, tokens, latence, coût, hits PII.
  • IA → Applications → bot-support — totaux par app.
  • IA → Résumé — KPIs sur les dernières 24h.

4. Déverrouiller du contenu (TOTP-gated)

Si votre tenant utilise redaction_level=hash-only ou plus strict, le contenu brut n’est pas visible dans le dashboard. Pour une enquête incident, un admin peut déverrouiller le contenu d’un span spécifique :

  1. Ouvrez la trace.
  2. Cliquez sur un span → Déverrouiller le contenu.
  3. Confirmez avec votre code TOTP 6 chiffres + une raison (audit log).
  4. Le contenu original (rédigé) s’affiche pendant 5 minutes.

Chaque déverrouillage est enregistré avec user_id, span_id, raison et timestamp.

5. Configurer des règles d’alerte

IA → Règles d’alerte → Nouvelle règle. Exemples :

  • Pic de coût : cost_per_minute > 1.00 EUR pour app=bot-support
  • Pic de refus : refusal_rate_pct > 30% sur 15min
  • Fuite PII : pii_hit_rate_pct > 5%
  • Anomalie tool-call : tool_call_zscore > 3 (vs baseline 7 jours)

Les alertes vont vers votre canal ntfy et/ou webhooks. Les payloads webhook contiennent uniquement des hashes, pas de texte brut — voir ADR-0009 invariant 9.

6. Exporter un evidence pack

IA → Evidence packs → Nouveau pack :

  • Période : ex. 2026-04-01 à 2026-04-30
  • App : toutes ou une spécifique
  • include_blobs : activé (pour preuves complètes avec contenu rédigé)

Cliquez Créer. Vous obtenez une URL de téléchargement pour pack-N.tar.gz.

Layout :

manifest.json — métadonnées + hashes de contenu (signé Ed25519)
manifest.sig — signature Ed25519 (base64)
traces.jsonl — une ligne par trace
spans.jsonl — une ligne par span
blobs/HASH.txt — contenu rédigé par hash

7. Vérification offline (pour votre auditeur)

Donnez à votre auditeur :

  1. Le pack-N.tar.gz
  2. Le script tools/evidence-pack-verify.py
  3. (Optionnel) notre clé publique de signature depuis https://monsys.ai/security/keys

L’auditeur lance :

Fenêtre de terminal
pip install cryptography
python3 evidence-pack-verify.py pack-N.tar.gz

Code de sortie :

  • 0 — signature valide + tous les hashes d’artifacts matchent
  • 1 — mismatch (altération ou corruption)

L’auditeur n’a pas besoin de compte monsys. Le script utilise la clé publique embarquée dans le manifest ; vous la croisez avec ce que monsys publie publiquement.

Étapes suivantes