Ga naar inhoud

AI observability quick-start

monsys.ai heeft een passieve, audit-grade observability-laag voor je LLM-applicaties. Deze gids loodst je in vijftien minuten van een leeg account naar je eerste signed evidence pack.

Wat ga je krijgen

  • Een ingest token dat aan een applicatie hangt (één per applicatie).
  • Een SDK (Python, Node of Go, ~150 LOC) die elke LLM-call wrapt in een trace.
  • PII-redactie aan de bron (IBAN-BE, Rijksregister, BTW, KBO, email, telefoon).
  • Per-request kosten en tokens zichtbaar in het dashboard.
  • Anomalie-alerts (kosten-spikes, refusal-spikes, PII-leak rate, …).
  • Een Ed25519-getekend evidence pack dat je per maand kan downloaden, met een offline verifier voor je auditor.

0. Vereiste

Je tenant heeft ai_observability_enabled = true nodig. Dit staat standaard uit. Vraag het aan via info@be-hosted.be of via je beta-onboarding ticket — we flippen het binnen 24u na akkoord op de AI-bijlage van de DPA.

1. Mint een ingest token

In het dashboard:

  1. Linker navigatie → AI
  2. Apps → Nieuwe applicatie
  3. Vul name in (bv. klantenservice-bot)
  4. Kies een redaction_level:
    • off — geen redactie (alleen voor sandbox/test tenants)
    • hash-only — alleen content-hashes worden bewaard, geen raw inhoud
    • pattern-redact — IBAN/RRN/BTW etc. worden vervangen door tokens, rest blijft (default, aanbevolen)
    • full-content-strip — alle vrije tekstvelden worden leeggemaakt
  5. Klik Aanmaken — de token (aiv_...) wordt één keer getoond. Bewaar hem nu, want enkel de SHA256 wordt opgeslagen.

2. Installeer een SDK

Python

Terminal window
# Geen pip install nodig — kopieer monsys_ai.py uit /sdk/python/ in je project
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

Eén HTTP POST per trace, géén batching, géén background threads. Failures loggen, gooien nooit een 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
// ... call your LLM ...
return nil
})
})

3. Verifieer in het dashboard

Binnen enkele seconden zie je:

  • AI → Traces — chronologische lijst, klik voor span-boom met provider, model, tokens, latency, kosten, PII-hits.
  • AI → Apps → klantenservice-bot — totalen per app.
  • AI → Summary — KPI’s over de afgelopen 24u (totaal calls, kosten, refusal rate, PII-hit rate).

4. Onbloot inhoud (TOTP-gated)

Als je tenant redaction_level=hash-only of strikter gebruikt, is de raw inhoud niet zichtbaar in het dashboard. Voor incident-onderzoek kan een admin de inhoud van één specifieke span ontgrendelen:

  1. Open de trace.
  2. Klik op een span → Inhoud ontgrendelen.
  3. Bevestig met je 6-cijfer TOTP-code + een reden (audit log).
  4. De originele (geredacteerde) content verschijnt voor 5 minuten.

Elke ontgrendeling staat in je audit log met user_id, span_id, reason en timestamp.

5. Stel alert-regels in

AI → Alert rules → Nieuwe regel. Voorbeelden:

  • Cost spike: cost_per_minute > 1.00 EUR voor app=klantenservice-bot
  • Refusal spike: refusal_rate_pct > 30% over 15min
  • PII leak: pii_hit_rate_pct > 5%
  • Tool-call anomalie: tool_call_zscore > 3 (vs 7-dagen baseline)

Alerts gaan naar je ntfy-kanaal en/of webhooks. Webhook payloads bevatten alleen content-hashes, geen raw text — zie ADR-0009 invariant 9.

6. Exporteer een evidence pack

AI → Evidence packs → Nieuwe pack:

  • Periode: bv. 2026-04-01 tot 2026-04-30
  • App: alles of één specifieke
  • include_blobs: aan (voor volledige evidence inclusief geredacteerde inhoud)

Klik Aanmaken. Je krijgt een download-URL voor een pack-N.tar.gz.

Inhoud van de tarball:

manifest.json — metadata + content hashes (Ed25519-gesigned)
manifest.sig — Ed25519 signature (base64)
traces.jsonl — één regel per trace
spans.jsonl — één regel per span
blobs/HASH.txt — geredacteerde inhoud per content-hash

7. Offline verificatie (voor je auditor)

Geef je auditor:

  1. De pack-N.tar.gz
  2. Het script tools/evidence-pack-verify.py
  3. (Optioneel) je publieke signing key van https://monsys.ai/security/keys

De auditor draait:

Terminal window
pip install cryptography
python3 evidence-pack-verify.py pack-N.tar.gz

Exit code:

  • 0 — manifest signature valid + alle artifact-hashes matchen
  • 1 — mismatch (tampering of corruptie)

De auditor heeft geen monsys-account nodig. Het script gebruikt de publieke signing key uit het manifest zelf — je kan dit kruislings verifiëren tegen wat monsys publiek vermeldt.

Volgende stappen