This prompt is designed for support and commerce assistants that must distinguish between two or more closely related user intents. Instead of re-listing every possible option and forcing the user to re-read a menu, this prompt generates a differential clarification. It identifies the single distinguishing factor between the top candidate intents and asks a targeted question about that factor. Use this when your intent classifier returns multiple high-confidence matches, when the cost of acting on the wrong intent is high (e.g., initiating a return vs. an exchange, or canceling a subscription vs. pausing it), or when you need to reduce decision fatigue in customer-facing chat.
Prompt
User Intent Disambiguation Between Similar Options Prompt Template

When to Use This Prompt
A practical guide for deploying the differential clarification prompt to resolve ambiguous user intents in production support and commerce assistants.
The ideal workflow places this prompt after an intent classification step that produces a ranked list of candidate intents with confidence scores. You should only invoke it when the top two or three candidates are within a configurable confidence threshold (e.g., within 10% of each other) and the cost of a wrong action is non-trivial. The prompt requires the candidate intent labels, their brief descriptions, and the user's original message as inputs. It does not require the full conversation history, but including the last assistant turn can help avoid repeating information the user has already seen.
Do not use this prompt when the user's request is unambiguous, when there are more than three viable candidate intents (at which point a broader menu or triage flow is more appropriate), or when the distinguishing factor requires domain knowledge the user is unlikely to possess. For example, asking a customer to distinguish between ACH return code R01 and R02 is a failure mode—the clarification must be framed in terms the user can answer. Similarly, avoid this prompt in high-urgency scenarios where the delay of a clarification turn is worse than making a safe default assumption with a disclosure. In those cases, pair the assumption with an opt-out mechanism rather than blocking on user input.
Use Case Fit
This prompt template is designed for high-stakes disambiguation where the cost of choosing the wrong option is significant. It excels at highlighting the single differentiating factor between similar intents but requires structured input to avoid introducing its own framing bias.
Good Fit: High-Cost Selection Errors
Use when: The user is choosing between two or more options where an incorrect selection has a high operational cost, such as canceling a subscription vs. pausing it, or deleting a record vs. archiving it. Why it works: The prompt is engineered to isolate the single most critical distinguishing factor, reducing the user's cognitive load and the probability of a costly mis-click.
Bad Fit: Exploratory Browsing
Avoid when: The user is in a discovery phase, casually browsing similar products, or comparing features for general knowledge. Risk: Forcing a differential clarification in a low-stakes browsing context feels pedantic and creates unnecessary friction, disrupting the user's exploratory flow. Use a standard feature comparison prompt instead.
Required Inputs: A Curated Candidate Set
Requirement: This prompt is not a search or retrieval step. It requires a pre-ranked list of 2-4 highly similar candidate intents or options as input. Guardrail: Feeding it a long, noisy list of possibilities will produce a vague, unhelpful clarification. The upstream system must first narrow the field to near-duplicate candidates before invoking this template.
Operational Risk: Option Framing Bias
What to watch: The model's choice of the 'distinguishing factor' can inadvertently frame one option as the obvious or safer choice, biasing the user's decision. Guardrail: Implement an eval that checks the generated clarification for neutral, symmetrical language. A human reviewer should spot-check a sample of outputs for any implicit steering before production deployment.
Operational Risk: Decision Fatigue from Over-Clarification
What to watch: Deploying this prompt for every minor ambiguity will exhaust users with constant micro-decisions. Guardrail: Wrap this prompt in a Clarification Cost-Benefit Decision gate. Only invoke disambiguation when the confidence score for the top intent is below a defined threshold and the cost of a wrong assumption is high. Log all clarification requests to monitor the rate and adjust the threshold.
Copy-Ready Prompt Template
A copy-ready prompt for disambiguating closely related user intents by generating a single, differential clarification question.
This prompt template is designed for support and commerce assistants that must distinguish between two or more very similar user intents. Instead of re-listing all possible options and forcing the user to read a menu, this prompt instructs the model to identify the single most critical distinguishing factor and ask a targeted question about it. This reduces decision fatigue and keeps the conversation moving forward efficiently.
codeSYSTEM: You are an intent disambiguation assistant. Your goal is to resolve ambiguity between closely related user intents with a single, precise question. Do not re-list all options. Instead, identify the one distinguishing factor that separates the top candidate intents and ask a question that directly targets that factor. Frame the question to be easily answered with a short phrase or a single selection. USER INTENT CANDIDATES: [CANDIDATE_INTENTS] USER MESSAGE: [USER_INPUT] CONVERSATION HISTORY: [CONVERSATION_HISTORY] INSTRUCTIONS: 1. Analyze the user's message and conversation history against the provided intent candidates. 2. Identify the top two most likely intents that are easily confused. 3. Determine the single most important piece of information that would differentiate them. 4. Generate a concise clarification question that asks for that specific piece of information. Do not ask an open-ended "How can I help?" question. 5. If the user's intent is already clear and unambiguous, output "INTENT_CLEAR: [Intent Name]". 6. If the user's message is unrelated to all candidates, output "UNRELATED". OUTPUT FORMAT: If clarification is needed, output ONLY a JSON object with the following keys: - "clarification_question": The single question to ask the user. - "target_differentiator": A brief label for the distinguishing factor (e.g., "order_type", "account_access_level"). - "candidate_intents": An array of the two intent names being disambiguated. If the intent is clear, output ONLY: "INTENT_CLEAR: [Intent Name]" If the message is unrelated, output ONLY: "UNRELATED" CONSTRAINTS: - Do not output any text outside the specified JSON format or the clear/unrelated signals. - Do not suggest actions or provide solutions. Only ask the clarifying question. - The question must be answerable in a few words.
To adapt this template, replace the placeholders with your application's specific data. [CANDIDATE_INTENTS] should be a structured list of your system's possible intents, each with a name and a brief description. [USER_INPUT] is the latest message from the user, and [CONVERSATION_HISTORY] is the formatted history of the current session. The output format is designed for a programmatic harness: parse the JSON to extract the question and display it to the user, or route the INTENT_CLEAR and UNRELATED signals to the appropriate downstream logic. Before deploying, test this prompt with a golden dataset of ambiguous and unambiguous inputs to ensure the model correctly identifies the differentiating factor and does not default to a generic, unhelpful question.
Prompt Variables
Required and optional inputs for the User Intent Disambiguation prompt. Each variable must be validated before the prompt is assembled to prevent option framing bias and ensure the model has enough signal to generate a differential clarification.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[USER_QUERY] | The raw user message containing the ambiguous intent | "I need to change my plan" | Non-empty string. Reject if length < 3 characters or contains only stop words. Log if query matches known injection patterns. |
[CANDIDATE_OPTIONS] | The list of similar intents or options the user might be referring to | ["Upgrade subscription tier", "Switch billing cycle", "Modify add-on services"] | Must contain 2-5 distinct options. Reject if options are duplicates, empty, or exceed 5 (triggers decision fatigue). Each option must be a concise label under 80 characters. |
[DIFFERENTIATING_ATTRIBUTE] | The key dimension that distinguishes the candidate options from each other | "What changes about the plan: cost, duration, or features" | Non-empty string. Must name a single distinguishing axis, not a compound. Validate that the attribute actually differentiates the provided options; fail if all options share the same value on this axis. |
[PRIOR_CONTEXT] | Relevant conversation history or session state that may resolve the ambiguity | "User mentioned annual billing in previous turn" | Nullable. If provided, must be a string under 500 tokens. Truncate with ellipsis if longer. If null, the prompt must rely solely on the current query. |
[MAX_CLARIFICATION_OPTIONS] | The maximum number of options to present in the clarification question | 2 | Integer between 2 and 3. Default to 2. Values above 3 increase decision fatigue and should be rejected unless explicitly approved for the use case. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score required to skip clarification and proceed with the top intent | 0.85 | Float between 0.0 and 1.0. Default to 0.85. Lower values increase false-positive intent matching; higher values increase unnecessary clarification rate. Log when threshold is overridden. |
[OUTPUT_FORMAT] | The structure the clarification response must follow | "json" or "markdown" | Must be one of: "json", "markdown". Default to "json" for programmatic consumption. If "markdown", validate that the output still contains machine-parseable option identifiers for downstream routing. |
Implementation Harness Notes
How to wire the User Intent Disambiguation prompt into a production application with validation, retries, and observability.
This prompt is designed to be called as a mid-dialogue intervention, not a standalone classifier. It should be triggered when your primary intent classifier returns two or more candidate intents with confidence scores within a configurable ambiguity threshold (e.g., top two scores within 0.15 of each other). The prompt expects a structured input containing the user's original utterance, the list of ambiguous candidate intents with their descriptions, and the conversation history for context. The output is a single clarification question that highlights the distinguishing factor between the top candidates, avoiding a re-listing of all options. This keeps the user experience focused and reduces decision fatigue.
To wire this into an application, implement a pre-call validation layer that checks the input schema before sending the request. The [AMBIGUOUS_INTENTS] array must contain at least two intents, each with an intent_name and description field. The [CONVERSATION_HISTORY] should be a serialized list of prior user and assistant turns. On the output side, parse the model's response against a strict schema: {"clarification_question": string, "distinguishing_factor": string, "options": [{"label": string, "maps_to_intent": string}]}. If the output fails schema validation, implement a single retry with the validation error message appended to the prompt as a correction instruction. If the retry also fails, fall back to a static clarification template that lists the top two intent names and asks the user to choose, ensuring the conversation never dead-ends. Log every disambiguation event—including the ambiguous intents, the generated question, and the user's eventual choice—to a structured logging system for later eval and prompt refinement.
For model choice, a fast, cost-effective model (like GPT-4o-mini or Claude Haiku) is usually sufficient, as this is a low-latency, structured generation task. Avoid using this prompt for intents that differ by a critical safety or permission boundary; in those cases, route to a dedicated safety classifier first. Never expose the raw maps_to_intent field to the user, as it leaks internal system logic. The user should only see the label text. Finally, build an eval harness that measures two key metrics: option framing bias (whether the clarification question subtly favors one option) and resolution rate (the percentage of disambiguation turns that result in a clear user selection without a follow-up clarification). Run this eval suite against a golden dataset of known ambiguous utterance pairs before any prompt update is deployed.
Expected Output Contract
Define the exact structure, types, and validation rules for the differential clarification output. Use this contract to build a parser and validator in your application harness before deploying the prompt.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
differential_question | string | Must contain exactly one question. Must explicitly name the distinguishing factor between the top two candidate intents. Length must be between 20 and 200 characters. | |
top_candidates | array of objects | Array must contain exactly 2 objects. No more, no less. Each object must have 'intent_label' (string) and 'distinguishing_factor' (string) fields. | |
top_candidates[].intent_label | string | Must match a value from the [CANDIDATE_INTENTS] input list exactly. No paraphrasing or synonym substitution allowed. | |
top_candidates[].distinguishing_factor | string | Must describe the single, most salient feature that separates this candidate from the other. Must not repeat the intent label. Length between 10 and 100 characters. | |
discarded_candidates | array of strings | If present, each string must match a value from [CANDIDATE_INTENTS] that was not included in top_candidates. Null or empty array is acceptable when only two candidates exist. | |
suggested_user_options | array of strings | Must contain exactly 2 short, mutually exclusive reply options that a user can click or say. Each option must be under 15 characters. Options must not be 'Yes' or 'No'. | |
confidence_score | number | Must be a float between 0.0 and 1.0. Represents the model's confidence that the differential framing is correct. If below 0.7, the harness should escalate to a human agent instead of showing the clarification. | |
rationale | string | If present, must be a single sentence under 150 characters explaining why this differential framing was chosen. Must not contain PII or raw user input. Used for debug logs only, not shown to the user. |
Common Failure Modes
When disambiguating similar user intents, these failures erode trust, waste context budget, and increase decision fatigue. Each card pairs a common failure with a concrete guardrail.
Option Framing Bias
What to watch: The prompt's differential clarification subtly favors one option by listing it first, using more positive language, or framing it as the default. Users anchor on the presented order rather than their actual need. Guardrail: Randomize option order in the clarification prompt and use a neutral comparison structure that highlights the distinguishing factor without evaluative adjectives.
Re-Listing Instead of Differentiating
What to watch: The model regurgitates all available options with full descriptions instead of isolating the single distinguishing factor between the top candidates. This wastes tokens and forces the user to re-evaluate everything. Guardrail: Constrain the output schema to a single differential question field and a max two-sentence explanation of the trade-off. Validate that the response does not repeat option descriptions already in context.
False Equivalence When One Option Dominates
What to watch: The model presents a clarification choice between options when one clearly matches the user's stated constraints and the other violates them. This creates unnecessary friction and makes the assistant appear incompetent. Guardrail: Add a pre-clarification check step that scores each option against explicit user constraints. Suppress the clarification and proceed if one option exceeds a 0.9 confidence threshold.
Clarification Loop Without Escape
What to watch: The user answers the differential clarification, but the model asks a follow-up clarification on a new dimension, trapping the user in a multi-turn interrogation. Each turn burns context budget and patience. Guardrail: Set a maximum of one differential clarification per intent. If ambiguity remains after the user's response, proceed with the best option and disclose the assumption in the response.
Ignoring Implicit User Preference Signals
What to watch: The prompt treats all ambiguity as equal and ignores signals from conversation history, user profile, or prior turns that already disambiguate the intent. The clarification asks the user to repeat information they already provided. Guardrail: Include prior turn context and user preference slots in the disambiguation prompt. Require the model to cite the specific missing signal before generating a clarification question.
Decision Fatigue from Over-Explanation
What to watch: The differential clarification includes excessive background, edge cases, and caveats that overwhelm the user. The distinguishing factor gets buried in prose, and the user defaults to the first option or abandons the interaction. Guardrail: Enforce a strict output length limit on the clarification text. Use a template that places the distinguishing factor in the first sentence and defers non-critical details to a collapsible or follow-up response.
Evaluation Rubric
Use this rubric to evaluate the quality of the disambiguation prompt's output before shipping. Each criterion targets a specific failure mode common in differential clarification.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Differential Framing | The clarification highlights the single distinguishing factor between [OPTION_A] and [OPTION_B], not a re-listing of all features. | Output reads like a generic comparison table or re-states the full description of each option without isolating the difference. | Human review: Does the question force a choice on one axis? Automated check: Count of unique differentiating keywords vs. total option description tokens. |
Option Framing Bias | Both options are presented with neutral, symmetric language. No option is framed as the default, recommended, or obviously superior choice. | One option uses positive valence language (e.g., 'best', 'recommended', 'full') while the other uses negative or diminutive language (e.g., 'basic', 'limited', 'just'). | LLM-as-judge with a pairwise bias rubric. Prompt the judge: 'Does this clarification favor one option over the other?' Pass if score is 'No detectable bias'. |
Decision Fatigue Reduction | The user is presented with exactly two choices, or a single clarifying question with a constrained yes/no or A/B answer. No open-ended questions. | The output asks 'Which one would you like?' or 'Can you tell me more about what you need?' without constraining the response format. | Parse check: The output must end with a question mark and contain a constrained choice indicator (e.g., 'Option A or Option B?'). Fail if open-ended. |
Schema Compliance | The output is valid JSON matching the expected schema with fields for | Missing required field | Automated JSON schema validation in the harness. Check field presence, type, and null constraints. Fail on any schema violation. |
Context Relevance | The differential axis directly references the user's stated need or the specific ambiguity in their input. It does not introduce a generic or unrelated distinction. | The differential axis is a generic property (e.g., 'price', 'speed') that was not implied by the user's query or the ambiguous options. | Semantic similarity check: Cosine similarity between the user's input embedding and the |
Confidence Threshold Adherence | If the model's internal confidence in the top intent is above the [CONFIDENCE_THRESHOLD], it should proceed without clarification. The rubric only applies when confidence is below the threshold. | The clarification prompt is triggered even when the model reports high confidence (>0.9) in a single intent, causing unnecessary friction. | Harness check: Assert that the disambiguation prompt is only called when the upstream intent classifier's confidence score is less than [CONFIDENCE_THRESHOLD]. |
Abstention on Unresolvable Ambiguity | If the options are functionally identical for the user's stated goal, the output correctly states that either option works and asks for confirmation to proceed with a sensible default. | The model invents a spurious or trivial distinction (e.g., 'one has a blue icon') to force a clarification when none is needed. | Edge case test: Provide two options with identical capabilities for the user's goal. Pass if the output recommends proceeding without a forced distinction. Fail if it generates a trivial question. |
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
Use the base prompt with a frontier model (GPT-4o, Claude 3.5 Sonnet). Remove the [OUTPUT_SCHEMA] constraint and ask for plain text with bulleted options. Skip confidence scoring and just ask the model to highlight the key difference between the top two intents.
codeUser said: [USER_INPUT] Possible intents: [INTENT_LIST] Identify the two most likely intents and write one sentence that explains the key difference between them. Then ask the user which one they meant.
Watch for
- The model may re-list all options instead of isolating the distinguishing factor
- Without schema enforcement, the clarification question may drift into open-ended "How can I help?" language
- No way to measure if the clarification actually reduced ambiguity

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