Your classical models (churn, credit, forecasting) still carry the business, and their monitoring has a labor problem, not a detection problem: drift detectors fire, and then a human spends an hour turning statistics into a diagnosis nobody else can read.
Tier: Core · Workflow area: Serving & LLMOps
This playbook keeps detection fully deterministic — Evidently computing drift metrics on schedule — and adds an LLM only where language is the bottleneck: drafting the diagnosis narrative and a retrain recommendation from the computed numbers, for a human to verify and send.
Detection itself stays statistical — do not ask an LLM to look at two distributions and decide whether they differ; that is what tests are for.
pip install evidently mlflow — recent Evidently versions use from evidently import Report with presets from evidently.presets (older 0.4-era code imports from evidently.report/evidently.metric_preset; check your installed version).Compute drift deterministically. A scheduled job runs an Evidently report — data-drift preset per feature (PSI/KS/Jensen-Shannon as configured), prediction-drift, and data-quality checks (nulls, new categories, range violations). Export the structured JSON, not just the HTML; log both to MLflow as artifacts of a "monitoring" run so history accumulates.
Build the context package for the narrative. From the JSON, extract: features flagged, their drift scores and directions (means/quantiles before vs after), prediction distribution shift, data-quality failures, plus static context you author once per model — what each feature means in business terms, known seasonal patterns, last retrain date, and the model's performance-vs-drift sensitivity if you have it.
Prompt for diagnosis, tightly scoped. The instruction that keeps this honest: use only the numbers provided; every claim must reference a specific metric; separate observation ("tenure PSI 0.31, mean up 14%") from hypothesis ("consistent with the March pricing change shifting the acquisition mix — flagged as hypothesis"); end with one of {no action / investigate / retrain recommended} and the specific evidence for it. Ask for a 10-line executive section plus a per-feature appendix.
Verify like pb-01 taught you. Check every number in the draft against the JSON (they must match exactly — this is the highest-value 5 minutes), sanity-check hypotheses against what you know actually happened, then edit and send under your name. The LLM drafts; you diagnose.
Wire the loop into alerting. Quiet weeks: report filed to MLflow, no ping. Threshold breaches: narrative posted to the team channel with the HTML report linked. Retrain recommendations: route into your pb-45 flow if you built it — the drift narrative becomes the retrain agent's justification input.
Calibrate over a month. Track narrative errors caught in review (target: zero number errors after prompt iteration) and whether recommendations matched what you would have decided unaided.
The division of labor is absolute: statistics decide whether something changed; the LLM only explains what the numbers say in language stakeholders read; the human owns what to do. Blur the first boundary and you have replaced a KS-test with vibes.
Evidently and MLflow are local; the only external touchpoint is the LLM call, and the context package contains aggregates, not records — often acceptable even under strict policies. Where it is not, a small local model (Ollama/vLLM) handles this summarization task well; it is among the least demanding LLM tasks in this track.
Author one narrative-prompt template shared across all monitored models, with per-model context files — consistency across reports is itself a product feature for the leadership audience.