Classify support tickets

Classification lives or dies on the label definitions and the escape hatch. Both are in this prompt.

When to use it

Routing at volume, where a wrong label costs more than an unrouted ticket.

What it prevents

Forced fits. Without an “other” category and permission to use it, every ticket gets a label — including the ones that belong in none of them. The confidence flag is what makes the output triageable.

The prompt

Copy this, then adapt it
Classify the support ticket below into exactly one category.

### Categories
- billing — anything about charges, refunds, or invoices
- bug — the product behaved incorrectly
- howto — the product works, the user does not know how to use it
- other — none of the above fits

### Output format
Return JSON and nothing else: {"category": "string", "confidence": "high or low"}

### Requirements
- Use "other" rather than forcing a poor fit. A wrong label costs more than an unclassified ticket.
- Set confidence to low whenever two categories are plausible.

### Example
{"category": "billing", "confidence": "high"}

### Ticket
"""
I was charged twice for March and the second charge has not been refunded.
"""

Instant checks

9 key structural practices evaluated locally

100% Coverage7/7
  • States a concrete task

    Passed
  • Avoids vague language

    Passed
  • Specifies an output format

    Passed
  • Avoids dangling references

    Passed
  • Includes an example

    Passed
  • Separates data from instructions

    Passed
  • Avoids over-aggressive phrasing

    Passed
Not a claim — the real checker, run on this prompt, in your browser.

Why each part is there

Every section of that prompt exists because a specific failure happens without it. These are the checks it passes, and what each one is protecting you from:

How to adapt this one

Rewrite the categories and their one-line definitions — the definitions carry the whole prompt — and always keep an “other” category with explicit permission to use it. Adapt the confidence flag to whatever your routing can act on. Without the escape hatch every ticket gets forced into a label, including the ones that belong in none, and a wrong route costs more than an unrouted ticket.

The mistake this prompt avoids

Offering categories with no “other” and no way to signal doubt. The model, told to pick one, always picks one — even for the ticket that fits none of them — and does it with the same confident tone as the easy cases. The “other” bucket and the low-confidence flag are what make the output triageable instead of uniformly certain and occasionally wrong.

A variation

Classifying into many labels rather than a handful? Switch from one category to a ranked top-three with confidence on each, and route the low-confidence ones to a human. Fine-grained taxonomies have genuinely ambiguous cases, and a single forced label hides the ambiguity a shortlist would have surfaced to someone who could resolve it.

Check your version

Once you have adapted it, run it through the checker. The same nine checks that graded this page will grade yours, free and in your browser — paste it in, or build one from scratch by answering a few questions.

More extraction prompts