Development

Golden Sets for Support Agents: Intents and Escalation Paths

Antonio Evans10 min read

A support team lead and an engineer sit at a table with a printed sheet of tickets.
Key points

Key points

  1. 1A golden set for a support agent is a small, versioned set of real tickets where a human wrote down the intent, the expected action (answer, clarify, or hand off), the escalation path, and the cost of each kind of mistake.
  2. 2Weight your examples by expected loss, not by ticket frequency: a rare missed escalation can dominate the damage bill of a common clumsy answer.
  3. 3Label in pairs with one "gold owner" as tiebreaker, and record the reason for every handoff so the agent can learn the boundary, not just the label.
  4. 4Freeze the set once it is labeled, then grow it from real production failures so it stays an independent test rather than a training set.

Define the four fields before you label anything

Most support teams already have a taxonomy of intents in their help desk, but a golden set needs more than a topic label. A golden set is a fixed, hand-checked collection of test cases you run against a system before every meaningful change, and it is only as useful as the fields you record on each row the Langfuse engineering guide. For a support agent, four fields carry the weight.

The first is the intent: the reason the customer wrote in, phrased as a short verb-noun label. The second is the expected action, which is one of exactly three values. "Answer" means the agent has everything it needs and should reply directly. "Clarify" means the ticket is missing a fact (order number, error text, account email) and the agent should ask for it before doing anything else. "Hand off" means a human must take the conversation.

The third field is the escalation path, and it only applies when the action is hand off. Keep it concrete: the queue or team name, and the first thing that team needs to know. "Escalate to Billing: refund requested on a charge older than the dispute window" is a usable path. "Escalate to a human" is not, because it tells the agent nothing about routing and tells you nothing when it gets routing wrong.

The fourth field is the cost tag. Assign each example two numbers: the loss if the agent is too cautious (it hands off or asks a clarifying question when it should have answered) and the loss if the agent is too bold (it answers when it should have clarified or handed off). Those two numbers turn the golden set from a pass-rate scoreboard into a decision tool.

FieldExample valueWhy it earns its place
intentrefund_statusGroups examples so you can see coverage per topic
expected_actionhand_offThe single decision you are grading
escalation_pathBilling / disputes over 60 daysCatches routing errors, not just handoff errors
cost_if_too_cautious1 (low)Cautious mistakes are usually cheap annoyance
cost_if_too_bold40 (high)A swallowed escalation is where the money goes
reasonCustomer cites a chargeback threatTeaches the boundary, survives staff turnover
sourcetxn_48213Provenance so you can re-check the original ticket

A versioned case needs an input, enough context to judge the output, and metadata such as tags and notes; describing expected behavior is often better than forcing one canonical answer the QASkills golden dataset guide. That is why the reason field matters more than a gold answer string. You are testing a decision, and the decision has a rationale.

Write a short intent list from your own tickets

Pull 300 to 500 resolved tickets from the last two quarters and read them before you build any tooling. You are looking for verbs, not product areas. "Where is my order" and "my order arrived broken" are different intents even though both are about orders, because the first is a lookup and the second is a claims process.

Intent classification is the standard first step for support automation, and public tutorials label a fixed set of intents from real queries to train the classifier the Orq intent classification cookbook. Do the same, but keep the list short. Twelve to twenty intents is plenty for a first golden set. If a candidate intent has fewer than ten real tickets behind it in your sample, fold it into a neighboring intent and note it.

Be careful about how the intent list interacts with the action field. Some intents are almost always "answer" (reset password, change shipping address). Others are almost always "hand off" (legal threat, safety incident, data deletion request). The interesting cases are the ones in the middle, where the same intent can go either way depending on facts in the ticket. Those middle cases are where your agent will fail, and they should be over-represented in the golden set on purpose.

  • Start from resolved tickets only, so you know the outcome the customer got.
  • Exclude anything a human resolved by accident or by breaking policy.
  • Write the intent list in plain language your new hires already use.
  • Keep a parking lot file for intents you decided not to include yet.

A useful check: if two experienced agents can read the intent list and do not argue about which label applies, the list is ready. If they argue, the definition is too vague, and the agent will fail for the same reason.

Label in pairs and settle disagreements out loud

