Anthropic provides a Claude Haiku 5.5 low-effort customer-support ticket classification prompt with few-shot examples and XML tag constraints. It assigns each ticket a single intent and extracts the reasoning and intent separately for downstream routing.
Suitable tasks: Customer-support ticket intent classification as the first step in priority or specialist routing. The source emphasizes simple, high-volume requests; a limited taxonomy and interpretable analysis are practical deployment recommendations in this record.
Not suitable for: Requests with many categories, deep domain knowledge, or complex reasoning. Avoid replacing complete SLA decisions, permission checks, or high-risk human escalation directly; those are practical safeguards added in this record. Replace the three example labels with the business's taxonomy and evaluate against historical tickets.
Applicable model versions: Claude Haiku 5.5, model ID claude-haiku-5-5.
Applicable clients, agents, or APIs: Claude Messages API and Python SDK; the input is injected into the <request> tag with a Python f-string, and the output is extracted with regular expressions.
Recommended reasoning tier and parameters: output_config={"effort": "low"}, max_tokens=2048, and stream=False. Anthropic explicitly says this prompt is written for Haiku 5.5 at low effort; for Fable 5.1, Fable 5, Opus 5.5, Opus 5, or Sonnet 5.5, the page recommends asking for the intent and a one-sentence summary instead.
The complete prompt from the Anthropic page is preserved below. The page itself abbreviates Examples 3 through 8 with ...; replace those with real labeled examples before use rather than treating the ellipsis as a usable example.
def classify_support_request(ticket_contents):
classification_prompt = f"""You will be acting as a customer support ticket classification system. Your task is to analyze customer support requests and output the appropriate classification intent for each request, along with your reasoning.
Here is the customer support request you need to classify:
<request>{ticket_contents}</request>
Please carefully analyze the above request to determine the customer's core intent and needs. Consider what the customer is asking for has concerns about.
First, write out your reasoning and analysis of how to classify this request inside <reasoning> tags.
Then, output the appropriate classification label for the request inside a <intent> tag. The valid intents are:
<intents>
<intent>Support, Feedback, Complaint</intent>
<intent>Order Tracking</intent>
<intent>Refund/Exchange</intent>
</intents>
A request may have ONLY ONE applicable intent. Only include the intent that is most applicable to the request.
As an example, consider the following request:
<request>Hello! I had high-speed fiber internet installed on Saturday and my installer, Kevin, was absolutely fantastic! Where can I send my positive review? Thanks for your help!</request>
Here is an example of how your output should be formatted (for the above example request):
<reasoning>The user seeks information in order to leave positive feedback.</reasoning>
<intent>Support, Feedback, Complaint</intent>
Here are a few more examples:
<examples>
<example 2>
Example 2 Input:
<request>I wanted to write and personally thank you for the compassion you showed towards my family during my father's funeral this past weekend. Your staff was so considerate and helpful throughout this whole process; it really took a load off our shoulders. The visitation brochures were beautiful. We'll never forget the kindness you showed us and we are so appreciative of how smoothly the proceedings went. Thank you, again, Amarantha Hill on behalf of the Hill Family.</request>
Example 2 Output:
<reasoning>User leaves a positive review of their experience.</reasoning>
<intent>Support, Feedback, Complaint</intent>
</example 2>
<example 3>
...
</example 8>
<example 9>
Example 9 Input:
<request>Your website keeps sending ad-popups that block the entire screen. It took me twenty minutes just to finally find the phone number to call and complain. How can I possibly access my account information with all of these popups? Can you access my account for me, since your website is broken? I need to know what the address is on file.</request>
Example 9 Output:
<reasoning>The user requests help accessing their web account information.</reasoning>
<intent>Support, Feedback, Complaint</intent>
</example 9>
Remember to always include your classification reasoning before your actual intent output. The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
"""The Anthropic page gives the following Haiku 5.5 call configuration. It requires the model to generate complete reasoning and an intent before parsing, so it uses stream=False. The wrapper below combines the page's call and parsing snippets into a runnable example.
import anthropic
import re
client = anthropic.Anthropic()
DEFAULT_MODEL = "claude-haiku-5-5"
def send_and_parse(classification_prompt):
message = client.messages.create(
model=DEFAULT_MODEL,
max_tokens=2048,
output_config={"effort": "low"},
messages=[{"role": "user", "content": classification_prompt}],
stream=False,
)
reasoning_and_intent = next(
(block.text for block in message.content if block.type == "text"), ""
)
reasoning_match = re.search(
r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
)
reasoning = reasoning_match.group(1).strip() if reasoning_match else ""
intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
intent = intent_match.group(1).strip() if intent_match else ""
return reasoning, intentDefine mutually exclusive intents based on historical tickets, existing SLAs, support tiers, and specialist teams. The three example labels are illustrative only.
Fill Examples 3 through 8 with real labeled examples, with exactly one gold intent for each sample.
Pass the ticket body as ticket_contents and preserve the <request> boundary; do not concatenate untrusted ticket text directly into the system prompt.
Run with claude-haiku-5-5, effort=low, and max_tokens=2048, then parse <reasoning> and <intent>.
Evaluate accuracy, cost per ticket, response time, rerouting rate, and boundary cases. The page's example thresholds are 95% accuracy across 100 tests and a 50% average cost reduction relative to the existing routing method.
When there are more than about 20 categories, Anthropic recommends a taxonomy tree and cascading classifiers. For fast-changing tickets, retrieve similar examples from a vector database and inject the relevant examples into the prompt.
The original prompt requires reasoning in the output. Whether a production system stores or displays that reasoning should be decided separately based on privacy, compliance, and audit requirements; the routing logic can use only the intent.
The page does not provide a fixed accuracy rate for this prompt. “71% to 93%” describes the page's vector-retrieval classification recipe, not a guarantee for this prompt across all tickets.
Low effort is the example configuration the page gives for Haiku 5.5. If classification requires many categories, specialist judgment, or complex multi-intent handling, compare higher effort or Sonnet rather than only increasing max_tokens.
Regex parse failures, multiple intents, unknown categories, and safety refusals all require explicit client-side handling; do not route an empty string to a queue by default.
The page explicitly says Claude Haiku 5.5 is suitable for simple, high-volume requests at low effort and provides claude-haiku-5-5, effort=low, and the complete classification prompt.
The page does not publish a formal test set, real ticket samples, repeat count, or confidence interval for this example prompt. The example thresholds are deployment evaluation guidance, not model benchmark results.
The prompt's labels, examples, and routing rules must be replaced with the business's own definitions. Reusing Support / Order Tracking / Refund/Exchange directly can mismatch the labels with the business's queues.
Claude Haiku 5.5