Evaluation lab · San Francisco · London · Zürich
Reinforced Labs Request a briefing
Template

LLM evaluation plan template

The plan we start every engagement from. Copy it, fill in the brackets, and you'll have something a risk committee can read and an engineer can implement. A filled-in example for a refund-capable support agent follows the template.

The template#

eval-plan.mdmarkdown
# Evaluation plan: [system name] v[version]
Owner: [name, team]        Approver: [risk/security owner]        Date: [yyyy-mm-dd]

## 1. System under test
- Purpose and users: [...]
- Models: [base model(s), versions, decoding settings]
- Tools / permissions: [tool → scope → max impact]
- Data reached: [sources, sensitivity, tenancy]

## 2. Unacceptable outcomes (threat model)
| ID | Outcome (business terms) | Actor | Severity |
|----|--------------------------|-------|----------|
| U1 | [e.g. refund paid to wrong party] | [external sender] | Critical |

## 3. Eval categories
| Cat | Linked outcome | Metric | Grader | Baseline | Min detectable Δ | n required | Gate |
|-----|----------------|--------|--------|----------|------------------|------------|------|
| C1  | U1 | pass rate | action assertion | [..] | [..] | [..] | block |

## 4. Data
- Sources: production sample [%], incidents [#], adversarial generation [method], expert gold [#]
- Held-out slice not visible to prompt engineers: [yes/no, size]
- PII handling: [...]

## 5. Graders
- Per category: type, validation result (Se, Sp, flip rate), human-review routing

## 6. Statistics
- Test: paired (McNemar) vs. production; seeds per case: [k]
- Multiple comparisons: [Bonferroni over strict gates / FDR for warnings]

## 7. Gates and cadence
- Pre-merge smoke: [n, time budget]
- Pre-release full: [n, seeds]
- Production online eval: [sampling rate, alert thresholds]

## 8. Ownership and escalation
- Category owners, on-call, who can override a gate and how it is logged

Worked example: refund-capable support agent#

CatOutcomeGraderBaselineMin ΔnGate
C1 Refund limitRefund > $500 without approvalAction assertion99.6%1 pt1,200Block
C2 Indirect injectionTool call triggered by email contentAction assertion + provenance97.1%2 pts1,700Block
C3 PII egressOther customer's data in replyPII grader (Se 0.96, Sp 0.995)99.6%1 pt1,500Block
C4 Policy adherenceWrong refund decisionRubric judge, expert-validated88.4%3 pts1,000Warn
C5 Over-refusalEligible refund refusedRubric judge92.0%3 pts800Warn

Sample sizes come from the power calculation in our sample-size note, adjusted for three strict gates (Bonferroni). For C1 and C3, at baselines above 99%, the binomial variance is small, so a 1-point change is detectable with fewer cases than near 95%. C4 and C5 are warnings because their judge was validated only to within 3 points of the expert ceiling.

Where plans usually go wrong#

  • Categories named after data sources rather than outcomes. Nobody can own "batch 7".
  • No minimum detectable Δ. Without it, nobody knows whether 200 cases is enough, and it usually isn't.
  • Unvalidated judges in blocking gates. Use deterministic assertions for blocking where possible.
  • Safety without helpfulness. Pair every safety category with an over-refusal category, or the cheapest fix will be refusing more.
  • No override log. Gates get bypassed under deadline pressure; record who, when and why.

Know the number before you ship.

A 45-minute working session with an evaluation engineer. Bring one use case; leave with a threat model, a draft eval plan with sample sizes, and an honest read on where you stand.