KEY TAKEAWAYS

  • Give each case fixed inputs, returned evidence and a reference judgment. Score observable tool behavior separately from the final answer's meaning.
  • A correct lookup can still produce a wrong answer. A fluent grader can still accept that wrong answer or reject a necessary clarification.
  • Use human-labeled examples to calibrate the grader, check revised rules on held-out cases, and preserve resolved failures as versioned regression cases.

Start with the decision the answer must support

A support agent looks up the right order and returns a polished answer: the item is eligible because it arrived 12 days ago. If the order is marked final sale, the lookup was correct but the conclusion was not. An evaluator that checks only for a lookup or a mention of the return window can miss the defect.

OpenAI's agent-evaluation guidance distinguishes inspecting individual traces to diagnose workflow behavior from using repeatable datasets and evaluation runs to compare changes.[1] Its best-practices guide separately identifies functional correctness, tool selection and argument precision.[3] Those distinctions are useful even if your evaluation lives in a local case file rather than a vendor dashboard.

Build three checks: did the agent retrieve the right evidence; does its answer follow from that evidence; and does the grader agree with a defensible reference judgment? Here, a grader is a rule or model that labels an output. A reference judgment is the expected meaning and its evidence-based reason, not a sentence the agent must copy.

Keep the objects of evaluation distinct
CheckEvidence neededWhat a pass does not prove
Tool routeObservable tool names, arguments, returned data and policy version for this request.A correct lookup does not make every claim in the answer true.
Supported answerThe final answer, the applicable policy and order facts, and a reference rationale.Correct-looking wording does not prove the required lookup occurred.
Grader agreementThe grader label and a separately established reference label for the same evidence and rubric.Agreement on these cases does not establish general reliability.

1. Freeze the task and evidence before scoring

Define a narrow objective: answer whether an order meets the stated criteria for requesting a return, or explain exactly what information is missing. The agent cannot approve a refund, process a return or change an order. Start with synthetic data and read-only tool fixtures, meaning fixed responses supplied by a test harness. This guide requires no paid API run, customer-data upload or production connection.

The following fictional contract is DEMO-SUPPORT-v1. Each caller is authorized to ask about the synthetic orders. POLICY-DEMO-v1 applies to standard physical items in DemoMarket. It permits return requests for unopened items at an elapsed delivery age of 0 through 30 days inclusive, and excludes final-sale items regardless of age. It grants no refund approval or execution authority. Delivery age is a supplied integer fixture field, not a calculation from live dates.

  • lookup_order takes exactly one string argument, order_id. A successful fixture returns status=ok, order_id, region, product_type=standard_physical, unopened, final_sale, delivered_age_days and policy_id=POLICY-DEMO-v1. An unavailable response contains status=unavailable and the requested order_id, but no order facts.
  • get_policy takes exactly one string argument, policy_id. For POLICY-DEMO-v1 it returns status=ok, region=DemoMarket, product_type=standard_physical, min_age_days=0, max_age_days=30, requires_unopened=true, excludes_final_sale=true and refund_execution_authorized=false. These fields encode only the fictional rule above.
  • For a request naming an order, retrieve that order and POLICY-DEMO-v1; either call order is valid. Judge only this explicit read-only contract. For a request with no order identifier, ask for the ID without a speculative lookup. A region that remains unknown requires clarification before an eligibility conclusion.
  • POLICY-DEMO-v1 is the only authoritative policy in this fixture set. In your own set, specify applicability and which approved version takes precedence. If competing evidence leaves that unresolved, hold the reference judgment instead of choosing whichever rule makes the answer pass.

Preserve the exact request, relevant conversation context, tool schema, fixed responses and reference rationale under a stable case ID. Record model identifier, prompt version, retrieval snapshot, application/runtime version, grader version and rubric version separately. Observable events and the final answer are enough for this procedure; it does not require the agent's private chain of thought. Remove credentials and unnecessary personal data from any later diagnostic record.

2. Build cases for ordinary answers and plausible mistakes

OpenAI recommends task-specific evaluation, ordinary and edge cases, and human feedback to calibrate automated scoring.[3] The small set below illustrates those categories. It is a worked design, not a validated sample size or an estimate of customer traffic. None of these cases has been run.

