Inferensys

Prompt

Escalation vs Refusal Decision Prompt for Support Agents

A practical prompt playbook for using Escalation vs Refusal Decision Prompt for Support Agents in production AI workflows.
Developer designing multi-agent workflow on laptop, architecture diagram on screen, casual home office setup with afternoon light.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the operational boundary where a structured escalation-vs-refusal decision replaces ad-hoc agent behavior.

This prompt is designed for the decision layer of a customer support AI system, sitting between intent classification and response generation. Its job is to force a binary, auditable choice when a user request cannot be fulfilled automatically: refuse the request with a policy-grounded explanation, or escalate to a human agent with a packaged handoff context. The ideal user is an AI engineer or product developer integrating a support copilot where misrouting causes either safety gaps (a harmful request is answered) or queue overload (every difficult request is dumped on humans). You need this prompt when your system's authority is bounded by capability limits, safety policies, or regulatory constraints, and you cannot rely on a generic 'I can't help with that' response to handle every edge case.

Use this prompt when the cost of a wrong decision is high. For example, a healthcare support AI receiving a message like 'Is this chest pain normal after taking my medication?' must not attempt a clinical answer, but a blunt refusal without escalation could delay care. The prompt forces the model to weigh the request against a defined policy, classify the risk, and produce a structured verdict. It is not a post-hoc filter to catch bad outputs after they are generated; it is a pre-response gate. You should wire it into your application flow so that no response reaches the user without passing through this decision when a boundary condition is triggered. The output includes a machine-readable decision field (refuse or escalate), a human-readable rationale, and, for escalations, a handoff_package containing a summary, urgency level, and relevant context for the human agent.

Do not use this prompt for routine, low-risk requests that your system can handle autonomously. If you apply it to every user turn, you will create unnecessary latency and review queue noise. It is also not a replacement for a safety classifier that detects policy violations in raw user input; it assumes that a boundary has already been identified, and its job is to decide the routing outcome. Avoid deploying this prompt without a feedback loop: escalations that are consistently rejected by human reviewers indicate that your policy definitions or risk thresholds need recalibration. The next step after implementing this prompt is to build eval suites that measure false-positive escalation rates and refusal correctness against a golden dataset of boundary cases.

PRACTICAL GUARDRAILS

Use Case Fit

Where the Escalation vs Refusal Decision Prompt works and where it introduces risk. Use these cards to determine if this prompt fits your operational context before integrating it into a production support flow.

01

Good Fit: Tier-2 Support with Human Backup

Use when: You have a dedicated human review queue and need to reduce ticket volume by letting the AI handle clear policy violations autonomously. Guardrail: The prompt's structured decision output (escalate/refuse) is only as good as the policy definitions you inject. Ensure your [POLICY_CONTEXT] variable is updated with every policy change.

02

Bad Fit: Fully Autonomous Chatbots

Avoid when: There is no human agent available to receive the escalation. Routing to a null queue creates a dead-end user experience worse than a direct refusal. Guardrail: Implement a circuit breaker that defaults to a safe refusal message if the escalation endpoint is unreachable or the queue is full.

03

Required Input: Granular Policy Definitions

Risk: Vague policies like 'be helpful' cause the model to escalate too much or too little. Guardrail: The [POLICY_CONTEXT] input must contain explicit, machine-readable rules defining what is disallowed, what requires human review, and what is permitted. Test the prompt against edge cases for each policy clause.

04

Operational Risk: Review Queue Overload

Risk: A risk-averse prompt can escalate every slightly ambiguous query, overwhelming human agents and creating a false sense of security. Guardrail: Monitor the escalation rate in production. Implement a confidence threshold in the harness code that only routes to humans when the model's escalation_confidence score exceeds 0.85.

05

Operational Risk: Inconsistent Handoff Context

Risk: The human agent receives a ticket with no context, forcing the customer to repeat themselves. Guardrail: The prompt must output a structured handoff_package containing a summary, the original user query, and the specific policy triggered. Validate this schema in your integration tests.

06

Bad Fit: Real-Time Safety Interventions

