This prompt is designed for retrieval pipeline engineers who need a deterministic, auditable method to classify a user query by its complexity before selecting a retrieval strategy. The core job-to-be-done is to score a query on dimensions such as multi-hop requirements, entity density, and constraint count, producing a structured complexity profile. This profile acts as a signal for a routing layer, enabling it to dispatch the query to the most appropriate backend—whether that's a simple keyword search, standard vector retrieval, a hybrid approach, or a full multi-hop agent workflow. The ideal user is an orchestration engineer or RAG architect who already manages multiple retrieval backends and needs to move beyond hardcoded rules or naive LLM routing to a more transparent, tunable dispatch mechanism.
Prompt
Query Complexity Scoring Prompt for Strategy Routing

When to Use This Prompt
Determine when to deploy a query complexity scoring prompt to route queries across retrieval backends with different cost and latency profiles.
You should use this prompt when your system has a clear cost and latency gradient across retrieval strategies, and you need to reserve expensive, advanced strategies for the subset of queries that genuinely require them. It is particularly effective when you have already established distinct retrieval paths (e.g., a fast keyword index, a dense vector store, and a slower agent-driven multi-hop process) and need a scoring layer to bridge the gap between the user's raw query and the backend selection logic. The prompt's structured output allows you to set explicit thresholds: for example, a query scoring below a certain multi-hop threshold might be routed directly to vector search, while a query with a high constraint count and entity density might trigger a hybrid retrieval with metadata filtering. This approach gives you fine-grained control over your retrieval budget and makes the routing logic auditable, as you can log the complexity scores alongside the final routing decision.
Do not use this prompt as a standalone answer generator or for queries that are already pre-classified by a hardcoded rule engine. If your system has a simple, static set of rules (e.g., 'all queries from this endpoint go to vector search'), adding a complexity scoring layer introduces unnecessary latency and cost. Similarly, avoid using this prompt when you have only a single retrieval backend; the scoring output provides no actionable routing value in a homogeneous retrieval environment. Finally, this prompt is not a substitute for a full query decomposition or planning step—it scores complexity but does not generate the sub-questions or execution plan required for a multi-hop agent. If the score indicates high complexity, you should hand off to a dedicated planning prompt or agent workflow rather than expecting this prompt to produce the final answer.
Use Case Fit
Where the Query Complexity Scoring Prompt delivers value and where it introduces risk. Use this to decide if complexity-based routing belongs in your retrieval pipeline.
Good Fit: Heterogeneous Query Traffic
Use when: your system receives a mix of simple lookup queries and complex multi-hop or constraint-heavy questions that benefit from different retrieval strategies. Guardrail: Monitor the distribution of complexity scores over time to detect drift in user behavior that might require recalibration.
Bad Fit: Uniform Query Patterns
Avoid when: nearly all queries fall into a single complexity bucket. The scoring prompt adds latency and cost without changing routing decisions. Guardrail: Run a complexity score histogram on production traffic before deploying the router. If one bucket exceeds 90%, use a static strategy instead.
Required Inputs
What you need: the raw user query string, plus optional session context if multi-turn disambiguation is relevant. Guardrail: Strip any PII or sensitive tokens before passing the query to the scoring model, especially if using an external LLM endpoint.
Operational Risk: Latency Budget Bloat
What to watch: adding a complexity scoring step before retrieval increases end-to-end latency. For simple queries that would have been fast anyway, this overhead can degrade user experience. Guardrail: Set a latency budget for the scoring call. If the scoring model exceeds it, fall back to a default retrieval strategy and log the timeout for analysis.
Operational Risk: Threshold Drift
What to watch: the numeric thresholds that separate 'simple' from 'complex' routing can become stale as your retrieval backends or user base evolve. Guardrail: Treat thresholds as tunable configuration, not hardcoded constants. Run periodic eval suites comparing routed outcomes against a golden set of expected strategy selections.
Operational Risk: Over-Decomposition
What to watch: a high complexity score might trigger unnecessary multi-hop retrieval when a single well-constructed query would suffice, wasting compute and increasing latency. Guardrail: Include a 'decomposition benefit' check downstream. If the multi-hop path retrieves no additional unique evidence, log the event and consider tightening the complexity threshold.
Copy-Ready Prompt Template
A production-ready prompt for scoring query complexity to route between simple and advanced retrieval strategies.
This prompt template is designed to be dropped into a retrieval orchestration layer. It takes a user query and a set of defined complexity dimensions, and returns a structured JSON object with a score for each dimension and a final complexity level. The output is intended to be consumed by a routing function that selects a retrieval strategy—such as single-pass vector search for simple queries or multi-hop agentic retrieval for complex ones.
textSystem: You are a query complexity analyzer for a retrieval system. Your job is to score a user query on multiple dimensions of complexity to determine the appropriate retrieval strategy. Return only valid JSON that matches the [OUTPUT_SCHEMA]. Do not include any other text. Complexity Dimensions: - multi_hop_required (0-3): Does the query require chaining multiple pieces of information? 0 = single fact, 3 = requires 3+ dependent retrieval steps. - entity_density (0-3): How many distinct entities, products, or named concepts are referenced? 0 = none, 3 = 5+ distinct entities. - constraint_count (0-3): How many explicit filters, conditions, or constraints are present? 0 = none, 3 = 4+ constraints. - temporal_complexity (0-3): Does the query involve relative time, date ranges, or versioning? 0 = no time aspect, 3 = multiple time windows or complex relative expressions. - comparison_required (0-3): Does the query ask for a comparison or trade-off analysis? 0 = no comparison, 3 = multi-entity, multi-attribute comparison. - domain_specificity (0-3): How specialized is the vocabulary or domain knowledge required? 0 = general language, 3 = requires deep domain terminology and concepts. Scoring Guidelines: - Score each dimension independently. - Use the full 0-3 range; do not default to middle values. - A score of 0 means the dimension is absent. - A score of 3 means the dimension is extreme for that category. Overall Complexity Level: - "simple": Sum of all scores <= 4. Route to single-pass vector search. - "moderate": Sum of all scores 5-10. Route to hybrid retrieval with re-ranking. - "complex": Sum of all scores >= 11. Route to multi-hop agentic retrieval with decomposition. User Query: [USER_QUERY] [OUTPUT_SCHEMA]
To adapt this template, replace [USER_QUERY] with the raw user input and [OUTPUT_SCHEMA] with your application's expected JSON structure. A typical schema includes integer fields for each dimension, an integer for total_score, and a string for complexity_level. If your routing logic uses different thresholds, adjust the scoring guidelines in the system prompt. For high-stakes applications where misrouting could cause compliance issues, add a [CONSTRAINTS] block specifying that the model should flag queries it cannot confidently score, and route those to a human review queue.
Before deploying, test this prompt against a golden dataset of 50-100 queries that span the full complexity range. Validate that the output is parseable JSON in at least 98% of cases and that the complexity_level assignment matches your expected routing decision in at least 90% of cases. Common failure modes include the model over-scoring domain_specificity for queries with a single technical term, or under-scoring multi_hop_required when the dependency is implicit. Add a post-processing validator that checks for missing fields, out-of-range scores, and schema compliance before the routing decision is made. For production, log the raw scores alongside the final route taken so you can recalibrate thresholds as your retrieval system evolves.
Prompt Variables
Required inputs for the Query Complexity Scoring Prompt. Each variable 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.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[USER_QUERY] | The raw user question to score for complexity | What were the revenue impacts of our Q3 pricing changes in EMEA and how do they compare to APAC? | Non-empty string check. Reject null or whitespace-only input. Log and route to human review if query exceeds 2000 characters. |
[QUERY_CONTEXT] | Optional session history or user context that may clarify the query | Previous turn: 'Show me EMEA sales data.' User role: finance_analyst | Null allowed. If provided, must be a valid JSON object with 'history' and 'user_profile' keys. Schema validation required. |
[AVAILABLE_STRATEGIES] | List of retrieval strategies the router can dispatch to, with descriptions | [{"id":"simple_vector","description":"Single-pass dense retrieval"},{"id":"multi_hop_graph","description":"Graph traversal with entity resolution"}] | Must be a non-empty JSON array. Each entry requires 'id' (string) and 'description' (string). Reject if array is empty or missing required fields. |
[COMPLEXITY_DIMENSIONS] | The scoring dimensions to evaluate, with weight and threshold definitions | [{"name":"multi_hop_requirements","weight":0.4,"threshold":0.7},{"name":"entity_density","weight":0.3,"threshold":0.6}] | Must be a non-empty JSON array. Each entry requires 'name', 'weight', and 'threshold'. Weights must sum to 1.0 within 0.01 tolerance. Thresholds must be between 0.0 and 1.0. |
[OUTPUT_SCHEMA] | The expected JSON schema for the complexity score output | {"type":"object","properties":{"overall_score":{"type":"number"},"dimension_scores":{"type":"object"},"recommended_strategy":{"type":"string"}},"required":["overall_score","dimension_scores","recommended_strategy"]} | Must be a valid JSON Schema draft-07 object. Parse check before prompt assembly. Reject if 'required' array is empty or schema is not parseable. |
[CALIBRATION_EXAMPLES] | Few-shot examples mapping queries to expected complexity scores and strategies | [{"query":"What is our refund policy?","overall_score":0.1,"recommended_strategy":"simple_vector"},{"query":"Compare Q2 and Q3 churn by region with cohort analysis","overall_score":0.85,"recommended_strategy":"multi_hop_graph"}] | Must be a JSON array with 2-5 examples. Each example requires 'query', 'overall_score', and 'recommended_strategy'. Score values must be between 0.0 and 1.0. Strategy must exist in [AVAILABLE_STRATEGIES]. |
[CONFIDENCE_THRESHOLD] | Minimum confidence required to auto-route without human review | 0.8 | Must be a number between 0.0 and 1.0. Default to 0.8 if not provided. Log warning if set below 0.6. Reject values outside valid range. |
Implementation Harness Notes
How to wire the complexity scoring prompt into a production retrieval dispatch layer with validation, retries, and observability.
This prompt is designed to sit at the entry point of a retrieval dispatch layer, classifying every incoming user query before it hits any index. The implementation harness should treat the prompt as a synchronous, stateless function that receives a raw query string and returns a structured complexity score. Because the output directly controls routing decisions—simple queries go to a fast, cheap vector index while complex queries trigger multi-hop decomposition or hybrid retrieval—the harness must enforce strict output validation before any downstream system consumes the score. A malformed or hallucinated score can silently route a complex query to a simple index, producing an incomplete answer that erodes user trust without an obvious error signal.
Wire the prompt into your application as a pre-retrieval gate. The caller should pass the raw user query as [INPUT] and optionally include conversation context as [CONTEXT] if the query is part of a multi-turn session. The model should return a JSON object with integer scores for each dimension (multi-hop requirements, entity density, constraint count, temporal complexity, and ambiguity) plus a final composite score. Implement a JSON schema validator in your harness that rejects any response missing required fields, containing out-of-range values, or failing to parse. On validation failure, retry once with a stricter prompt that includes the validation error message. If the second attempt also fails, log the failure, route the query to a conservative high-capability retrieval path, and alert the on-call channel. For model selection, use a fast, instruction-following model such as Claude 3.5 Haiku or GPT-4o-mini to keep latency under 200ms at the dispatch gate. Avoid using a slow reasoning model here because the scoring step adds overhead to every query, and the cost of delay compounds across your user base.
Calibrate your routing thresholds against production data, not intuition. After deploying the harness, log the raw query, the scored dimensions, and the selected retrieval strategy for at least a week before tuning thresholds. Sample queries that received borderline scores and have a human reviewer label whether the routing decision was correct. Use this labeled set to adjust your threshold values and to measure precision and recall of the complexity classifier. Build a dashboard that tracks score distributions, validation failure rates, and routing decision changes over time. The most common production failure mode is threshold drift: as your user base or content corpus changes, the distribution of query complexity shifts, and previously reasonable thresholds begin misrouting queries. Schedule a monthly review of threshold calibration against recent query samples to catch this drift before it degrades answer quality.
Expected Output Contract
Defines the required fields, types, and validation rules for the JSON object returned by the Query Complexity Scoring Prompt. Use this contract to parse and validate the model's output before routing.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
complexity_score | number (0.0 to 1.0) | Must be a float between 0.0 and 1.0 inclusive. Reject if out of range or non-numeric. | |
complexity_rationale | string | Must be a non-empty string. Length must be between 20 and 500 characters. Reject if missing or too short. | |
multi_hop_required | boolean | Must be exactly true or false. Reject if string, null, or number. | |
entity_count | integer | Must be a non-negative integer. Reject if negative, float, or non-numeric. | |
constraint_count | integer | Must be a non-negative integer. Reject if negative, float, or non-numeric. | |
recommended_strategy | string | Must be one of the allowed enum values: 'simple', 'hybrid', 'decomposed', 'agentic'. Reject on case mismatch or unknown value. | |
disambiguation_needed | boolean | Must be exactly true or false. Reject if string, null, or number. | |
confidence | number (0.0 to 1.0) | Must be a float between 0.0 and 1.0 inclusive. If below 0.7, trigger human review or fallback routing. |
Common Failure Modes
What breaks first when scoring query complexity for strategy routing and how to guard against it.
Overestimating Complexity
What to watch: The model inflates scores for simple queries that contain a single technical term or a polite preamble, routing them to expensive multi-hop or graph strategies. Guardrail: Calibrate thresholds with a golden set of 50 simple queries. Require at least two complexity indicators (e.g., multi-hop AND entity density) before routing to advanced strategies.
Missing Implicit Multi-Hop Requirements
What to watch: Queries like 'What was the revenue impact of the outage last month?' appear simple but require chained retrieval: incident lookup, then financial data lookup. The model scores them as single-hop. Guardrail: Add a dedicated 'implicit dependency' check in the prompt. Maintain a library of dependency patterns (cause-effect, event-impact, comparison-prerequisite) that trigger automatic score elevation.
Entity Density Inflation on Boilerplate
What to watch: Long queries with many named entities from boilerplate text, email signatures, or copy-pasted context get high entity density scores, triggering unnecessary graph retrieval. Guardrail: Instruct the model to distinguish between query-intrinsic entities and incidental entities. Weight entity density by whether entities participate in the requested relationship or operation.
Constraint Count Blindness to Soft Constraints
What to watch: Queries with implicit constraints ('affordable,' 'recent,' 'relevant') get low constraint counts because the model only counts explicit filters like date ranges or categories. Guardrail: Include a taxonomy of soft constraint indicators in the prompt. Require the model to list detected constraints before scoring, enabling audit and threshold adjustment.
Threshold Drift After Model Migration
What to watch: Complexity scores shift systematically when switching between models (GPT-4 to Claude, or to a fine-tuned variant), breaking routing thresholds calibrated on the previous model. Guardrail: Maintain a calibration set of 100 scored queries. Run calibration on every model change and adjust thresholds using distribution matching. Log score distributions per model version in production.
Adversarial Complexity Injection
What to watch: Users or upstream systems append complex-sounding but irrelevant clauses to trigger expensive retrieval paths, wasting compute or bypassing simpler guardrails. Guardrail: Score complexity on the core query after stripping polite padding, repetition, and non-query text. Add a maximum complexity cap that triggers human review or conservative fallback rather than unlimited resource allocation.
Evaluation Rubric
Use this rubric to evaluate the Query Complexity Scoring Prompt before deploying it in a production routing layer. Each criterion targets a specific failure mode observed in complexity scoring for retrieval strategy selection.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Multi-hop detection accuracy | Score >= 0.8 when query requires 2+ dependent retrieval steps; score <= 0.3 for single-hop factual queries | Single-hop query scored as high complexity triggering unnecessary decomposition | Run 20 labeled query pairs (10 multi-hop, 10 single-hop) and measure F1 at threshold 0.5 |
Entity density scoring calibration | Entity count correlates with score: 0-2 entities maps to low, 3-5 to medium, 6+ to high | Entity-heavy query receives low complexity score and routes to simple keyword retrieval | Test with queries containing 0, 3, and 8 named entities; verify monotonic score increase |
Constraint count normalization | Each explicit constraint (date range, filter, condition) adds 0.1-0.2 to score; implicit constraints ignored | Query with 5 constraints scored same as query with 1 constraint | Feed queries with 1, 3, and 5 explicit constraints; verify score delta per constraint is consistent |
Threshold boundary behavior | Scores near routing threshold (0.45-0.55) trigger fallback or confidence flag, not hard cutoff | Score of 0.51 routes to advanced strategy while 0.49 routes to simple with no fallback | Test 10 queries engineered to score 0.49-0.51; verify fallback mechanism fires for all |
Output schema compliance | Response contains valid JSON with complexity_score (float 0-1), dimensions (object), and strategy (string) fields | Missing dimensions field or strategy value not in allowed enum | Validate 50 responses against JSON schema; require 100% structural compliance |
Score justification traceability | Each dimension score is accompanied by a reason referencing specific query tokens or structures | Dimension scores present but reason field is empty, generic, or hallucinates absent query features | Spot-check 20 responses; require reason field to contain at least one query-derived token per dimension |
Adversarial query resistance | Gibberish, empty, or prompt-injection queries receive score 0.0 and route to rejection or clarification | Injection query receives high complexity score and routes to expensive retrieval pipeline | Test with 10 adversarial inputs (empty string, 'ignore previous instructions', random tokens); verify score <= 0.1 |
Latency budget adherence | Scoring completes in under 500ms for queries under 200 tokens | Complexity scoring adds >1s latency to retrieval pipeline | Benchmark 100 queries at p50, p95, p99 latency; p95 must be under 500ms |
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 single scoring dimension (e.g., multi-hop requirements only). Use a simple 1–3 scale instead of the full 1–5 rubric. Skip threshold calibration and return raw scores plus a binary route decision.
codeScore the following query on multi-hop complexity from 1 (single-hop) to 3 (requires 3+ hops). Return JSON: {"score": int, "route": "simple" | "advanced"} Query: [USER_QUERY]
Watch for
- Overly broad definitions of "multi-hop" causing everything to route to advanced
- Missing entity density and constraint count dimensions hiding real complexity
- No calibration data, so thresholds are guesswork

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