Fictional case inputs and fixed lookup responses; successful responses share the DEMO-SUPPORT-v1 fields defined above
CaseExact request and contextFixed lookup evidence
R1: ordinaryNo earlier order context. User: Can I request a return for DEMO-101?DEMO-101: status=ok; region=DemoMarket; unopened=true; final_sale=false; delivered_age_days=12.
R2: exclusionNo earlier order context. User: Can I request a return for DEMO-102?DEMO-102: status=ok; region=DemoMarket; unopened=true; final_sale=true; delivered_age_days=12.
R3: missing IDNo order ID in the conversation. User: Can I return my order?No lookup response is supplied because no lookup is justified. The policy fixture exists but is not required for this clarification.
R4: unavailableNo earlier order context. User: Can I request a return for DEMO-104?DEMO-104: status=unavailable; order_id=DEMO-104; no age, region, condition or sale facts. The policy lookup succeeds.
R5: outside windowNo earlier order context. User: Can I request a return for DEMO-105?DEMO-105: status=ok; region=DemoMarket; unopened=true; final_sale=false; delivered_age_days=45.
R6: current ID winsEarlier user: I was asking about DEMO-106. Latest user: Now can I request a return for DEMO-107?DEMO-107: status=ok; region=DemoMarket; unopened=true; final_sale=false; delivered_age_days=12. Distractor DEMO-106: same fields except delivered_age_days=45.
R7: applicability missingNo earlier order context. User: Can I request a return for DEMO-108?DEMO-108: status=ok; region=unknown; unopened=true; final_sale=false; delivered_age_days=12. POLICY-DEMO-v1 covers DemoMarket only.

The next table completes each case's reference judgment. For cases that call tools, the literal arguments are order_id set to the named ID and policy_id set to POLICY-DEMO-v1. Judge equivalent final wording by its meaning. Do not make word-for-word matching the acceptance condition.

Expected observable behavior and reference meaning; these are expectations, not observed outcomes
Case and expected routeAcceptable final meaningSpecific failure to catch
R1: lookup_order(order_id=DEMO-101) and get_policy(policy_id=POLICY-DEMO-v1).The order meets the stated return-request criteria: unopened, not final sale, and 12 days since delivery. This is not refund approval.Saying a refund has been processed adds an unsupported action claim.
R2: lookup_order(order_id=DEMO-102) and the policy lookup.The item does not meet the policy because the final-sale exclusion applies despite the 12-day age.Treating the time window as sufficient and ignoring final_sale=true.
R3: no tool call; request the order ID.Ask which order the user means so the facts can be checked. Eligibility remains unresolved.Guessing an ID, or asserting eligibility without order evidence.
R4: lookup_order(order_id=DEMO-104) and the policy lookup; preserve the unavailable status.Explain that order facts could not be retrieved, so eligibility cannot yet be determined. Offer to check again when lookup is available, without claiming a retry already happened.Inventing delivery age or treating unavailable data as proof of ineligibility.
R5: lookup_order(order_id=DEMO-105) and the policy lookup.At 45 days, the order falls outside the stated 30-day return-request window. The fixture supplies no exception.Inventing an extension or using an unrelated older policy.
R6: lookup_order(order_id=DEMO-107) and the policy lookup.Answer about DEMO-107, which meets the stated criteria. The older DEMO-106 mention does not change the current request.Looking up DEMO-106 or answering its 45-day case instead.
R7: lookup_order(order_id=DEMO-108) and the policy lookup, then ask for the order's region.The region must be established before deciding whether this DemoMarket policy applies. Eligibility remains unresolved.Applying the policy to an unknown region and asserting eligibility.

This set still lacks exact window boundaries, opened items, multilingual requests and other policies or products. Add those when they matter to your task; do not imply these examples cover them. Use permission-appropriate, minimized real cases later to check whether your chosen categories resemble actual requests. Until then, report coverage by case type rather than as production accuracy.

3. Preserve the run, then assign separate labels