Avoid when: The use case involves immediate physical safety risks, self-harm, or violence where a delay for AI classification is unacceptable. Guardrail: These scenarios require a deterministic rules engine upstream of the LLM. Use this prompt only for non-imminent, policy-driven support queries.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A reusable prompt with square-bracket placeholders that produces a structured JSON decision for escalating or refusing a support request.

This prompt template is designed to be copied directly into your application's prompt management system or codebase. It instructs the model to analyze a customer support request against your defined policies and output a structured decision: refuse the request with a safe alternative, escalate it to a human agent with packaged context, or handle it autonomously. The square-bracket placeholders must be replaced with your specific inputs before every call. Do not send the raw template to the model.

text
You are a support triage assistant for [COMPANY_NAME]. Your job is to decide whether a customer request should be refused, escalated to a human agent, or handled autonomously.

## POLICIES
[POLICY_DOCUMENT]

## ESCALATION CRITERIA
[ESCALATION_CRITERIA]

## REFUSAL CRITERIA
[REFUSAL_CRITERIA]

## CURRENT CONVERSATION
[CONVERSATION_HISTORY]

## LATEST USER MESSAGE
[USER_MESSAGE]

## USER CONTEXT
Account Tier: [ACCOUNT_TIER]
Previous Escalations: [PREVIOUS_ESCALATIONS]
Session Risk Score: [SESSION_RISK_SCORE]

## OUTPUT_SCHEMA
Return ONLY a valid JSON object with this exact structure:
{
  "decision": "refuse" | "escalate" | "autonomous",
  "confidence": 0.0-1.0,
  "rationale": "string explaining the decision",
  "policy_reference": "string citing the specific policy clause",
  "refusal_message": "string with the user-facing refusal text (only if decision is refuse)",
  "safe_alternative": "string with a constructive alternative (only if decision is refuse)",
  "escalation_priority": "low" | "medium" | "high" | "critical" (only if decision is escalate),
  "handoff_context": {
    "summary": "string summarizing the issue for the human agent",
    "key_facts": ["fact1", "fact2"],
    "attempted_resolutions": ["step1", "step2"],
    "risk_factors": ["risk1"]
  } (only if decision is escalate),
  "autonomous_response": "string with the response to send (only if decision is autonomous)"
}

## CONSTRAINTS
- If the request violates [REFUSAL_CRITERIA], you MUST refuse. Do not escalate refused requests unless the refusal itself is being challenged and the challenge meets escalation criteria.
- If the request meets [ESCALATION_CRITERIA], you MUST escalate. Package all relevant context for the human agent.
- If the request is routine and within policy, respond autonomously.
- Never fabricate policy. If a situation is not covered, escalate with low confidence.
- For regulated domains ([REGULATED_DOMAINS]), always escalate unless the request is purely informational and clearly labeled as not professional advice.
- If the user shows frustration signals across multiple turns, escalate regardless of other criteria.

Before integrating this prompt, replace every square-bracket placeholder with concrete values from your application context. The [POLICY_DOCUMENT] should contain your full support policy text, not a summary. The [ESCALATION_CRITERIA] and [REFUSAL_CRITERIA] should be explicit, machine-readable lists of conditions. For high-risk deployments, add a post-processing validation step that checks the output JSON against the schema before any action is taken. If the model returns invalid JSON or a decision that contradicts your hard policy rules, log the failure and default to escalation with a human agent.

IMPLEMENTATION TABLE

Prompt Variables

Inputs the prompt needs to work reliably. Validate each before sending to the model. Missing or malformed variables cause incorrect escalation/refusal decisions and directly impact review queue load and user trust.

PlaceholderPurposeExampleValidation Notes

[USER_QUERY]

The full customer message or support ticket content requiring a decision

I want to cancel my account and get all my data deleted immediately. I don't want to talk to anyone about it.

Required. Non-empty string. Check for null, whitespace-only, or injection patterns before sending. Max 4000 chars.

[USER_CONTEXT]

Account tier, tenure, recent tickets, and any known risk flags for this user

{"tier": "enterprise", "tenure_days": 840, "open_tickets": 1, "risk_flags": ["churn_risk"]}

Required. Valid JSON object. Must include tier, tenure_days, and risk_flags array. Null allowed for unknown fields but not for the object itself.

[SESSION_HISTORY]

Last 5 turns of the conversation for multi-turn risk evaluation