Labeling alone produces a set that measures one person's taste. Label in pairs and have a third person, the gold owner, break ties. This mirrors how content moderation teams build golden data: one designated owner has final authority, and the team documents reasoning, not just labels the Musubi moderation dataset guide. Support is a policy domain in the same way. Who counts as authorized to request a refund? What counts as a cancellation threat?

The disagreement log is the most valuable artifact of the labeling week. Every time two labelers disagree, you have found either an ambiguous ticket or an ambiguous policy, and both are worth a line in the log. If more than roughly one in ten tickets ends in disagreement, stop labeling and fix the policy or the intent list first. Labeling through ambiguity just bakes it into the gold labels.

For the expected action field, the handoff boundary deserves special attention. Write down the trigger, not the theme. "Hand off when the customer mentions a chargeback, a regulator, or a lawyer" is a trigger. "Hand off when the customer is angry" is a theme, and angry customers often just need a fast answer. For the escalate path, write the queue and the two facts the receiving team needs, because an escalation that arrives without context gets bounced back and doubles the cost.

Worked counts: how many examples each intent needs

The practical answer to "how many examples do I need" is smaller than most teams expect. A focused set of 50 to 100 well-chosen cases is enough to start, and sourcing from real failures beats inventing examples the QASkills golden dataset guide. For a support agent, allocate by expected loss rather than by traffic share.

Here is a worked allocation for a 240-example set, modeled on a subscription business with a billing team, a technical support team, and a policy queue.

IntentExpected actionExamplesShareEscalation pathBold-error cost (0 to 5)Why this many
password_resetanswer208%none1High volume, low risk: a sample is enough
order_statusanswer3013%none1Lookup answers are common and cheap to miss
change_shipping_addressclarify then answer2510%none2Needs order number; tests the clarify action
refund_statusanswer or hand off4017%Billing / refunds3Same intent, both actions, the hard middle
double_chargeclarify or hand off2510%Billing / billing errors4Missing transaction ID is the common failure
account_takeoverhand off3013%Security / account security5Highest cost: must never be answered by the bot
data_deletion_requesthand off156%Privacy / DSAR5Regulation-backed, tiny volume, huge downside
legal_or_chargeback_threathand off156%Escalations / disputes5Trigger phrases, not sentiment
integration_errorclarify then hand off4017%Technical support / tier 23Error text needed before routing

The shares are deliberately lopsided. Account takeover, data deletion, and legal threats together are 60 of 240 examples, a quarter of the set, even though they may be a small slice of ticket volume. That is the point. A golden set should be intentionally difficult and weighted toward what is hardest to get right, not what is most common the Musubi moderation dataset guide.

Do a quick arithmetic check before you commit. Suppose the account takeover examples carry a bold-error cost of 5 and the password reset examples carry a cost of 1. If your agent answers 10% of the takeover cases when it should hand off, that is 3 failures worth 15 units. If it over-escalates 30% of password resets, that is 6 failures worth 6 units. The smaller, rarer failure does more damage, and a frequency-weighted set would have hidden it.

Turn the cost tags into a release decision

A pass rate hides the cost structure. Score each run with expected loss instead: for every example, add the cost of the mistake the agent actually made, then sum. An over-cautious agent that hands off everything scores low on bold errors and high on cautious ones, and the totals tell you which failure mode you are shipping.

RunExamplesBold errorsBold costCautious errorsCautious costTotal expected lossDecision
v1 baseline240381264147173Not shippable
v2 after routing fix24021715259130Better, still too bold
v3 after threshold change24012407886126Cautious but safe
v4 tightening clarify prompts24014465562108Ship

The rule that falls out of this table is simple. Pick the run with the lowest total expected loss, not the highest accuracy. Moving from v2 to v3 barely changes the total, but it moves risk from the expensive column to the cheap one, and for a support agent that is usually the right trade. For a limited set of categories, you can also go stricter and require zero bold errors on the highest-cost intents, the way high-stakes moderation policies get a larger minimum sample than routine ones the Musubi moderation dataset guide.

Beware the reason escalations hurt so much. Tickets that leave the first tier can cost two to three times more than those resolved there, according to benchmarks cited in a support-operations analysis the HDI Conference article on escalations. Another analysis puts a first-tier resolution around $22 against $104 or more at tier three, citing HDI and MetricNet data the IrisAgent escalation guide. Treat those as directional, but the direction is consistent: a swallowed escalation is expensive, and a needless one is merely annoying. Set your cost tags so one swallowed account takeover outweighs several dozen unneeded clarifications, then let the arithmetic decide.