Before running your own agent, choose which cases to repeat and how many attempts to preserve for each configuration. Use the same declared plan for comparisons. Keep every attempt, including timeouts and failed retrievals, rather than rerunning only the failures until a passing answer appears. The examples here remain unexecuted.

  • Label the route PASS when observed calls and arguments satisfy the case contract. Label it FAIL for evidenced wrong or missing calls. Use INCONCLUSIVE if tool telemetry is missing; silence in an incomplete log does not prove that no call occurred. R3 passes only when a complete event record confirms no speculative call.
  • Label the answer PASS when its meaning satisfies the reference using the returned evidence, FAIL when it contradicts or invents facts, and INCONCLUSIVE when missing evidence prevents a defensible judgment. If the tool explicitly reports unavailable, an honest limitation can pass the response-handling check while the order's eligibility remains unresolved. Do not report that as an eligibility determination.
  • Record the automatic grader's label alongside those judgments. A failed route cannot be rescued by a fluent answer, and an unsupported answer cannot be rescued by a correct route. Keep a disagreement open for adjudication rather than averaging it away.

For a hypothetical R2 attempt, suppose the complete log shows the exact expected order and policy lookups, but the final answer says: It arrived 12 days ago, so it qualifies for a return. The route is PASS and the answer is FAIL: the response omits a conclusion-changing exclusion. That pair directs the correction toward policy interpretation or answer synthesis, not order-ID extraction. It is an illustrative diagnosis, not a reported model result.

4. Check the grader against labeled answers

Have a human reviewer label candidate answers against the fixed fixtures and rubric before comparing the automatic labels. Give the grader the request, applicable evidence and explicit criteria, not just the candidate text. OpenAI's guidance calls for checking agreement against human labels and identifies position bias, verbosity bias and disagreement among human experts as limitations.[3] Neither the grader nor the reference label is infallible.

For DEMO-SUPPORT-v1, the answer rubric checks that the response addresses the current request, applies all relevant eligibility conditions, distinguishes missing facts from negative facts, and avoids an unsupported refund claim. Clarification and honest unavailable-data handling are valid outcomes. A longer answer receives no automatic credit. Route scoring still uses the event record, not the answer's description of what it looked up.

Fictional grader-calibration examples: every automatic label below is hypothetical, not a measured result; route evidence is assumed correct for these answer-only comparisons
Candidate answerReference and hypothetical grader labelsEvidence-based diagnosis
R1: DEMO-101 meets the stated return-request criteria: unopened, not final sale, and 12 days since delivery. This does not approve a refund.Reference PASS; hypothetical grader PASS.Agreement on a concise supported answer. This one agreement says nothing about broader reliability.
R2: Good news! DEMO-102 arrived just 12 days ago, safely inside the 30-day window, so you qualify for a return.Reference FAIL; hypothetical grader PASS: false acceptance.The fluent answer ignores final_sale=true. Add exclusion examples and require every conclusion-changing condition in the rubric.
R3: What is your order ID? I need it to check the order facts before I can determine eligibility.Reference PASS; hypothetical grader FAIL: false rejection.An immediate-answer or keyword rule can penalize necessary clarification. The request contains no ID, and the contract requires asking for it.
R4: I could not retrieve DEMO-104's order facts, so I cannot determine eligibility yet. I can check again when lookup is available.Reference PASS for honest handling; hypothetical grader FAIL: false rejection. Eligibility remains unresolved.A grader demanding eligible or ineligible confuses a completed lookup with a well-handled lookup failure. No order facts were returned.
R7: DEMO-108 qualifies because it is unopened, not final sale, and arrived 12 days ago.Evidence-based reference FAIL; a hypothetical human label and grader both say PASS.Agreement is misleading if both labels assume DemoMarket. Reopen the reference: region=unknown, so the applicable policy has not been established.

Preserve each disagreement with the case ID, candidate answer, automatic label, reference label and cited fixture field or policy clause. Inspect false acceptance and false rejection separately. If the policy itself is ambiguous or two reviewers cannot settle applicability, mark the disputed reference INCONCLUSIVE and obtain an authoritative resolution before using it as a calibration target. R7 is resolvable under this example's explicit contract; a less explicit real contract may not be.

After revising the grader, check it on separately labeled held-out answers that were not used to tune its rules. Include concise correct answers, persuasive exception mistakes, necessary clarifications and honest retrieval failures. When comparing pairs, vary response order to inspect position sensitivity and keep length from substituting for correctness. Success on the calibration answers alone may mean the grader has learned those examples. Choose any operational agreement requirement for your task and risk; this guide supplies no universal threshold.

5. Repair the first evidenced defect and keep the case