[{"role": "user", "content": "I'm frustrated with billing"}, {"role": "assistant", "content": "I understand. Let me look into that."}]

Required. Array of turn objects with role and content. Empty array allowed for first-turn requests. Max 5 turns to control context length.

[POLICY_BOUNDARIES]

The specific refusal and escalation policies that apply to this request type

Account deletion requests require identity verification before processing. Direct deletion without verification is disallowed. Escalate if user refuses verification.

Required. Non-empty string. Should be sourced from a policy store, not hardcoded. Validate that policy text matches expected policy version hash before use.

[ESCALATION_QUEUES]

Available human review queues with descriptions and current load indicators

[{"queue": "account_retention", "load": "medium", "sla_minutes": 15}, {"queue": "privacy_dsar", "load": "low", "sla_minutes": 60}]

Required. Valid JSON array with queue, load, and sla_minutes per entry. At least one queue must be present. Load values must be one of: low, medium, high, at_capacity.

[OUTPUT_SCHEMA]

The exact JSON structure the model must return for the decision

{"decision": "escalate|refuse", "rationale": "string", "queue": "string|null", "urgency": "low|medium|high|critical", "policy_cited": "string", "user_message_draft": "string"}

Required. Valid JSON schema string. Parse and validate the schema itself before injecting. Decision must be enum. Queue must be null when decision is refuse. Urgency required for escalate decisions.

[CONFIDENCE_THRESHOLD]

Minimum confidence score below which the decision auto-escalates to human review

0.85

Required. Float between 0.0 and 1.0. Default 0.85. Lower values increase false negatives. Higher values increase review queue load. Log threshold used with each decision for audit.

PROMPT PLAYBOOK

Implementation Harness Notes

How to wire the escalation vs. refusal decision prompt into a production support AI system with validation, retries, logging, and human agent routing.

This prompt is designed to sit at a critical decision point in a customer support AI pipeline: after the system has determined that a user request cannot be fulfilled autonomously, but before any response is sent to the user. The harness must invoke this prompt when the primary support agent's output is blocked by a safety policy, a capability boundary, or a regulated-domain restriction. The prompt's job is not to generate a user-facing message, but to produce a structured decision object that downstream routing logic can act on. The harness should treat this as a synchronous classification step with a strict latency budget—typically under 500ms—to avoid degrading the support experience.

Wire the prompt into your application by placing it behind a decision gateway that triggers on any refusal or policy-block event from the primary agent. The gateway should assemble the required inputs: the full conversation history up to the blocked turn, the specific policy or capability constraint that triggered the block, the user's account tier and authentication state, the current session's risk score, and the available human agent queues with their current load and expertise tags. Pass these into the prompt's [CONVERSATION_HISTORY], [BLOCK_REASON], [USER_CONTEXT], [SESSION_RISK_SCORE], and [AVAILABLE_QUEUES] placeholders. The model must return a JSON object with decision (enum: ESCALATE, REFUSE, REDIRECT), rationale, target_queue (if escalated), refusal_tone (if refused), and confidence (0.0–1.0). Validate this output against a strict JSON schema before acting on it. If validation fails, retry once with the validation error injected into the prompt's [PREVIOUS_ERROR] field. If the retry also fails, default to escalating to the general review queue and log the failure for investigation.

Log every decision this prompt makes, including the full input context, the raw model output, the validated decision, and the eventual routing action taken. This audit trail is essential for calibrating escalation thresholds, identifying over-refusal patterns, and demonstrating compliance in regulated domains. Implement a human feedback loop: when a human agent reviews an escalated case, capture their assessment of whether the escalation was appropriate and whether the refusal would have been acceptable. Feed this feedback into a periodic evaluation run using your LLM judge rubric to measure precision and recall of escalation decisions. Set up monitoring alerts for sudden spikes in escalation volume, drops in decision confidence below your configured threshold (default 0.7), and increases in schema validation failures. These signals often indicate model drift, policy changes that need prompt updates, or adversarial probing attempts.

