Evaluation is a decision instrument, not a leaderboard screenshot. Define the task and failure budget first, then compare models on representative work while tracking quality, reliability, latency, cost, and human review.
Evaluation is a decision, not a score
Teams often ask, “Which model is best?” That question is incomplete. Best for which task, under which latency target, at what cost, with what failure consequences?
A model that writes a beautiful answer may be a poor choice for exact extraction. A slower model may be worth its cost for a high-impact review workflow and wasteful for a high-volume classification task. A smaller model may win because it meets the quality threshold with fewer retries.
Write the decision before you run the experiment:
This turns evaluation from taste into an agreement about evidence.
Worked example: support-ticket routing
Suppose a support team receives tickets that must be routed to billing, access, bug, feature request, account closure, or other. The model also drafts a suggested reply, but a person approves every external message.
| System component | What must be evaluated |
|---|---|
| Classifier | Correct queue, especially for high-cost misroutes |
| Extractor | Valid fields, missing-field behavior, normalized values |
| Draft response | Policy support, tone, completeness, no invented promises |
| Runtime | Latency, timeouts, retries, cost, provider errors |
| Human review | Correction effort and safe approval behavior |
Notice that this is not one score. It is a workflow with multiple quality gates. A model can be excellent at routing and unsafe at drafting. Evaluate and deploy those stages separately.
Define the failure budget
Not all errors deserve the same weight. Write down what each failure costs before choosing a metric.
| Failure class | Example | Policy |
|---|---|---|
| Minor | Draft is verbose but accurate | Accept or lightly edit |
| Review-required | Ticket is routed correctly but reply misses context | Hold for human correction |
| High-impact | Refund or account promise is invented | Block, log, investigate |
| Security | Private information appears in the wrong response | Fail closed and escalate |
Your failure budget determines whether an average score is appropriate. A system with rare catastrophic errors may be unacceptable even if its average quality is high.
Build a test set that resembles the work
A benchmark is useful only when it resembles the decisions your system will make. Start with real examples when you have permission; otherwise create synthetic examples from actual workflow patterns and label them clearly.
Include:
- Common cases in their natural proportions
- Rare but expensive cases
- Ambiguous and incomplete inputs
- Long, noisy, and malformed inputs
- Multilingual or domain-specific language when relevant
- Adversarial or instruction-injection attempts
- Cases where the correct response is to ask or abstain
Split the set into three parts:
| Set | Use |
|---|---|
| Development | Improve prompts, schemas, and routing |
| Validation | Choose among candidate changes |
| Held-out | Estimate performance on examples you did not tune against |
If you repeatedly tune against every example, your evaluation can improve while the system becomes worse on new work.
Write the rubric before looking at outputs
For open-ended generation, a rubric makes review more consistent. Keep criteria observable and short.
Accuracy: 0 = materially wrong, 1 = partly correct, 2 = correct
Evidence: 0 = unsupported claim, 1 = mostly supported, 2 = every material claim supported
Actionability: 0 = unusable, 1 = needs substantial editing, 2 = ready for human approval
Safety: 0 = risky or disallowed, 1 = needs review, 2 = safe within stated boundaryDefine examples of a 0, 1, and 2 for each criterion. Reviewers should not have to guess whether “concise” means two sentences or five bullet points.
For classification and extraction, use exact labels and field-level checks where possible. For generation, combine rubric scores with pairwise preference or task completion rather than pretending one automated metric captures quality.
Choose metrics that answer different questions
Metrics are lenses. Each one shows something and hides something else.
| Metric | Answers | Can hide |
|---|---|---|
| Accuracy | How often was the label exact? | Rare-class and cost differences |
| Precision | When the model selects a class, how often is it right? | Missed cases |
| Recall | How many relevant cases did it find? | False positives |
| Schema validity | Can the next program consume the result? | Whether the fields are correct |
| Task success | Did the workflow achieve its purpose? | Why a result failed |
| Human edit rate | How much correction remains? | Severity of edits |
| Latency and cost | Can the workflow operate economically? | Answer quality |
Use a metric set that reflects the decision. Avoid reporting a single number when the workflow has distinct failure modes.
Compare models under fair conditions
Keep the experiment controlled enough that you can attribute a difference to the change you intended.
- Use the same input examples and context.
- Record the exact model identifier and date.
- Keep system instructions and output schemas versioned.
- Use the same tools, retrieval results, and retry policy.
- Record temperature or reasoning settings when supported.
- Separate model quality from integration effort.
A model may need a different prompt or output strategy. That is legitimate, but report it as part of the system comparison. “Model A required three repair prompts and Model B did not” is useful engineering evidence, not an unfair disadvantage.
Run repeated trials when output variance matters. One run can show a possibility; repeated runs show behavior.
Use human review without creating fake precision
Human review is essential for many open-ended tasks, but unstructured review produces unreliable numbers.
- Calibrate reviewers on shared examples.
- Use a short rubric with concrete anchors.
- Blind model identity when possible.
- Randomize output order for pairwise comparisons.
- Record disagreement instead of averaging it away.
- Sample high-risk and low-confidence cases more heavily.
An LLM judge can help scale review, but treat it as an assistant. Compare it against human-labeled examples, look for systematic preferences, and never let fluency substitute for evidence.
Measure the system users actually experience
Quality in a notebook is not quality in production. Track the operational behavior around the model.
| Measure | Why it matters |
|---|---|
| p50 and p95 latency | Average latency hides slow users and timeouts |
| Cost per successful task | Retries and repair calls change unit economics |
| Timeout and retry rate | Shows reliability under real conditions |
| Human takeover rate | Shows how much work remains manual |
| Invalid output rate | Shows whether downstream systems can trust the shape |
| Abstention rate | Shows whether the system is cautious or simply refusing everything |
Report test environment, request size, concurrency, provider, and retry behavior. A latency number without those conditions is difficult to reuse.
Turn failures into an error taxonomy
When a model fails, do not label the row “bad output” and move on. Classify what happened.
| Error type | Example | Likely intervention |
|---|---|---|
| Instruction | Ignored output constraint | Prompt, schema, or model change |
| Knowledge | Correct source absent from context | Retrieval or data preparation |
| Reasoning | Evidence present but conclusion wrong | Decomposition, examples, or review |
| Format | Invalid JSON or missing field | Structured output and validation |
| Policy | Unsafe or unauthorized action | External control and permission boundary |
| Operations | Timeout or rate limit | Retry, fallback, queue, or capacity change |
Keep representative failures in the repository or evaluation report. A failure gallery often teaches more than a success gallery.
Make evaluation part of shipping
Store the test set, rubric, prompt version, model version, tool configuration, and result summary together. Run the regression set whenever you change the model, prompt, parser, retrieval settings, or tool schema.
evaluation/
cases.jsonl
rubric.md
run-2026-08-20.json
failures/
ticket-007.md
README.mdUse a change record for every meaningful experiment:
| Field | Example |
|---|---|
| Hypothesis | Heading-aware chunks improve source recall for policy questions |
| Change | Parser v2 and chunk strategy B |
| Expected effect | Fewer missing-source cases |
| Observed effect | Recall improved; table questions regressed |
| Decision | Keep parser, revert chunk strategy, add table-specific path |
A small evaluation report template
# Model comparison
## Decision
Choose a model for support-ticket routing and draft replies.
## Test set
120 cases: 80 common, 20 rare, 10 ambiguous, 10 unsupported.
## Controls
Same prompt version, schema, context, retry policy, and temperature.
## Results
- Queue macro-F1: ...
- Schema validity: ...
- Unsupported-question abstention: ...
- Human edit rate: ...
- p95 latency: ...
- Cost per successful task: ...
## Failure summary
- Missing evidence: ...
- Unsupported claim: ...
- Wrong queue: ...
- Invalid output: ...
## Decision and limits
What we selected, why, and what remains untested.The template matters because it forces a conclusion and its limits to sit next to the numbers.
Frequently asked questions
What is the best metric for an LLM?
There is no universal best metric. Use measures that reflect the task and combine quality with reliability, latency, cost, and risk.
How large should an evaluation set be?
Large enough to include the important variations and failure modes for the decision. A smaller, carefully designed set is better than many easy duplicates.
Can an LLM judge another LLM?
It can help scale review, but calibrate it against human labels and look for systematic preference for fluent or verbose answers.
How do I evaluate open-ended output?
Use a concrete rubric, anchored examples, blinded review where possible, pairwise comparison, and representative failure cases.
Should benchmarks decide which model I use?
Benchmarks can inform a shortlist. Your own task set, constraints, and failure budget should decide the final system.
Make the test set part of the product
Evaluation is how a team turns an uncertain model into a responsible engineering decision. Define the work, test the edge cases, separate retrieval from generation, measure the user experience, and preserve failures so the system can improve without losing what already worked.
The model is only one variable. The evaluation system is what lets you choose, ship, and change it with confidence.
Frequently Asked Questions
There is no universal best metric. Use measures that reflect the task and combine quality with reliability, latency, cost, and risk.
Large enough to include the important variations and failure modes for the decision. A smaller, carefully designed set is better than many easy duplicates.
It can help scale review, but calibrate it against human labels and look for systematic preference for fluent or verbose answers.
Use a concrete rubric, anchored examples, blinded review where possible, pairwise comparison, and representative failure cases.
Benchmarks can inform a shortlist. Your own task set, constraints, and failure budget should decide the final system.