Inferensys

Prompt

Support Ticket Intent Disambiguation Prompt Template

A practical prompt playbook for using the Support Ticket Intent Disambiguation Prompt Template in production AI workflows.
Operations team reviewing AI workflow automation on laptop, workflow builder visible, casual office setup.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the job-to-be-done, ideal user, required context, and limitations for the Support Ticket Intent Disambiguation Prompt Template.

This prompt is designed for support triage systems that receive tickets with unclear, overlapping, or mixed issue categories. It takes a raw support ticket and a defined taxonomy of issue types, and produces a ranked list of possible intents with confidence scores and a single, actionable clarification question for a human agent to ask the customer. Use this when your routing accuracy is degraded by ambiguous tickets, when agents spend too much time manually re-reading and re-classifying, or when you need a consistent disambiguation step before ticket assignment.

The ideal user is an engineering lead or AI builder integrating this prompt into an existing support operations pipeline. The required context includes a well-defined taxonomy of issue types, a raw ticket body, and optionally, customer metadata or history. The prompt is not a replacement for a full NLU pipeline or a multi-turn chatbot; it is a targeted disambiguation tool for a single ticket evaluation. It assumes a human agent will act on the clarification question, not an automated system.

Do not use this prompt when the ticket taxonomy is poorly defined, when the ticket is already clearly classified, or when the cost of a single clarification turn exceeds the cost of misrouting. Also avoid using it in real-time chat where the latency of a model call would degrade the user experience. For high-risk domains like healthcare or finance, ensure a human reviews both the ranked intents and the clarification question before sending it to the customer. The next step after using this prompt is to wire it into a triage harness that logs predictions, compares them to final resolutions, and measures routing accuracy improvement over time.

PRACTICAL GUARDRAILS

Use Case Fit

Where the Support Ticket Intent Disambiguation prompt template delivers value and where it introduces risk. Use these cards to decide if this prompt fits your triage pipeline before integrating it.

01

Good Fit: High-Volume, Multi-Category Queues

Use when: support tickets arrive in a shared queue with overlapping categories (billing, technical, account) and manual triage creates routing errors. Guardrail: the prompt reduces mean-time-to-route but requires a human agent to confirm the top-ranked intent before the ticket moves.

02

Bad Fit: Single-Category or Pre-Filtered Tickets

Avoid when: tickets are already pre-sorted by product area or when only one intent category exists. Guardrail: applying disambiguation here adds latency and false clarification questions with no routing improvement. Skip the prompt and route directly.

03

Required Inputs: Ticket Body and Category Taxonomy

What to watch: the prompt needs the full ticket body and a defined category taxonomy. Missing or vague categories produce unranked, useless output. Guardrail: validate that the taxonomy is passed as a structured list and that ticket text exceeds a minimum length before invoking the model.

04

Operational Risk: Clarification Question Quality

What to watch: a poorly worded clarification question sent to the customer creates back-and-forth loops and increases handle time. Guardrail: route the generated question to the support agent, not the customer. Let the agent edit or send it. Log question quality for weekly review.

05

Operational Risk: Intent Drift Across Model Versions

What to watch: model upgrades can shift the ranking order or clarification style, breaking downstream routing rules that depend on consistent top-intent labels. Guardrail: pin the model version in production and run a regression test suite of 50+ ambiguous tickets before any model change.

06

Operational Risk: Over-Clarification on Clear Tickets

What to watch: the prompt may generate a clarification question even when the intent is obvious, annoying agents and slowing triage. Guardrail: set a confidence threshold. If the top intent score exceeds 0.9, suppress the clarification question and route directly with a confidence note.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A production-ready template for disambiguating support tickets with mixed or unclear intents, producing a ranked classification and a single actionable clarification question.

This template is designed to be pasted directly into your prompt layer for a support triage system. It accepts a raw support ticket as input and returns a structured JSON object containing a ranked list of possible intents, a confidence score for each, and a single clarification question that a human agent can ask the customer. The prompt is engineered to avoid open-ended loops by constraining the output to one question that targets the highest-value ambiguity. Replace every square-bracket placeholder with your actual data before sending this to the model. The placeholders are designed to be filled by your application code, not by the end user.