For model selection, use a fast, instruction-tuned model capable of structured JSON output—Claude 3.5 Sonnet, GPT-4o, or Gemini 1.5 Flash are good starting points. Avoid using the same model instance that generated the original blocked response, as this creates a conflict of interest in the decision. If your system uses tool-calling or RAG, ensure that the escalation prompt does not have access to tools that could modify user data or send messages; its only output should be the decision JSON. When the decision is ESCALATE, the harness should immediately package the conversation context, the decision rationale, and any relevant policy references into a handoff payload and route it to the specified queue via your agent routing API. When the decision is REFUSE, pass the refusal_tone and rationale to a separate refusal-generation prompt that crafts the user-facing message—do not send the raw decision JSON to the user. When the decision is REDIRECT, route to a safe-alternative generation workflow that offers the user a policy-compliant path forward. Never allow the system to proceed with the original blocked action, even if confidence is low; the default posture must be safety-preserving.

IMPLEMENTATION TABLE

Expected Output Contract

The model must return a single JSON object matching this schema exactly. Use this table to build your parser, validator, and retry logic.

Field or ElementType or FormatRequiredValidation Rule

decision

string enum: "escalate" | "refuse"

Must be exactly one of the two allowed values. Reject any other string.

decision_rationale

string

Must be 1-3 sentences. Must reference at least one policy rule from [POLICY_RULES]. Reject if empty or purely generic.

policy_rule_id

string

Must match an ID present in the provided [POLICY_RULES] list. Reject if ID not found in source.

risk_level

string enum: "low" | "medium" | "high" | "critical"

Must be one of the four allowed values. If decision is "escalate", risk_level must be "high" or "critical".

user_impact_summary

string

Must be 1-2 sentences describing what the user will experience. If decision is "refuse", must include the refusal reason visible to the user.

handoff_context

object

Required when decision is "escalate". Must contain "summary" (string), "urgency" (string enum: "standard" | "priority" | "critical"), and "relevant_history" (array of strings). Reject if missing when decision is "escalate".

requires_supervisor

boolean

Must be true if risk_level is "critical". Must be false if decision is "refuse". Reject on mismatch.

confidence

number

Must be a float between 0.0 and 1.0 inclusive. If below [CONFIDENCE_THRESHOLD], the application layer should route to human review regardless of decision field.

PRACTICAL GUARDRAILS

Common Failure Modes

What breaks first when an AI system decides between refusing a request and escalating to a human agent, and how to guard against each failure.

01

Over-Escalation Flooding the Review Queue

What to watch: The model escalates low-risk, routine, or easily answerable requests to human agents, creating unsustainable review loads and agent fatigue. This often happens when the refusal policy is too broad or the confidence threshold is set too conservatively. Guardrail: Implement a tiered routing logic with explicit 'autonomous-safe' categories. Add a pre-escalation check that asks: 'Can this be resolved with a safe alternative or clarification question without human intervention?' Monitor escalation rates by category and set a target threshold (e.g., <15% of total requests).

02

False-Negative Escalation on High-Risk Requests

What to watch: The model incorrectly classifies a genuinely dangerous or policy-violating request as safe to handle autonomously, leading to harmful outputs, legal liability, or safety incidents. This is the highest-severity failure mode. Guardrail: Maintain a deny-list of non-negotiable escalation triggers (e.g., self-harm, child safety, regulated advice). These bypass the standard decision prompt and force immediate escalation. Run regression tests with adversarial examples before every prompt update to ensure these triggers are never missed.

03

Inconsistent Decisions Across Similar Requests

What to watch: Two nearly identical user requests receive different decisions—one is refused, the other escalated—eroding user trust and making agent workflows unpredictable. This stems from vague policy language or missing few-shot examples for boundary cases. Guardrail: Include 3-5 few-shot examples in the prompt that specifically target known ambiguous cases (e.g., 'Can you help me cancel my account?' vs 'Can you delete all my data?'). Log decision rationale alongside the final action so reviewers can audit consistency over time.

04

Missing Context in Agent Handoff Package

What to watch: The model escalates correctly but fails to package the conversation summary, risk classification, and reason for escalation, forcing the human agent to re-interview the user from scratch. Guardrail: Require a structured handoff object as part of the escalation output, including [CONVERSATION_SUMMARY], [ESCALATION_REASON], [RISK_LEVEL], and [PREVIOUS_REFUSALS]. Validate that all fields are populated before the handoff is accepted by the queue system.

