This prompt is designed for platform engineers and AI infrastructure teams who are building intent classification middleware. Its primary job is to handle a critical failure mode in production routers: inputs that plausibly match multiple intent categories. When a user message like 'I can't log in and I need to cancel my subscription' hits a standard single-label classifier, the system either picks one intent and silently drops the other, or it forces a low-confidence tie-break that degrades downstream workflows. This prompt replaces that brittle behavior with a structured disambiguation output that surfaces all candidate intents, provides evidence spans from the input text, and recommends whether the system should split the request, ask for clarification, or route to a human.
Prompt
Ambiguity Flagging Prompt for Overlapping Intents

When to Use This Prompt
Define the job, reader, and constraints for the ambiguity flagging prompt.
The ideal user is an engineering lead or senior developer responsible for a routing layer that dispatches requests to separate agent pipelines, tool chains, or support queues. You should use this prompt when your production traffic contains compound or overlapping requests, when misclassification carries a high cost (e.g., a cancellation request routed to a billing FAQ agent), or when you need an auditable record of why the system chose one intent over another. Do not use this prompt for simple, single-intent classification where latency and token cost are the primary constraints; a lightweight zero-shot classifier with a confidence threshold is more appropriate for that use case. This prompt adds overhead by design, and that overhead is only justified when the cost of ambiguity exceeds the cost of the extra inference.
Before deploying this prompt, you must have a defined intent taxonomy and a clear policy for how your system handles multi-intent inputs. The prompt will not invent your routing logic; it will expose ambiguity that your application code must then resolve. Wire the output into a decision harness that can split a single input into multiple downstream workflows, queue a clarification question back to the user, or escalate to a human agent. The next section provides the copy-ready template, and the implementation harness section that follows will show you how to build the validation, retry, and logging layers around it.
Use Case Fit
Where the Ambiguity Flagging Prompt for Overlapping Intents works well, where it introduces risk, and the operational prerequisites for production deployment.
Good Fit: Multi-Intent Triage
Use when: user inputs contain multiple distinct requests, such as a support ticket asking for a refund and a feature change. Guardrail: The prompt returns a ranked list of candidate intents with evidence spans, enabling downstream splitting into separate workflows.
Bad Fit: Single-Intent Classification
Avoid when: the input taxonomy is strictly mutually exclusive and you only need one label. Risk: The ambiguity flagging prompt adds unnecessary latency, cost, and a clarification step that degrades the user experience for straightforward requests.
Required Inputs
What you need: a predefined intent taxonomy, the raw user input, and a confidence threshold for triggering clarification. Guardrail: Without a stable taxonomy, the prompt cannot reliably detect overlap. Inject the taxonomy as a structured list in the system prompt.
Operational Risk: Unnecessary Clarification
What to watch: The model asks for clarification when a single, high-confidence intent is sufficient. Guardrail: Implement a post-processing rule that suppresses the clarification flag if the top intent's confidence exceeds 0.9 and no other intent is above 0.3.
Operational Risk: False Disambiguation
What to watch: The model confidently selects a primary intent that is incorrect, hiding the ambiguity. Guardrail: Log all cases where the primary intent confidence is below 0.7. Route these to a human review queue for continuous evaluation of the prompt's calibration.
Integration Point: Downstream Dispatch
What to watch: The prompt's output format changes, breaking the routing middleware. Guardrail: Enforce a strict JSON output schema with a candidate_intents array and a needs_clarification boolean. Validate the schema in the application layer before any dispatch logic executes.
Copy-Ready Prompt Template
A reusable prompt template for flagging ambiguous inputs that match multiple intent categories, with placeholders for your taxonomy, evidence requirements, and routing logic.
This template is designed to be copied directly into your prompt management system or codebase. It forces the model to identify all plausible intents, extract supporting evidence, and make a structured recommendation rather than silently picking the highest-probability match. The square-bracket placeholders represent the dynamic parts you'll inject at runtime: your intent taxonomy, input text, output schema, and operational constraints.
codeYou are an intent classification auditor. Your job is to detect when a user input could reasonably match multiple intent categories and flag the ambiguity before routing occurs. ## INPUT [USER_INPUT] ## INTENT TAXONOMY [INTENT_TAXONOMY] ## INSTRUCTIONS 1. Identify every intent from the taxonomy that could plausibly match the input, even partially. 2. For each candidate intent, extract the exact text span from the input that supports the match. 3. Assign a confidence score (0.0 to 1.0) to each candidate based on how strongly the evidence supports that intent. 4. If multiple intents have confidence above [CONFIDENCE_THRESHOLD], set `ambiguity_detected` to true. 5. Recommend a primary intent only if one candidate is clearly dominant. Otherwise, set `primary_intent` to null. 6. If ambiguity is detected and no primary intent can be confidently selected, generate a clarification question that would disambiguate the top candidates. 7. If exactly one intent matches with high confidence, set `ambiguity_detected` to false and `clarification_needed` to false. ## OUTPUT SCHEMA Return valid JSON matching this structure: { "ambiguity_detected": boolean, "candidates": [ { "intent": string, "confidence": number, "evidence_spans": [string], "rationale": string } ], "primary_intent": string | null, "clarification_needed": boolean, "clarification_question": string | null, "routing_decision": "route" | "clarify" | "escalate" } ## CONSTRAINTS - Never select an intent not present in the provided taxonomy. - If no intent matches, return an empty candidates array and set routing_decision to "escalate". - Evidence spans must be verbatim substrings from the input. - Do not invent clarification questions that assume facts not present in the input.
To adapt this template, replace [INTENT_TAXONOMY] with your actual taxonomy as a structured list or JSON array. Set [CONFIDENCE_THRESHOLD] based on your tolerance for false disambiguation—start at 0.6 and tune after reviewing production logs. Inject [USER_INPUT] at runtime from your application layer. Before deploying, run this prompt against your golden test set and verify that the JSON output parses correctly, that evidence spans are exact substrings, and that the clarification questions are actionable rather than generic.
Prompt Variables
Required and optional inputs for the ambiguity flagging prompt. Each variable must be validated before injection to prevent prompt injection, taxonomy mismatch, or missing evidence spans.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[USER_INPUT] | The raw, unstructured text to classify for overlapping intents | I need to cancel my order but also want to know when the new version ships | Required. Must be non-empty string. Sanitize for prompt injection patterns before insertion. Max 4000 chars for latency budget compliance. |
[INTENT_TAXONOMY] | The predefined list of valid intent labels the model can assign | ["order_cancellation", "product_inquiry", "refund_request", "shipping_status", "account_update"] | Required. Must be valid JSON array of strings. Validate against production taxonomy schema. Reject if empty or contains duplicates. Version-stamp for drift detection. |
[TAXONOMY_DESCRIPTIONS] | Short definitions for each intent label to reduce ambiguity | {"order_cancellation": "User wants to cancel an existing order", "product_inquiry": "User asks about product features, availability, or release dates"} | Required. Must be valid JSON object with keys matching [INTENT_TAXONOMY]. Each value must be non-empty string. Missing descriptions cause false-disambiguation errors. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score required to auto-route without clarification | 0.75 | Required. Must be float between 0.0 and 1.0. Values below 0.6 increase unnecessary clarification rate. Values above 0.9 increase false-disambiguation risk. Calibrate against production eval set. |
[MAX_CANDIDATE_INTENTS] | Maximum number of candidate intents to return before forcing clarification | 3 | Optional. Defaults to 3. Must be integer between 1 and 5. Higher values increase downstream routing complexity. Lower values may suppress valid overlapping intents. |
[OUTPUT_SCHEMA] | The expected JSON structure for the model response | {"candidates": [{"intent": "string", "confidence": 0.0, "evidence_spans": ["string"]}], "primary_recommendation": "string", "clarification_needed": true} | Required. Must be valid JSON Schema or TypeScript interface. Validate model output against this schema post-generation. Schema mismatch triggers repair or retry. |
[FEW_SHOT_EXAMPLES] | Curated examples demonstrating correct ambiguity flagging behavior | [{"input": "Refund my last order and upgrade my account", "output": {"candidates": [{"intent": "refund_request", "confidence": 0.85, "evidence_spans": ["Refund my last order"]}, {"intent": "account_update", "confidence": 0.80, "evidence_spans": ["upgrade my account"]}], "primary_recommendation": "refund_request", "clarification_needed": false}}] | Optional but recommended. Must be valid JSON array of input-output pairs. Each example must reference only labels in [INTENT_TAXONOMY]. Stale examples cause taxonomy drift. Rotate quarterly. |
[CLARIFICATION_PROMPT_TEMPLATE] | Template for generating user-facing clarification questions when needed | I see you're asking about [intent_a] and [intent_b]. Which would you like me to help with first? | Required when clarification_needed can be true. Must contain at least one slot for intent names. Validate that generated questions include specific intent references, not generic 'Can you clarify?' text. |
Implementation Harness Notes
How to wire the ambiguity flagging prompt into a production classification pipeline with validation, retries, and human review fallbacks.
This prompt is designed to sit between your initial intent classifier and your downstream routing logic. When a primary classifier returns low confidence or multiple high-scoring intents, this prompt acts as a second-pass disambiguation engine. It should not be called on every input—only on inputs that fail a confidence threshold check or trigger a multi-intent flag from the primary classifier. This keeps latency and cost under control while adding a safety net for the most ambiguous cases.
Wire the prompt into a classification middleware that first calls your primary intent model. If the primary model's top intent confidence is below a configurable threshold (start at 0.75 and tune based on your tolerance for misrouting) or if the top two intents are within a margin (e.g., 0.15), invoke this ambiguity flagging prompt. Pass the original user input as [INPUT], the primary classifier's candidate intents and scores as [CONTEXT], and your full intent taxonomy as [TAXONOMY]. The output should be parsed as JSON and validated against a schema that requires candidate_intents (array of objects with intent, evidence_spans, and confidence), primary_recommendation (string), and clarification_needed (boolean). If clarification_needed is true, route to a human agent or a clarification generation module. If false, route to the workflow associated with primary_recommendation.
Validation and retry logic is critical here. After parsing the JSON output, validate that every evidence_span is a substring of the original input—hallucinated spans are a common failure mode. If validation fails, retry once with a stricter prompt that appends: [CONSTRAINT]: Every evidence_span must be an exact substring of the input text. If no exact match exists, use an empty string. If the retry also fails validation, escalate to human review. Log every ambiguity resolution with the original input, primary classifier scores, disambiguation output, and final routing decision. This trace is essential for tuning your confidence thresholds and detecting when your intent taxonomy has overlapping categories that need refinement.
Model selection matters for this workflow. The prompt requires careful reasoning over evidence spans and taxonomy boundaries, which smaller models often handle poorly. Use a capable model like Claude 3.5 Sonnet or GPT-4o for this disambiguation step, even if your primary classifier uses a smaller, faster model. The cost is justified because this prompt runs only on a small fraction of traffic. For high-throughput systems, consider caching disambiguation results for identical or near-identical inputs using a semantic deduplication layer. Do not use this prompt as your only classification step—it is a safety net, not a replacement for a fast, high-recall primary classifier.
Human review integration is the final piece. When clarification_needed is true, surface the original input, the candidate intents with evidence spans, and the model's primary recommendation in a review queue. The human reviewer should confirm or override the recommendation and optionally update the taxonomy if the ambiguity reveals a genuine gap. Track the rate of clarification_needed flags over time—if it exceeds 10-15% of disambiguation calls, your intent taxonomy likely needs restructuring or your primary classifier threshold is set too low.
Expected Output Contract
Fields, types, and validation rules for the ambiguity flagging prompt output. Use this contract to build a parser, validator, and downstream routing logic.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
candidate_intents | Array of objects | Array length >= 1. Each object must contain intent_label, evidence_spans, and confidence_score fields. | |
candidate_intents[].intent_label | String | Must match a label from the provided [TAXONOMY] list. Case-sensitive exact match required. | |
candidate_intents[].evidence_spans | Array of strings | Array length >= 1. Each string must be a verbatim substring of [INPUT_TEXT]. Empty array triggers a retry. | |
candidate_intents[].confidence_score | Number (float 0.0-1.0) | Must be between 0.0 and 1.0 inclusive. Scores across candidates must sum to <= 1.0. Null not allowed. | |
primary_recommendation | Object | Must contain intent_label and rationale. intent_label must appear in candidate_intents array. | |
primary_recommendation.intent_label | String | Must match one of the candidate_intents[].intent_label values exactly. | |
primary_recommendation.rationale | String | Must reference specific evidence_spans from the chosen candidate. Length >= 20 characters. Null not allowed. | |
clarification_needed | Boolean | Must be true if primary_recommendation confidence_score < [CLARIFICATION_THRESHOLD] or if top two candidate confidence scores differ by < [AMBIGUITY_MARGIN]. Otherwise false. | |
clarification_question | String or null | Required if clarification_needed is true. Must be a single interrogative sentence addressing the ambiguity. Null allowed only when clarification_needed is false. |
Common Failure Modes
Ambiguity flagging prompts fail in predictable ways when inputs sit at the boundary between intents. These cards cover the most common production failure modes and how to guard against them before they break downstream routing.
False Disambiguation
What to watch: The prompt picks a single intent when the input genuinely contains two overlapping requests, burying the secondary need. This happens when the primary recommendation overrides the evidence list. Guardrail: Require the output to include a secondary_intents array with evidence spans, and route to a splitter workflow when multiple intents exceed a confidence threshold.
Unnecessary Clarification Requests
What to watch: The prompt flags clarification_needed: true for inputs that are actually actionable, creating friction loops where the system asks the user to restate what they already said. Common when the prompt overweights minor ambiguity. Guardrail: Add a clarification_cost constraint in the prompt that requires the model to justify why the ambiguity blocks action, and log clarification rates by intent category for threshold tuning.
Evidence Span Drift
What to watch: The prompt cites evidence spans that don't actually support the assigned intent, or extracts spans that are too short to be meaningful. This breaks auditability and makes downstream routing decisions look arbitrary. Guardrail: Include a span_validation instruction requiring that each evidence span be a complete clause, and run periodic spot-checks comparing spans to source text for faithfulness.
Taxonomy Boundary Collapse
What to watch: When two intent categories in the taxonomy are semantically close, the prompt collapses them into one, losing the distinction that matters for downstream routing. This is common with domain-specific taxonomies where subtle differences drive different workflows. Guardrail: Include contrastive definitions in the taxonomy that explicitly distinguish adjacent intents with not_to_be_confused_with annotations, and test with boundary-case examples in regression suites.
Confidence Score Inflation
What to watch: The prompt assigns high confidence to ambiguous inputs because it defaults to the most likely intent without acknowledging uncertainty. This produces silent misroutes instead of triggering clarification or human review. Guardrail: Require the prompt to list factors_against_primary alongside the recommendation, and calibrate confidence thresholds against a labeled ambiguity dataset rather than relying on raw model scores.
Context Window Truncation Masking Ambiguity
What to watch: Long inputs get truncated before reaching the prompt, removing the portion that would have signaled a second intent. The prompt classifies confidently on partial information. Guardrail: Add a truncation_warning field to the input schema, and implement a pre-check that estimates whether the input length exceeds the prompt's effective context budget before classification runs.
Evaluation Rubric
Criteria for testing the Ambiguity Flagging Prompt before production deployment. Each row defines a pass standard, a failure signal to monitor, and a test method to embed in your eval harness.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Ambiguity Detection Recall | Flags input when two or more candidate intents have confidence within a 15-point margin | Prompt returns a single high-confidence intent for input that a human panel rates as ambiguous | Run against a golden dataset of 50 ambiguous inputs; require recall >= 0.90 |
False-Disambiguation Rate | Does not force a single primary intent when evidence is evenly split across candidates | Prompt assigns a primary intent with >80% confidence when candidate evidence spans are equal in weight | Test with synthetic inputs containing balanced evidence for two intents; primary confidence must be <= 70% |
Clarification-Needed Flag Precision | Sets clarification_needed=true only when top candidate confidence is below the configured threshold | Flag is set to true when a clear primary intent exists above threshold, causing unnecessary user friction | Run 100 production samples; measure precision of the flag against a human-labeled ground truth; require >= 0.85 |
Evidence Span Grounding | Every candidate intent includes at least one verbatim text span from [INPUT] that supports the classification | Candidate intents are returned with hallucinated or missing evidence spans | Parse output and assert each candidate.evidence_spans array is non-empty and each span is a substring of [INPUT] |
Candidate Intent Completeness | Returns all plausible intents when input genuinely overlaps multiple categories in [TAXONOMY] | Prompt omits a valid candidate intent that a human reviewer identifies, causing downstream routing gaps | Compare candidate intent lists against a human-annotated multi-label test set; require recall >= 0.85 across all labels |
Primary Recommendation Coherence | The primary intent is always one of the listed candidates and has the highest confidence score | Primary intent is not present in the candidates array or has a lower confidence than another candidate | Schema validation check: assert primary_intent is in candidates list and primary_confidence >= max(candidate.confidence) |
Output Schema Compliance | Response is valid JSON matching the [OUTPUT_SCHEMA] with all required fields present and correctly typed | Missing clarification_needed field, malformed confidence scores, or evidence_spans as string instead of array | Automated JSON Schema validator in eval harness; run on 100% of test outputs; require 0 schema violations |
Threshold Sensitivity | Behavior changes predictably when [CONFIDENCE_THRESHOLD] is adjusted between 0.5 and 0.9 | Clarification flag remains static or flips erratically across threshold values | Parameter sweep test: run same ambiguous input set at thresholds 0.5, 0.6, 0.7, 0.8, 0.9; flag rate must decrease monotonically |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a small, hand-labeled set of 20-30 ambiguous inputs. Use a frontier model (GPT-4o, Claude 3.5 Sonnet) with temperature 0. Remove the [OUTPUT_SCHEMA] constraint initially and ask for plain text structured as bullet points. Focus on whether the model correctly identifies candidate intents and evidence spans before enforcing JSON.
Watch for
- The model forcing a single intent when multiple are genuinely present
- Over-flagging for clarification on inputs a human would route confidently
- Evidence spans that point to the wrong part of the input
- Prompt length exceeding your context budget when the taxonomy is large

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.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us