text
You are a support triage classifier. Your job is to analyze a customer support ticket that may contain unclear, mixed, or ambiguous issue descriptions. You must produce a structured output that helps a human agent decide how to route the ticket and what to ask the customer next.

## INPUT
Ticket Subject: [TICKET_SUBJECT]
Ticket Body: [TICKET_BODY]
Customer Tier: [CUSTOMER_TIER]
Product Area: [PRODUCT_AREA]

## CONSTRAINTS
- Do not invent issue categories outside the provided taxonomy.
- Rank intents by likelihood, not by severity.
- Generate exactly one clarification question. It must be specific, answerable in one sentence, and target the highest-ambiguity gap between the top two intents.
- If the ticket intent is unambiguous (top intent confidence > [HIGH_CONFIDENCE_THRESHOLD]), set the clarification question to an empty string.
- Do not ask the customer to repeat information already present in the ticket.

## TAXONOMY
[INTENT_TAXONOMY]

## OUTPUT SCHEMA
Return a valid JSON object with this exact structure:
{
  "intents": [
    {
      "label": "string (from taxonomy)",
      "confidence": 0.0-1.0,
      "evidence": "string (quote from ticket)"
    }
  ],
  "top_intent": "string",
  "is_ambiguous": true/false,
  "clarification_question": "string (empty if unambiguous)",
  "suggested_routing": "string (team or queue name)"
}

## EXAMPLES
[FEW_SHOT_EXAMPLES]

## RISK LEVEL
[RISK_LEVEL]

Adaptation guidance: The [INTENT_TAXONOMY] placeholder should be replaced with your actual list of supported issue categories, ideally as a JSON array or a bulleted list with descriptions. The [FEW_SHOT_EXAMPLES] placeholder is critical for performance—include at least three examples that show ambiguous tickets with mixed intents and the correct clarification question. The [HIGH_CONFIDENCE_THRESHOLD] should be a float like 0.85 or 0.90, tuned against your eval set to balance unnecessary clarification against misrouting risk. The [RISK_LEVEL] field should be set to "high" if the ticket domain involves billing, security, or account access, which triggers additional validation and human review requirements in the implementation harness. If your taxonomy is large, consider injecting only the top-N relevant categories via a lightweight retrieval step before calling this prompt to keep context usage low.

Before deploying this template, validate that the output JSON parses correctly and that the clarification_question field is genuinely empty when is_ambiguous is false. A common failure mode is the model generating a generic question like 'Can you provide more details?' even for unambiguous tickets. Add a post-processing check that rejects clarification questions containing generic phrases. Wire the suggested_routing field into your ticket system's assignment logic, but always allow the human agent to override it. For high-risk tickets, route to a review queue regardless of confidence score.

IMPLEMENTATION TABLE

Prompt Variables

Required and optional inputs for the Support Ticket Intent Disambiguation prompt. Each placeholder must be populated before the prompt is assembled and sent to the model. Validation notes describe how to verify the input is well-formed before execution.

PlaceholderPurposeExampleValidation Notes

[TICKET_BODY]

The full unstructured text of the support ticket submitted by the customer, including subject line and description.

Subject: Cannot access admin panel after update Body: I updated to v4.2 this morning and now the admin panel shows a white screen. I've tried clearing cache but it didn't help. Also my reports aren't loading.

Non-empty string with minimum 10 characters. Reject tickets that are only whitespace, emoji, or attachments with no text. Log null or empty input as a pre-processing failure before model call.

[TICKET_CATEGORIES]

A defined list of valid support categories the model can classify the ticket into. Acts as the output label space.

["Account Access", "Billing", "Bug Report", "Feature Request", "Integration", "Performance", "Security", "Onboarding"]