05

Refusal Without a Safe Path Forward

What to watch: The model correctly refuses a disallowed request but provides no alternative, redirection, or explanation, leaving the user frustrated and more likely to attempt jailbreaking or abandon the product. Guardrail: Pair every refusal decision with a mandatory safe-alternative field. If no safe alternative exists, the prompt should default to a transparent explanation: 'I can't help with [X] because of [POLICY]. I can help with [Y] or connect you to a specialist.' Test refusal outputs for user sentiment impact.

06

Multi-Turn Probing Bypassing Single-Turn Checks

What to watch: An adversarial user gradually escalates request risk across multiple turns, staying below the single-turn escalation threshold until they receive a harmful output. The model treats each turn independently and misses the cumulative pattern. Guardrail: Implement a session-level risk accumulator that tracks cumulative risk scores across turns. If the session risk score crosses a threshold, force escalation regardless of the single-turn classification. Include the session risk trajectory in the handoff package.

IMPLEMENTATION TABLE

Evaluation Rubric

Run these checks against a golden dataset of 50-100 labeled support scenarios covering policy violations, capability gaps, ambiguous requests, and clearly actionable requests.

CriterionPass StandardFailure SignalTest Method

Decision Accuracy

Decision matches ground-truth label (escalate vs. refuse) for >= 95% of cases

Decision contradicts labeled ground truth; refusal when escalation was required or vice versa

Automated comparison of [DECISION] field against golden dataset labels; compute precision/recall per class

Policy Boundary Adherence

Refusal decisions cite correct policy category from [POLICY_LIST] in >= 90% of refusal cases

Refusal cites wrong policy, no policy, or a policy not in the approved list

LLM-as-judge check: does [RATIONALE] reference a policy from [POLICY_LIST]? Human audit on 20% sample

Escalation Routing Correctness

Escalation decisions route to correct queue from [QUEUE_MAP] in >= 95% of escalation cases

Escalation routes to wrong queue, missing queue, or null queue when escalation is required

Exact match of [ESCALATION_QUEUE] against expected queue per scenario metadata

Rationale Grounding

Rationale references specific user input evidence or policy text; no unsupported claims

Rationale contains hallucinated policy rules, fabricated user statements, or generic filler

LLM-as-judge check: does each sentence in [RATIONALE] trace to [USER_INPUT] or [POLICY_LIST]? Flag unsupported claims

Over-Refusal False Positive Rate

False positive rate (benign request refused) below 5% on clearly actionable subset

System refuses requests labeled as clearly actionable in golden dataset

Count refusals on subset labeled action_type=actionable; compute false positive rate

Under-Refusal False Negative Rate

False negative rate (disallowed request not refused or escalated) below 2% on policy violation subset

System returns action_type=fulfill for requests labeled as policy violation

Count non-refusal/non-escalation decisions on subset labeled action_type=policy_violation; compute false negative rate

Ambiguous Request Handling

Ambiguous requests escalate to human review with confidence below threshold in >= 90% of cases

Ambiguous request receives definitive refusal or fulfillment without escalation

Check [CONFIDENCE_SCORE] < [CONFIDENCE_THRESHOLD] triggers [DECISION]=escalate on subset labeled action_type=ambiguous

Output Schema Compliance

100% of outputs parse successfully against [OUTPUT_SCHEMA] with all required fields present

Missing [DECISION], [RATIONALE], [CONFIDENCE_SCORE], or [ESCALATION_QUEUE] fields; malformed JSON

Automated schema validation: parse JSON, check required field presence, validate enum values for [DECISION]

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Start with the base prompt and a simple JSON schema. Use a single decision field with enum values ["escalate", "refuse"]. Skip confidence scoring and handoff context packaging. Test with 10-15 clear-cut examples first.

code
You are a support triage assistant. Given a user request, decide whether to escalate to a human agent or refuse the request.

User request: [USER_REQUEST]
Support policy: [POLICY_SNIPPET]

Return JSON: {"decision": "escalate" | "refuse", "rationale": "string"}

Watch for

  • Missing schema checks leading to free-text responses
  • Overly broad refusal when escalation would preserve trust
  • No distinction between "can't help" and "won't help"
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.