💡 Key Takeaway

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:

Decision statement: We will use model B for support-ticket routing if it reaches at least 95% valid structured outputs, keeps critical-class recall above 90%, stays under our latency target, and does not increase human review beyond the current process.

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 componentWhat must be evaluated
ClassifierCorrect queue, especially for high-cost misroutes
ExtractorValid fields, missing-field behavior, normalized values
Draft responsePolicy support, tone, completeness, no invented promises
RuntimeLatency, timeouts, retries, cost, provider errors
Human reviewCorrection 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 classExamplePolicy
MinorDraft is verbose but accurateAccept or lightly edit
Review-requiredTicket is routed correctly but reply misses contextHold for human correction
High-impactRefund or account promise is inventedBlock, log, investigate
SecurityPrivate information appears in the wrong responseFail 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:

SetUse
DevelopmentImprove prompts, schemas, and routing
ValidationChoose among candidate changes
Held-outEstimate 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 boundary

Define 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.

MetricAnswersCan hide
AccuracyHow often was the label exact?Rare-class and cost differences
PrecisionWhen the model selects a class, how often is it right?Missed cases
RecallHow many relevant cases did it find?False positives
Schema validityCan the next program consume the result?Whether the fields are correct
Task successDid the workflow achieve its purpose?Why a result failed
Human edit rateHow much correction remains?Severity of edits
Latency and costCan 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.

  1. Calibrate reviewers on shared examples.
  2. Use a short rubric with concrete anchors.
  3. Blind model identity when possible.
  4. Randomize output order for pairwise comparisons.
  5. Record disagreement instead of averaging it away.
  6. 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.

MeasureWhy it matters
p50 and p95 latencyAverage latency hides slow users and timeouts
Cost per successful taskRetries and repair calls change unit economics
Timeout and retry rateShows reliability under real conditions
Human takeover rateShows how much work remains manual
Invalid output rateShows whether downstream systems can trust the shape
Abstention rateShows 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 typeExampleLikely intervention
InstructionIgnored output constraintPrompt, schema, or model change
KnowledgeCorrect source absent from contextRetrieval or data preparation
ReasoningEvidence present but conclusion wrongDecomposition, examples, or review
FormatInvalid JSON or missing fieldStructured output and validation
PolicyUnsafe or unauthorized actionExternal control and permission boundary
OperationsTimeout or rate limitRetry, 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.md

Use a change record for every meaningful experiment:

FieldExample
HypothesisHeading-aware chunks improve source recall for policy questions
ChangeParser v2 and chunk strategy B
Expected effectFewer missing-source cases
Observed effectRecall improved; table questions regressed
DecisionKeep 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.

Compare AI providersFind AI evaluation roles

Frequently Asked Questions

There is no universal best metric. Use measures that reflect the task and combine quality with reliability, latency, cost, and risk.