Must be a non-empty array of unique strings. Validate that no duplicate labels exist and that the list matches the current production taxonomy. Schema check: array of strings, min 2 items, max 50 items.

[CUSTOMER_TIER]

The support tier of the customer submitting the ticket, used to adjust response priority and tone.

"enterprise"

Must be one of a predefined enum: "free", "starter", "professional", "enterprise", "partner". Reject unknown values. Default to "starter" only if explicitly configured as a fallback; otherwise fail fast.

[PRIOR_TICKET_SUMMARY]

A condensed summary of the customer's last 3 support tickets, if available. Used to detect recurring issues or pattern escalation.

"2024-11-02: Admin panel slow loading (resolved via cache clear). 2024-12-15: Report export timeout (resolved via batch size reduction)."

Optional. If provided, must be a string under 500 tokens. If null, the prompt must not hallucinate prior history. Validate token length before assembly; truncate with a note if over budget.

[AGENT_NAME]

The name of the support agent who will receive the disambiguation output, used to personalize the suggested clarification question.

"Jordan"

Non-empty string, max 50 characters. Strip leading/trailing whitespace. Reject strings containing only numbers or special characters. If null, use a generic placeholder like "the support agent" in the clarification question template.

[OUTPUT_SCHEMA]

The exact JSON schema the model must conform to in its response, including field names, types, required fields, and enum constraints.

{"type": "object", "properties": {"primary_intent": {"type": "string", "enum": ["Account Access", "Billing", "Bug Report", "Feature Request", "Integration", "Performance", "Security", "Onboarding"]}, "confidence": {"type": "number", "minimum": 0, "maximum": 1}, "alternative_intents": {"type": "array", "items": {"type": "object", "properties": {"intent": {"type": "string"}, "confidence": {"type": "number"}}, "required": ["intent", "confidence"], "maxItems": 3}}, "clarification_question": {"type": "string"}, "routing_decision": {"type": "string", "enum": ["auto_route", "clarify_first", "escalate"]}}, "required": ["primary_intent", "confidence", "alternative_intents", "clarification_question", "routing_decision"]}

Must be a valid JSON Schema object. Validate parseability before prompt assembly. Confirm that enum values in the schema match [TICKET_CATEGORIES]. Reject schemas missing required fields or with circular references.

[AMBIGUITY_THRESHOLD]

The confidence score below which the model should recommend clarification over automatic routing.

0.75

Must be a float between 0.0 and 1.0. Validate range. If set to 0.0, the model will always recommend clarification; if 1.0, it will never recommend clarification. Log threshold value in trace for auditability.

[MAX_CLARIFICATION_LENGTH]

The maximum character length of the generated clarification question to prevent verbose or multi-part questions.

150

Must be a positive integer between 50 and 300. Validate range. If the model output exceeds this length in post-processing, truncate and flag for review rather than silently passing through.

PROMPT PLAYBOOK

Implementation Harness Notes

How to wire the Support Ticket Intent Disambiguation prompt into a production triage system with validation, retries, and routing integration.

This prompt is designed to sit between your intake channel (API, form, email parser) and your ticket routing logic. It accepts a raw support ticket body and an optional list of valid routing categories, then returns a ranked intent classification with a clarification question. The implementation harness must validate the model's output against a strict schema before any routing decision is made, because a malformed intent label or missing clarification question will break downstream automation.

Wire the prompt into an application workflow that first assembles the [TICKET_BODY] and [ROUTING_CATEGORIES] variables. Send the assembled prompt to a model with structured output support (e.g., GPT-4o with response_format or Claude with tool use). On response, run a schema validator that checks: (1) primary_intent is a non-empty string present in the provided category list, (2) confidence_score is a float between 0.0 and 1.0, (3) alternative_intents is an array of objects each containing intent and confidence, (4) clarification_question is a non-empty string under 200 characters, and (5) clarification_rationale explains why clarification is needed. If validation fails, retry once with the validation error message appended to the prompt as a correction hint. If the retry also fails, route the ticket to a human triage queue with the raw model output attached for review.