Keep the set honest as it grows

Three habits keep a golden set trustworthy. First, freeze it. Once a version is labeled and agreed, do not edit it; create a new version when policy changes so you can compare across versions the Langfuse engineering guide. Second, never train on it. Golden data is an independent test, and leakage quietly inflates your scores until the set stops predicting production behavior the QASkills golden dataset guide. Third, treat it as a living artifact that evolves with new failure modes and changing requirements, which is also what governance frameworks like NIST's AI Risk Management Framework expect from evaluation evidence the Maxim golden dataset guide.

The growth loop is straightforward. Every week, pull the tickets where the agent got a thumbs down, a human took over mid-conversation, or the case was reopened. For each, write the four fields, add it to the next version, and confirm the fix. Over a quarter the set becomes a catalog of every way your agent has actually failed, which is far more useful than a synthetic set that encodes your assumptions.

Before you scale, run one last realism check. If you test only against mocked routing tables and canned ticket text, you will not see how the agent behaves when the ticketing API is slow or returns a renamed field, the same trap teams hit when every service is mocked and the first real integration fails badly the dev/prod parity discussion. Golden examples should include a few live integrations, real order IDs, and stripped but realistic customer text, which means you need a safe way to use production-shaped data. Anonymization that preserves format and referential integrity is how teams get production-realistic test data without exposing customer records the Xata anonymization guide, and format-preserving encryption keeps identifiers valid while hiding their content so validation logic still works the Tonic FPE guide.

When you are ready to run the golden set against more than one model, sending the same 240 cases through a text model and a cheaper classifier is the usual next step, and an OpenAI-compatible gateway that takes one key for every model family keeps that comparison cheap and consistent; Quanta Inference is built for exactly that comparison. If building the agent itself is the bottleneck, Quanta's specialists can pick up the site, app, or internal tool and build it with you.

FAQ

FAQ

How many tickets do I need in a golden set for a support agent?

A practical starting point is 150 to 250 examples spread across 12 to 20 intents, with deliberate over-weighting of the high-cost handoff paths. Focused sets of 50 to 100 cases are enough to begin, and they should come from real failures rather than invented scenarios the QASkills golden dataset guide. Add examples as production failures appear, and version the set so old runs stay comparable.

Should the golden set mirror my real ticket mix by intent?

No, mirror the loss, not the volume. Golden sets should be deliberately weighted toward borderline and difficult cases so metrics show you where the system breaks the Musubi moderation dataset guide. A set that mirrors traffic will be dominated by password resets and will barely test the account takeover and legal threat paths where a mistake costs far more.

What does the expected action field actually buy me?

It separates three different jobs the agent does, so you can see which one is failing. Without it, an agent that clarifies endlessly and an agent that answers recklessly can score the same pass rate. With it, over-cautious and over-bold errors land in separate columns, and the cost tags let you sum them into one expected-loss number you can compare across versions.

How do I price the cost of each mistake without a finance team?

Start with a small ordinal scale, 1 for an inconvenience and 5 for a regulatory or security problem, and calibrate until the ordering matches your intuition about which failures you would fix first. You can anchor the scale with published escalation cost ratios, which put higher-tier handling at roughly two to three times the cost of first-tier resolution the HDI Conference article on escalations.

How often should I rebuild the golden set?

Review it quarterly and after any policy change, then cut a new version rather than editing the old one; keeping prior versions lets you track quality trends over time the Langfuse engineering guide. The day-to-day work is continuous: every missed escalation or reopened ticket becomes a candidate for the next version, so the set reflects how your customers actually write in.

Sources

Sources

  1. Golden dataset evaluation: build and maintain LLM test sets
  2. How to Build a Golden Dataset for LLM Evaluation
  3. Build an intent classification chatbot - Orq.ai Documentation
  4. How to Build Golden Datasets for Content Moderation - Musubi
  5. The Hidden Cost of Ticket Escalations and How to Reduce ...
  6. Ticket Escalation: How to Reduce Escalations by 40%+
  7. Building a “Golden Dataset” for AI Evaluation: A Step-by- ...
  8. development process - Dev/prod parity and microservices
  9. Anonymization: The Missing Link in Dev Workflows
  10. Real-World Applications of Format-Preserving Encryption
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles