Most teams write their first eval cases by sitting in a room and inventing prompts. That tests what you think the assistant should handle, not what it actually meets. Support tickets are the opposite: they are real user language, with real typos, missing context and frustration, and each one usually has a known resolution. Practical guides on building eval sets from production conversations make the same point, that synthetic test sets have blind spots in distribution, linguistic realism and edge case discovery that real conversation data fills ertas.ai.
The discipline you need here borrows from customer discovery research: ask about what people actually did, not what they would hypothetically do desertpacificicorps.org. A resolved ticket is a record of what a customer actually did and what actually fixed it. That is a stronger foundation than any brainstorm.
Set three constraints before you export anything:
- Fixed window. Pick a start and end date that both labelers can see in the export, for example the last 90 days of resolved tickets, as the conversation-eval guide recommends ertas.ai. Fixed windows keep the set reproducible and stop it drifting every time someone re-exports.
- Resolved only. Filter to tickets where the customer confirmed the fix or never reopened. Unresolved tickets are edge cases: keep them in a separate pile to test later, not in the core set ertas.ai.
- One input per ticket. Use the customer's first message, before any agent reply. Later messages contain the answer.
Strip greetings, signatures and apologies from agent responses if you are evaluating a reply generator, or keep them if you want the model to reproduce the full agent experience ertas.ai.



