Designing LLM Evaluation Datasets for Business Workflows
An LLM application can look capable in a demonstration and still fail the specific decision a business needs it to make. A model that summarizes documents fluently might invent an approval; an assistant that routes support tickets correctly on familiar examples might send an urgent security incident to the wrong queue. The evaluation dataset is the contract between the application and those operational consequences.
A useful dataset does not merely contain prompts with plausible answers. It records the task, the relevant business context, acceptable outcomes, prohibited behavior, and the evidence needed to judge a result. Its purpose is to reveal where a proposed prompt, model, retrieval configuration, or agent workflow is safe enough to adopt—and where a regression would matter.
Start with the workflow, not the model
Consider an illustrative internal help-desk assistant. It reads incoming tickets, extracts a category and urgency, requests missing information, and recommends a team. Human agents still decide whether to execute sensitive actions. Its evaluation question is not “How good is this model at reasoning?” but “When should this ticket be routed, clarified, or escalated, and what mistakes are unacceptable?”
OpenAI's evaluation guidance recommends task-specific tests drawn from realistic application distributions rather than generic benchmark scores. Anthropic's evaluation documentation similarly starts with measurable success criteria and edge cases.
Map the workflow into observable contracts: identify intent, extract fields, choose an authorized route, preserve confidentiality, produce a usable explanation, and defer when the evidence is insufficient. Each contract needs a grading method and an error severity. An incorrectly formatted explanation and an unauthorized disclosure should not cancel each other out as equivalent mistakes in a single average.
Turn business loss into an acceptance test
Write down who consumes the result, what they can verify, and what they might do because of it. For a help-desk classifier, the receiving team, the triage operator, and the affected employee may have different definitions of success. A wrong low-priority queue might delay work; a credential reset issued without identity verification is a different class of failure.
Define four outcomes before selecting a model: correct completion, safe deferral, recoverable error, and prohibited action. This gives the evaluation a place to credit a justified refusal or request for information instead of treating every non-answer as a failure. For each category, identify whether a test is a quality signal or a blocking invariant. Business owners, security staff and engineers should agree on these definitions while the rubric is still editable.
Build a dataset from the ways work actually arrives
Collect examples from legitimate historical workflows where retention and access permissions allow it. Add expert-authored cases for policy boundaries, and mine reviewed failures after deployment. For the help desk, this might include routine password reset requests, ambiguous account access issues, messages combining billing and technical problems, multilingual requests, incomplete identifiers, and apparent instructions hidden in attached material.
Separate representative cases, which reflect the ordinary input mix, from stress cases, which deliberately oversample rare or costly failures. A production-weighted metric answers how a system may perform on everyday work; a stress-suite metric asks whether specific protections hold. Combining them without revealing the weighting can create an attractive but misleading headline score.
Synthetic cases can help explore a boundary before enough production examples exist. They are not evidence that the synthesized wording or frequency resembles production. Preserve how each case was created so a reviewer can distinguish a scrubbed real ticket from a generated adversarial variant.
Build a sampling matrix before collecting rows
A practical matrix crosses several dimensions: task type, input completeness, language, document length, policy age, retrieval dependence, action risk, and whether the desired response is completion or deferral. Choose cases from the intersections that matter to your workflow rather than trying to fill every combination mechanically.
For example, “routine / complete / English / no action” is a different test from “urgent / incomplete / multilingual / account-changing action.” The latter may be relatively rare but essential for a release gate. If a slice has few observations, show the raw numerator and denominator rather than presenting an apparently precise percentage. If some rows were deliberately over-sampled, do not describe their combined score as the expected production success rate.
Keep production-derived cases privacy-safe. De-identification should remove unnecessary personal content, but excessive rewriting can erase the ambiguity or punctuation that caused the original failure. Document transformations and keep any sensitive source records in a separate, access-controlled store.
Make each row reproducible
A durable evaluation row should capture more than input and expected output:
- Stable case ID, task and cohort tags, and dataset version.
- Source type, acquisition date, privacy classification, and permissions.
- The input text plus relevant policy, retrieved documents, or external-state snapshot.
- Expected action and allowed alternatives, including when to abstain.
- Evidence supporting the expected result, with document versions.
- Scoring rubric, error severity, reviewer identity, and adjudication status.
For classification, a canonical label can be enough. For a nuanced summary or tool-using agent, acceptable answers may be a set of criteria rather than one exact text. Include “cannot determine” as a legitimate ground truth when the record does not support certainty.
A minimal structured test case
An illustrative, de-identified record could look like this:
{
"case_id": "triage-ambiguous-017",
"task": "support_ticket_triage",
"cohort": ["ambiguous", "requires_clarification"],
"input": {
"ticket": "My access stopped working after the change.",
"policy_snapshot": "access-policy-v7"
},
"expected": {
"route": "request_clarification",
"must_not": ["reset_other_user_credentials"]
},
"grading": {
"route_match": "exact",
"authorization_violation": "hard_fail"
},
"provenance": "expert_authored",
"review_status": "adjudicated"
}
This is a suggested schema, not a prescribed vendor format. A real implementation would add the policy citation or fixture reference, review metadata, consent or retention classification, and immutable identifiers for the test environment. Avoid copying sensitive production tokens or customer identifiers into a repository merely because test data feels less sensitive than application data.
The row should also specify the unit of evaluation. Is one row a single message, a full conversation, a document bundle, or an end-to-end business case? Mixing these units makes denominators difficult to interpret and can accidentally count a long conversation as many independent successes.
OpenAI's programmatic eval example describes an IT support-ticket classifier whose test data includes ticket text and a human-supplied correct label. That is a straightforward starting point, not a sufficient schema for every production workflow.
Use human experts to define ground truth
Subject-matter experts understand what happens after the output is consumed. Ask them to write decision rules before reviewing model predictions. A rubric might say that any request to modify another person's access must be escalated for authorization, even when the ticket contains language indicating urgency.
Some cases are genuinely ambiguous. Record the competing interpretations and the adjudication decision instead of silently forcing one answer. Two labelers disagreeing might indicate a broken dataset, but it might equally reveal an undocumented business rule. Review that rule with the policy owner before the case becomes a release gate.
Evidence provenance is essential. If the expected route depends on a policy updated last month, retain the policy version that applied to the scenario. Without that snapshot, an old “golden answer” might become incorrect while still looking authoritative.
Treat ambiguous labels as useful findings
Supply labelers with a short decision tree and counterexamples. Ask reviewers to flag the particular missing fact when they cannot agree. Run an adjudication meeting on high-impact conflicts and update the rubric before changing the label. Preserve both initial judgments and final policy decision so the dataset does not disguise uncertainty.
For open-ended outputs, prefer a checklist of necessary and forbidden facts over a single reference paragraph that punishes harmless paraphrase. A human-written “ideal answer” can still be attached as an example, but it should not be mistaken for the only acceptable realization of the task.
Match the grader to what can be observed
Use deterministic checks for structured output, schema validity, authorized identifiers, exact labels, tool arguments, and state invariants. Use rubric-based human judgment for suitability or complex summaries. Use an LLM judge for scalable qualitative checks only after comparing its decisions with representative expert labels.
Anthropic distinguishes code-based, model-based, and human graders, with different trade-offs in cost, flexibility, and reliability. A judge should score one clearly defined dimension at a time and return “insufficient evidence” when appropriate.
Do not confuse judge agreement with truth. A 2025 research study of LLM judging found position bias in pairwise and listwise settings, varying by judge and task. Where comparisons matter, vary candidate order, audit disagreements, and keep a human-calibrated subset.
Split the scorecard into checkable claims
An example scorecard for the help desk could contain: route correctness, required identifier extraction, grounded explanation, safe handling of missing evidence, correct use of tools, and preservation of confidentiality. A JSON validator can judge schema integrity. A rule engine can validate a route against a policy snapshot. An expert can judge whether the explanation would mislead an operator. No single grader is forced to infer all dimensions from one holistic impression.
Use hard failures for prohibited outcomes and partial credit where intermediate success provides diagnostic information. Report false escalations and missed escalations separately when their consequences differ. Anthropic's agent-evaluation analysis distinguishes regression tests that guard established behavior from capability tests that deliberately expose current weaknesses. Keep those roles visible rather than demanding one undifferentiated pass rate.
Test the grader itself: include correct, incorrect, ambiguous, and adversarial submissions. If a model judge gives high marks to an answer that simply repeats rubric keywords, the evaluation is vulnerable to score gaming. Make review decisions auditable, and rotate a human audit sample across cohorts.
Evaluate actions, not only the final prose
An agent might produce a sensible final explanation after calling the wrong tool or accessing an unauthorized record. Capture the end-to-end state, action authorization, retrieved context, tool arguments, and final output. Test that the requested outcome occurred without prohibited side effects.
OpenAI's agent evaluation guide discusses tracing tools, handoffs, and workflow behavior. However, forcing one exact action sequence can penalize legitimate alternatives. Define nonnegotiable invariants—such as never issuing a refund without approval—while allowing multiple valid paths to the same authorized outcome.
Use a sandbox or replay harness for actions that would otherwise change real systems. Isolate the test environment and make external state deterministic where possible. A test that sends a real support email or changes a customer record is a dangerous experiment, not merely an evaluation.
Test the complete transaction
A workflow success might require the system to read a ticket, identify that an employee's identity is unverified, choose a clarification template, and leave the account unchanged. Assess the final ticket state as well as any intermediate tool calls. A final message stating “I did not change the account” is not enough if the account database records a mutation.
Capture model and prompt versions, retrieval results, tool schemas, timeouts, and the identity or permission scope available to the agent. If the test environment differs from production in permissions or retrieval content, describe the difference. Otherwise, a passing evaluation may be measuring a simpler system than the one that is deployed.
Create a dedicated security and privacy slice
Business correctness is incomplete without a failure suite for abuse and confidentiality. The OWASP 2025 LLM Top 10 identifies categories including prompt injection, sensitive information disclosure, excessive agency, and improper output handling. Translate relevant threats into concrete, authorized tests of your application boundary.
For the help desk, an attachment might contain instructions to reveal another employee's details, or a user might try to bypass a privilege check by impersonating an administrator. Test whether the application treats these as untrusted data and enforces authorization outside the model. A correct ticket category is no consolation if a private record was exposed.
The NIST Generative AI Profile provides a wider risk-management frame: evaluation belongs within governance of the entire application, including people, policies, and surrounding systems. The profile is a framework, not empirical proof that a particular test suite guarantees safety.
Separate iteration data from release evidence
Keep a development set that engineers can inspect and optimize against. Retain a held-out release suite with controlled access and avoid repeatedly tailoring prompts to its examples. Split near-duplicate conversations, document families, and temporal variants together when leakage would make results artificially easy.
Version the dataset, ground truth, grader implementation, prompt, model, retrieval index, and relevant tool contracts. Save per-case decisions, not just an aggregate percentage. When a new model passes the same cases for different reasons, the trace and error categories help reviewers distinguish a genuine improvement from a coincidental score.
Avoid accidental optimization on the answers
A test set stops being an independent acceptance signal when developers inspect every failed item, tune the prompt to those examples, and then call the improved score a held-out result. Move discovered errors into a development or regression pool and retain separate unseen release cases. Group closely related examples by customer journey or source document when splitting; otherwise, nearly identical text can appear on both sides.
Evaluate candidate configurations with the same case versions and external-state snapshots. If nondeterminism matters, run repeated trials and describe variability rather than implying a single model call is a stable probability estimate. Record failures that could not be reproduced separately from confirmed improvements.
Portability matters in 2026. OpenAI's evaluation documentation announces the retirement of its older Evals platform, with a scheduled shutdown on November 30, 2026. Dataset schemas, expected outcomes, rubric definitions, and raw traces should be exportable; the business acceptance contract should not disappear when a hosted testing surface changes.
LangSmith's evaluation framework distinguishes offline tests from online monitoring. The important principle is independent of vendor tooling: frozen regression cases support reproducibility; reviewed production samples identify drift and new failures.
Report the failures a decision-maker needs to see
Report results by workflow step, severity and cohort. Keep ordinary-case performance, stress-case performance, unauthorized-action incidents, abstention quality, latency, and cost visible separately. Show the sample count and specific failures alongside any percentages, because a rare but severe category may have too little evidence for precise claims.
A release review should answer: What changed? Which business outcomes improved? Which regressions occurred? Do any critical invariants fail? Where is evidence insufficient? A weighted score may assist comparison, but it must never conceal a prohibited action.
Decide what a release report is allowed to claim
A useful report names the model and workflow versions, the evaluation window, case counts and cohort definitions, change from an agreed baseline, and all hard-gate failures. It distinguishes observed test performance from forecasts of production performance. If a high-severity slice is tiny, record that limitation explicitly. Never infer a promised reduction in operational incidents from a score alone.
Include failure exemplars with sanitized input, expected policy decision, actual output or action, grader rationale, and who accepted or disputed the label. This makes the report useful to developers, reviewers, and business owners. The goal is actionable evidence rather than a dashboard with a single green percentage.
Maintain the dataset after deployment. Review fresh failure reports, label newly encountered patterns, and graduate stable cases into regression tests. An evaluation dataset is a living specification of the workflow, not a one-time benchmark assembled for a model procurement decision.
The operative standard is simple: a dataset is useful only when its results can change an engineering or business decision. It should make incorrect behavior visible, describe why it matters, and preserve enough context to reproduce it.