For production deployment, log every disambiguation decision with the ticket ID, model version, confidence scores, and whether the clarification question was accepted or overridden by the agent. This creates an eval dataset for measuring routing accuracy improvement over time. Avoid wiring this prompt directly into customer-facing auto-responses—the clarification question is designed for an internal agent to review and send, not for unattended customer delivery. If your system must auto-respond, add a second review prompt that checks the clarification question for tone, policy compliance, and customer-appropriate language before sending.

IMPLEMENTATION TABLE

Expected Output Contract

Defines the required structure for the support ticket intent disambiguation output. Use this contract to validate model responses before routing or agent handoff.

Field or ElementType or FormatRequiredValidation Rule

ranked_intents

Array of objects

Array length >= 1 and <= 5. Each object must contain intent_label, confidence_score, and evidence_fragment.

ranked_intents[].intent_label

String

Must match an entry in [ALLOWED_INTENT_CATEGORIES]. No fabricated labels allowed.

ranked_intents[].confidence_score

Number (0.0-1.0)

Must be a float between 0.0 and 1.0. Scores must be in descending order across the array.

ranked_intents[].evidence_fragment

String

Must be a verbatim or near-verbatim substring from [TICKET_BODY]. Null not allowed.

top_intent

String

Must equal ranked_intents[0].intent_label. Used for quick routing checks.

ambiguity_flag

Boolean

Must be true if top_intent confidence_score < [CONFIDENCE_THRESHOLD] or if second-highest score is within [MARGIN_THRESHOLD] of top score.

clarification_question

String

Required if ambiguity_flag is true. Must be a single interrogative sentence. Must not exceed 150 characters. Must not re-list all options.

clarification_target

String or null

If clarification_question is present, must identify which ranked_intents entry the question aims to disambiguate. Null if ambiguity_flag is false.

PRACTICAL GUARDRAILS

Common Failure Modes

What breaks first when disambiguating support ticket intents in production, and how to prevent each failure before it reaches an agent or customer.

01

Over-Clarification Loop

What to watch: The prompt asks for clarification when the top intent confidence is already high enough to route correctly, causing unnecessary agent friction and delayed resolution. Guardrail: Set an explicit confidence threshold in the prompt (e.g., 'Do not ask for clarification if the top intent score exceeds 0.85') and validate in evals that clarification questions are only generated when ambiguity is genuine.

02

Vague Clarification Questions

What to watch: The generated question is open-ended ('Can you provide more details?') rather than targeted at the specific ambiguity between the top two candidate intents. This wastes a turn without resolving the routing decision. Guardrail: Constrain the prompt to produce a question that explicitly names the distinguishing factor between the top two intents, and add an eval check that measures whether the question would help a human agent choose correctly.

03

Intent Leakage from Ticket Metadata

What to watch: The model uses ticket fields like priority, requester department, or previous tags to infer intent rather than relying on the customer's actual description, causing misrouting when metadata is stale or incorrect. Guardrail: Instruct the prompt to classify based only on the customer-facing description field, and include a test case where metadata contradicts the description to verify the model ignores it.

04

Ranking Collapse on Near-Tie Intents

What to watch: When two intents have nearly identical descriptions (e.g., 'password reset' vs. 'account unlock'), the model assigns arbitrary rankings without signaling low confidence, leading to silent misroutes. Guardrail: Require the prompt to output a confidence gap between the top two intents and flag cases where the gap is below a minimum threshold for human review rather than auto-routing.

05

Clarification Question Duplicates Agent Work

What to watch: The generated clarification question asks the customer for information already present elsewhere in the ticket body or attachment, frustrating the customer and wasting the agent's time. Guardrail: Add an instruction to scan the full ticket content before generating a question, and include an eval that checks whether the answer to the clarification question already exists in the provided input.

06

Multi-Intent Merging Without Decomposition