Structured trace labels can help locate workflow errors rather than treating the final answer as the only diagnostic object.[2] Use the recorded defect to choose the next correction. Do not infer an unobserved internal reasoning failure from an output alone.

  • If R6 calls DEMO-106, inspect current-request parsing and argument extraction. Keep the two-order conversation as a regression case.
  • If the route retrieves an obsolete or inapplicable policy, correct retrieval/version selection first. A polished answer cannot compensate for the wrong authority.
  • If R2 retrieves the right facts but ignores final sale, inspect answer synthesis and the instruction to apply every relevant condition.
  • If the supported answer is correct but the grader rejects it, revise the grader's evidence or rubric. Do not make the agent give an unsupported answer merely to satisfy the grader.
  • If the reference cannot be justified, resolve policy applicability or labeling disagreement first. Grader tuning against an unresolved reference hides the problem.

Keep case IDs stable and advance the fixture version when inputs, policies or reference meanings change. Preserve the previous evidence and label rather than silently overwriting it. Add resolved failures to the regression set, then rerun affected cases when the model, prompt, tools, retrieval source or policy changes; rerun grader validation when the rubric or grader changes. OpenAI recommends evaluation on changes and growing the case set over time.[3]

The resulting comparison should name the versions tested, included case types, repetition plan, case-level route and answer labels, grader disagreements and unresolved gaps. Report planned but unexecuted work as such. An overall average can hide a final-sale failure among easy cases; a small set of passes does not establish production reliability or rare-failure safety.

Platform and evidence limits

The official pages inspected on 10 October 2026 describe SDK-based application traces and existing Agent Builder workflows during a transition window.[1][2] They do not establish feature access for every account. This procedure needs observable application/tool events and fixed case files; it does not depend on a particular dashboard or promise continuing availability of a UI.

OpenAI's lifecycle notice dates the Evals platform deprecation announcement to 3 June 2026. Existing evals are scheduled to become read-only on 31 October, and the Evals dashboard and API are scheduled to shut down on 30 November 2026. Graders documented for eval workflows are included in that transition. Agent Builder has a separate notice and a scheduled 30 November shutdown.[4] These are announced schedules, not shutdowns already observed. Residual Evals API instructions in the guides should not be treated as a durable new-platform recommendation; the notices do not say that all SDK tracing is deprecated.

The four sources are one provider's methodological guidance and lifecycle notices. Their whole-page publication and update dates were not established; the dated deprecation entries are narrower evidence. The case contract, labels and maintenance procedure here are editorial proposals, not OpenAI requirements or independently measured findings. You can reuse the process, but must establish the authoritative policies, representative cases and acceptance needs for your own support task.

Sources & scope

A proposed, vendor-neutral procedure for a read-only customer-support agent. All store policies, orders, candidate answers and grader labels below are fictional, unexecuted examples, not production data or measured results. The source guidance is one provider's documentation, not independent evidence of effectiveness.

  1. OpenAI — Agent evals ↗

    Inspected 10 October 2026. Trace diagnosis versus repeatable datasets and runs; SDK and existing Agent Builder transition wording. Provider guidance, not measured efficacy. Whole-page publication/update dates unknown. Read with the lifecycle notice in source 4.

  2. OpenAI — Trace grading ↗

    Inspected 10 October 2026. Structured trace labels for workflow diagnosis. This article uses observable events, not private chain-of-thought access. Whole-page publication/update dates unknown.

  3. OpenAI — Evaluation best practices ↗

    Inspected 10 October 2026. Task-specific cases; tool selection and argument precision; reference-guided grading, human calibration, judge biases and continuous evaluation. Provider recommendations, not a validated threshold or independent effectiveness study. Whole-page publication/update dates unknown.

  4. OpenAI — Deprecations: Evals platform and Agent Builder ↗

    Inspected 10 October 2026. The 3 June 2026 entries announce Evals and Agent Builder deprecation; Evals read-only is scheduled for 31 October and dashboard/API shutdown for 30 November. Eval-workflow graders are in scope; Agent Builder has a separate 30 November shutdown schedule. Whole-page publication/update dates unknown.

Publication history
  • — Initial prepared edition: worked read-only support cases, separate route and answer judgments, and labeled hypothetical grader disagreements. All examples are fictional and unexecuted.

Have a correction or a different perspective? Contact Palanthos.