Problem Context
Offline evals (a fixed test set in CI) catch the regressions you can imagine. Online evals catch the regressions only your real users generate: surprise topic mixes, new languages, abusive inputs, and slow degradations from prompt drift. Without online evals, your first signal of quality decay is a customer complaint โ and by then the bad responses are weeks old.
- You ship a prompt change, CI is green, users complain three days later
- You have no number for "is the answer actually good?" in production
- Your only quality signal is thumbs-down clicks, which lag by hours and bias toward angry users
The Three Online Eval Modes
- Reference-free heuristics โ schema valid, language detect, length plausible, citation present. Fast, cheap, run on 100%.
- LLM-as-judge โ a separate model scores faithfulness, relevance, harmfulness against a rubric. Run on 1โ5% of traffic.
- Implicit user signals โ click-through, copy event, follow-up question, abandonment. Free, noisy, lagging.
flowchart LR
P[Production request] --> R[Response]
R --> H[Heuristics: schema/language/length]
H --> S{Sample 1โ5%}
S -- yes --> J[LLM-as-judge:<br/>faithfulness, relevance, harm]
J --> M[Metric: eval.score]
R --> UI[User UI]
UI --> IM[Implicit signals:<br/>copy, follow-up, abandon]
IM --> M
LLM-as-Judge: The Three Rubrics That Matter
- Faithfulness โ does the answer only state things supported by the retrieved context? Critical for RAG.
- Relevance โ does the answer address the question that was asked? Catches off-topic drift.
- Safety/policy โ does the response violate your content rules? Complements your guardrails.
Use a smaller, cheaper model as the judge (gpt-4o-mini, claude-haiku) with a strict rubric and a 1โ5 score. Calibrate the judge against a human-labelled set before trusting it โ judges drift too.
Rubric: Faithfulness (1โ5)
5 Every claim is directly supported by the context.
4 All key claims supported; minor unsupported detail.
3 Mix of supported and unsupported claims.
2 Mostly unsupported; one or two grounded claims.
1 Hallucinated; nothing in the context.
Return JSON: { "score": int, "unsupported_claims": [string] }Implicit Signals: Treat as Hints, Not Truth
Implicit signals are great as early-warning indicators but terrible as ground truth (users abandon for many reasons unrelated to quality). Useful pairings:
- Drop in "copy answer" events on the support widget โ answers got less actionable.
- Spike in "ask again" rate โ answers got less clear.
- Increase in average follow-up turn count โ first-turn answer is missing context.
Sampling Strategy
- Run heuristic checks on 100% โ cost is essentially zero.
- LLM-as-judge on 1โ5% steady-state, ramped to 100% on a deploy for 24h.
- Always evaluate all negative-feedback responses (free training set for offline evals).
- Always evaluate a stratified sample (per tenant, per language, per endpoint) so small segments aren't invisible.
Closing the Loop
Online evals only matter if they trigger action. Wire them into:
- An alert when 7-day faithfulness drops > 5%.
- A nightly export of low-scoring responses into your offline eval set (after PII review).
- A deploy gate that runs a 30-minute canary at 100% eval sampling on each release.
Failure Modes
- Judge model upgrade silently shifts scores. Pin the judge model version and the rubric version.
- Sampling bias โ sampling only successful requests hides the failures you most need to evaluate.
- Eval drift โ the rubric stops matching what the product cares about. Re-validate against human labels quarterly.
- Privacy โ judge prompts include user inputs. Send them to the same vendor/region as your primary LLM, not a third party.
Production Checklist
- 100% heuristic checks; 1โ5% LLM-as-judge; 100% on negative-feedback samples.
- Pinned judge model + versioned rubric + human-calibrated thresholds.
- Eval scores emitted as metrics with the same dimensions as cost/latency.
- Alerts and deploy gates wired to eval drift.
Key Takeaways
- Online evals are the quality counterpart to cost telemetry โ without them you ship blind.
- Heuristics + LLM-as-judge + implicit signals form a layered, affordable quality pulse.
- Wire evals into alerts and deploy gates or they are just dashboards.