What to watch: The customer describes two unrelated issues in one ticket, but the prompt forces a single intent classification, burying the secondary issue and causing incomplete resolution. Guardrail: Add a pre-check step that detects whether the input contains multiple distinct intents, and if so, outputs a decomposition with separate routing suggestions rather than forcing a single label.

IMPLEMENTATION TABLE

Evaluation Rubric

Use this rubric to test the Support Ticket Intent Disambiguation prompt before shipping. Each criterion targets a specific failure mode observed in production triage systems.

CriterionPass StandardFailure SignalTest Method

Intent Ranking Accuracy

Top-ranked intent matches the ground-truth label from a held-out test set of 200+ tickets.

Top intent is incorrect, or the correct intent is ranked below position 3.

Run prompt against a golden dataset of manually labeled, ambiguous tickets. Measure Top-1 and Top-3 accuracy.

Clarification Question Actionability

The generated question is specific enough that a non-technical customer can answer it with a single sentence.

Question is open-ended (e.g., 'Can you provide more details?'), asks for information already in the ticket, or requires technical knowledge.

Human review by a support team lead on a sample of 50 outputs. Score each question as 'Actionable' or 'Not Actionable'. Target >90% actionable.

Output Schema Compliance

The output is valid JSON matching the [OUTPUT_SCHEMA] exactly, with all required fields present and correctly typed.

JSON parsing fails, a required field like ranked_intents is missing, or a field contains an unexpected data type.

Automated schema validation in the test harness. Use a JSON Schema validator against the expected contract. Run on every CI build.

Confidence Score Calibration

The confidence score for the top intent is >= 0.7 when the intent is unambiguous and < 0.7 when it is genuinely ambiguous.

High confidence (>= 0.9) is assigned to a wrong intent, or low confidence (< 0.5) is assigned to a clearly correct intent.

Compare the model's confidence score against human-rated ambiguity labels (1-5 scale). Calculate Expected Calibration Error (ECE).

Clarification Necessity Gate

A clarification question is generated only when the top intent's confidence is below the [CLARIFICATION_THRESHOLD].

A question is generated for high-confidence intents (annoying the agent), or no question is generated for a low-confidence, ambiguous ticket.

Assert that clarification_question is null when confidence > [CLARIFICATION_THRESHOLD] and is a non-empty string when confidence <= [CLARIFICATION_THRESHOLD].

Routing Tag Validity

All routing_tags in the output are present in the provided [VALID_ROUTING_TAGS] list.

A hallucinated or misspelled routing tag appears, which would break downstream automation.

Set-based comparison in the eval script. Check that the set of output tags is a subset of the allowed tags list.

Source Grounding for Intent

Each intent in ranked_intents includes a rationale that quotes or directly references a phrase from the [TICKET_TEXT].

The rationale is generic ('The user seems frustrated'), hallucinates ticket content, or is missing entirely.

LLM-as-judge check: prompt a separate evaluator model to verify that each rationale is factually grounded in the provided ticket text.

Low-Information Input Handling

For tickets with fewer than 10 words, the prompt abstains by setting the top intent to 'insufficient_information' and confidence to 0.0.

The model confidently classifies a near-empty ticket into a specific category, leading to a misroute.

Unit test with a set of 10 short, ambiguous tickets (e.g., 'It's broken', 'Help'). Assert the top intent is 'insufficient_information'.

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Use the base prompt with a frontier model (GPT-4o, Claude 3.5 Sonnet). Remove strict output schema requirements initially. Focus on getting the ranked intent list and a single clarification question. Test with 20-30 real support tickets.

code
You are a support triage assistant. Given a support ticket, identify the primary and secondary intents, rank them by confidence, and suggest one clarification question the agent should ask.

Ticket: [TICKET_TEXT]

Watch for

  • Model returning intents not in your taxonomy without flagging them
  • Clarification questions that are open-ended instead of constrained
  • No confidence scores, making it hard to set routing thresholds
Prasad Kumkar

About the author

Prasad Kumkar

CEO & MD, Inference Systems

Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.

His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.