This prompt is designed for monitoring pipelines that need to detect gradual topic or intent drift in long, multi-turn conversations. It is not a single-turn quality check. Use it when you need to identify conversations where the assistant follows tangents that lose the original user goal. The prompt produces drift scores per turn window and identifies the exact turn where the conversation diverged from the primary objective. This is a model-graded evaluation prompt, meaning it uses an LLM as a judge to analyze conversation logs. It belongs in your evaluation and observability stack, not in the real-time assistant loop. Run it asynchronously on sampled or flagged conversations to surface systemic drift patterns across your chat product.
Prompt
Context Drift Detection Prompt for Chat Logs

When to Use This Prompt
Understand the job-to-be-done, ideal user, required context, and when not to use this prompt.
The ideal user is an AI engineer or evaluation lead responsible for monitoring production chat quality. You need access to full conversation logs, including user messages, assistant responses, and any system prompts or tool outputs that shaped the interaction. The prompt requires a clearly defined primary objective for each conversation—this can be extracted from the initial user message, a session metadata tag, or a separate intent classifier. Without a well-defined objective, the drift detection becomes unreliable because there is no anchor to measure divergence against. You should also configure a drift threshold that matches your product's tolerance for tangents: a customer support chatbot may allow zero drift, while an open-ended creative assistant might accept moderate exploration before flagging.
Do not use this prompt for real-time guardrails or live intervention. It is an offline evaluation tool, not a production gate. Do not use it on conversations shorter than four turns, as drift patterns require sufficient interaction history to become detectable. Do not use it as a replacement for human review when conversations involve high-stakes decisions—drift scores should inform sampling strategies for human auditors, not replace them. If your assistant is designed to handle multiple intents within a single session, this prompt may produce false positives on legitimate topic shifts; in that case, pair it with a multi-intent tracking evaluation instead. Start by running this prompt on a labeled sample where you already know which conversations drifted, calibrate the threshold against your human judgments, and only then scale it across your production logs.
Use Case Fit
Where the Context Drift Detection Prompt works, where it fails, and what you must provide before running it in production.
Good Fit: Long-Form Support Chats
Use when: monitoring multi-turn support conversations where the assistant must resolve a single case without wandering into unrelated troubleshooting paths. Why: The prompt detects gradual topic shifts that abandon the original issue before resolution.
Bad Fit: Open-Ended Brainstorming
Avoid when: evaluating creative ideation sessions where topic exploration is the goal. Risk: The prompt will flag legitimate tangents as drift, producing false positives that penalize productive divergence. Use goal-completion scoring instead.
Required Input: Windowed Turn Blocks
Requirement: You must segment the conversation into sliding windows of 3-5 turns before running this prompt. Guardrail: Without windowing, the model cannot produce per-segment drift scores and will default to vague session-level judgments that miss gradual drift patterns.
Operational Risk: Threshold Tuning Drift
What to watch: Hardcoded drift thresholds that work in staging often fail in production as conversation patterns change. Guardrail: Log drift score distributions weekly and recalibrate acceptable vs. problematic thresholds based on human-reviewed samples, not static cutoffs.
Operational Risk: Intent Ground Truth Gap
What to watch: The prompt compares each turn window to the original user intent, but if that intent is misidentified at turn zero, all downstream drift scores are invalid. Guardrail: Run an intent classification step before drift detection and flag sessions where initial intent confidence is below your threshold.
Bad Fit: Single-Turn Evaluation Pipelines
Avoid when: your evaluation architecture only scores individual responses in isolation. Why: Drift detection requires turn-to-turn comparison and original intent anchoring. Single-turn evaluators lack the context window to detect gradual topic abandonment.
Copy-Ready Prompt Template
A reusable prompt for detecting context drift in chat logs, ready to paste into your evaluation harness.
The prompt below is designed to analyze a multi-turn conversation log and identify where the assistant's responses begin to drift away from the user's original stated goal. It operates on a configurable sliding window of turns, producing a drift score for each window and flagging specific turns where problematic tangents begin. The template uses square-bracket placeholders for all variable inputs—replace these with your actual data before running the evaluation. The prompt is structured to return a strict JSON schema, making it suitable for automated pipelines rather than ad-hoc manual review.
textYou are an expert conversation quality auditor. Your task is to analyze a multi-turn chat log and detect context drift—gradual or sudden shifts where the assistant's responses move away from the user's original stated goal or intent. ## INPUT [CHAT_LOG] ## PARAMETERS - Window size: [WINDOW_SIZE] turns - Drift threshold: [DRIFT_THRESHOLD] (0.0 to 1.0, where higher values indicate more drift) - Original user goal (explicitly stated or inferred from first user message): [USER_GOAL] ## INSTRUCTIONS 1. Extract the user's primary goal from the first user message. If [USER_GOAL] is provided, use it as the reference goal. 2. For each sliding window of [WINDOW_SIZE] consecutive assistant turns, compute a drift score from 0.0 (perfectly aligned with original goal) to 1.0 (completely unrelated to original goal). 3. For each window where the drift score exceeds [DRIFT_THRESHOLD], identify the specific turn index where drift began. 4. Classify each drift event into one of these categories: - `tangent_following`: Assistant followed a user-initiated tangent too far - `goal_substitution`: Assistant silently replaced the original goal with a different one - `overcorrection`: Assistant overcorrected after a user clarification, losing the original thread - `context_decay`: Assistant gradually forgot the original goal without any triggering event - `premature_closure`: Assistant treated the goal as resolved when it wasn't 5. For each drift event, provide a brief explanation citing the specific turns and messages that demonstrate the drift. ## OUTPUT SCHEMA Return a JSON object with this exact structure: { "original_goal": "string summarizing the extracted or provided user goal", "total_turns": number, "windows_analyzed": number, "drift_events": [ { "window_start_turn": number, "window_end_turn": number, "drift_score": number, "drift_category": "tangent_following" | "goal_substitution" | "overcorrection" | "context_decay" | "premature_closure", "drift_start_turn": number, "explanation": "string citing specific messages and turn indices", "affected_turns": [number, ...] } ], "session_drift_trend": "stable" | "gradual_drift" | "sudden_drift" | "recovered" | "oscillating", "overall_drift_score": number, "recommendation": "string with actionable guidance for prompt or system improvement" } ## CONSTRAINTS - Do not flag legitimate topic shifts that the user explicitly requested. - Do not penalize the assistant for asking clarifying questions that stay within scope of the original goal. - If the user explicitly abandons the original goal and states a new one, treat the new goal as the reference from that point forward and note the goal change in the output. - If [WINDOW_SIZE] is larger than the total number of assistant turns, analyze the entire conversation as a single window. - Cite specific turn indices and message excerpts in every explanation.
To adapt this template, replace the square-bracket placeholders with your actual data. The [CHAT_LOG] should contain the full conversation with turn indices and speaker labels (User/Assistant). The [WINDOW_SIZE] controls sensitivity—smaller windows (2-3 turns) catch rapid drift, while larger windows (5-7 turns) identify gradual decay patterns. The [DRIFT_THRESHOLD] should be calibrated against your application's tolerance: support chatbots might accept 0.3-0.4 drift before intervention, while medical or legal assistants may require thresholds as low as 0.15. The [USER_GOAL] placeholder can be left empty if you want the model to infer the goal from the first user message, but providing it explicitly improves consistency when running this prompt across many conversations with varying opening styles.
Before deploying this prompt in production, run it against a golden dataset of conversations with known drift points and compare the model's drift scores against human-annotated ground truth. Pay special attention to false positives on legitimate topic shifts and false negatives on subtle goal substitution. If your use case involves high-stakes conversations where missed drift could cause harm, always route drift events above a configurable severity threshold for human review rather than relying solely on automated scoring.
Prompt Variables
Required inputs for the Context Drift Detection Prompt. Each variable must be populated before the prompt is assembled and sent. Missing or malformed inputs are the most common cause of false drift alerts or silent drift misses.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[CHAT_LOG] | Full conversation transcript with turn markers, speaker labels, and timestamps | USER[1] 00:00: I need to reset my MFA device.\nAGENT[1] 00:01: I can help with that. Which method are you using?\nUSER[2] 00:02: Authenticator app.\nAGENT[2] 00:03: Let's start by opening the app... | Must contain at least 4 turns. Each turn must have a speaker label and turn index. Empty or single-turn logs should be rejected before prompt assembly. |
[WINDOW_SIZE] | Number of consecutive turns grouped for drift measurement | 5 | Integer between 3 and 20. Smaller windows increase noise; larger windows delay drift detection. Default 5. Reject values below 3 or above 20. |
[ORIGINAL_GOAL] | The user's stated objective extracted from the first 1-3 turns of the conversation | Resolve MFA device reset for authenticator app user | Must be a single declarative sentence. Null or empty goal should trigger a pre-prompt extraction step before drift scoring. Goal must be derived from user turns only, not assistant interpretation. |
[DRIFT_THRESHOLD] | Score boundary above which a turn window is flagged as drifted | 0.6 | Float between 0.0 and 1.0. Default 0.6. Lower values increase sensitivity and false positives. Higher values risk missing gradual drift. Validate range before prompt assembly. |
[TOPIC_TAXONOMY] | Optional list of expected topic categories to anchor drift classification | ["MFA troubleshooting", "Account recovery", "Device setup", "Billing inquiry"] | Array of strings or null. When provided, drift scores should reference taxonomy alignment. When null, drift is measured purely by semantic distance from [ORIGINAL_GOAL]. Validate as valid JSON array if non-null. |
[OUTPUT_SCHEMA] | Expected JSON structure for the drift report | {"turn_windows": [{"start_turn": int, "end_turn": int, "drift_score": float, "dominant_topic": string, "goal_alignment": float}], "session_drift_trend": string, "critical_drift_windows": [...]} | Must be a valid JSON Schema or example structure. Reject if not parseable as JSON. Schema must include drift_score, goal_alignment, and turn window boundaries at minimum. |
[CONSTRAINTS] | Behavioral rules the model must follow when scoring drift | Do not flag legitimate sub-tasks as drift. Do not penalize clarification turns. Treat user-initiated topic changes as resets, not drift. | String or array of strings. Must be non-empty. Constraints should be tested with adversarial examples where legitimate topic narrowing could be misclassified as drift. |
Implementation Harness Notes
How to wire the Context Drift Detection Prompt into a production monitoring pipeline with validation, thresholding, and alerting.
The Context Drift Detection Prompt is designed to operate as a batch evaluation step within a chat monitoring pipeline, not as a real-time interceptor. After a conversation session closes or reaches a configurable turn threshold (e.g., every 10 turns), the full transcript is passed to the prompt. The primary integration point is an evaluation harness that feeds the transcript and the original user goal into the prompt, parses the structured drift scores, and writes the results to an observability store. This allows product teams to track drift trends over time without adding latency to the user-facing chat loop.
The harness must enforce a strict output schema. Expect a JSON response containing a drift_scores array, where each element maps to a turn window and includes window_start_turn, window_end_turn, drift_score (0.0 to 1.0), and a drift_explanation string. Implement a post-processing validator that checks for schema completeness, score range compliance, and window contiguity. If the model returns malformed JSON or missing windows, retry once with a repair prompt that includes the raw output and the schema. After validation, compare each window's drift_score against a configurable threshold (e.g., 0.7). Windows exceeding the threshold should trigger a drift alert that includes the turn range and explanation, routed to a human review queue or a dashboard for the conversation quality team.
Model choice matters for cost and reliability. This prompt requires strong instruction-following and structured output discipline, making it well-suited for GPT-4o, Claude 3.5 Sonnet, or equivalent models. Avoid smaller models that may struggle with the multi-window analysis and strict JSON format. For high-volume pipelines, batch multiple conversation transcripts into a single request where context windows permit, but ensure each transcript is clearly delimited to prevent cross-session contamination. Log every evaluation result—including raw model output, validation errors, and final scores—to enable traceability and future judge calibration. Do not use this prompt for real-time intervention; its role is offline monitoring and trend detection. The next step is to configure your alerting thresholds based on historical drift patterns and to establish a regular review cadence for flagged conversations.
Expected Output Contract
Defines the required fields, types, and validation rules for the Context Drift Detection Prompt output. Use this contract to parse and validate the model response before downstream consumption.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
drift_analysis | Array of objects | Must be a non-empty array. Each element must correspond to a defined turn window. | |
drift_analysis[].window_id | String | Must match the pattern 'window_[start_turn]_[end_turn]'. Example: 'window_1_5'. | |
drift_analysis[].drift_score | Number (float) | Must be a float between 0.0 and 1.0 inclusive. 0.0 indicates no drift; 1.0 indicates complete topic abandonment. | |
drift_analysis[].primary_topic | String | Must be a non-empty string summarizing the dominant topic in the window. Cannot be null or whitespace. | |
drift_analysis[].drift_type | Enum string | Must be one of: 'sudden_shift', 'gradual_tangent', 'topic_abandonment', 'no_drift'. No other values allowed. | |
drift_analysis[].original_goal_adherence | String | Must be one of: 'maintained', 'weakened', 'lost'. Indicates the relationship to the session's original user goal. | |
session_level_drift_score | Number (float) | Must be a float between 0.0 and 1.0 inclusive. Represents the aggregate drift across all windows. | |
critical_drift_flag | Boolean | Must be true if session_level_drift_score exceeds the configured threshold, otherwise false. Must be consistent with the score. |
Common Failure Modes
Context drift detection fails silently in production. These are the most common failure patterns and how to prevent them before they corrupt your evaluation pipeline.
Drift Score Looks Fine While Conversation Is Broken
Risk: The drift detector reports low drift because the assistant's tangents are semantically adjacent to the original topic, even though the user's goal has been completely abandoned. Cosine similarity between adjacent turns stays high while the cumulative displacement from the original intent is severe. Guardrail: Always compute drift against the original user goal embedding, not just turn-to-turn similarity. Maintain a cumulative drift metric that measures distance from turn-0 intent across the full session.
Threshold Tuning Masks Real Failures
Risk: Teams set drift thresholds too high after seeing noisy alerts, then miss genuine context abandonment. A threshold calibrated on clean test conversations won't catch the slow, subtle drift that happens in real user sessions over 20+ turns. Guardrail: Use percentile-based thresholds from production data, not fixed values. Monitor drift score distributions weekly. Set a lower warning threshold that triggers human spot-check sampling before drift reaches the hard failure boundary.
Legitimate Topic Shifts Flagged as Drift
Risk: Users naturally change topics mid-conversation. The detector treats every topic shift as drift, flooding the review queue with false positives and causing alert fatigue. Teams start ignoring drift alerts entirely. Guardrail: Classify topic shifts as user-initiated vs. assistant-initiated before scoring. Only flag assistant-led tangents as drift. When the user explicitly changes the goal, reset the reference intent embedding and restart drift tracking from that turn.
Embedding Model Mismatch Produces Meaningless Scores
Risk: The embedding model used for drift detection differs from the model used during development, or the embedding model was chosen for general similarity rather than intent-level comparison. Drift scores become noise. Guardrail: Pin the embedding model version in your evaluation config. Validate that your embedding model distinguishes between
Window Size Hides Gradual Drift
Risk: A sliding window that's too wide averages out drift signals. A window of 10 turns might show acceptable similarity even though turns 8-10 have completely diverged from turns 1-3. Guardrail: Use overlapping windows at multiple granularities—narrow windows (3 turns) for early detection and wide windows (full session) for cumulative assessment. Alert when any window crosses threshold, not just the aggregate.
Drift Detector Evaluates Content Without Intent Grounding
Risk: The prompt evaluates whether responses are "on topic" without a clear, machine-readable definition of the original user intent. The LLM judge substitutes its own interpretation of the goal, producing inconsistent drift calls across runs. Guardrail: Extract and store an explicit intent statement from the user's first turn before drift evaluation begins. Pass that intent statement into every drift detection prompt as the ground-truth reference. Never ask the judge to infer the goal from conversation context alone.
Evaluation Rubric
Criteria for testing the Context Drift Detection Prompt before integrating it into a production monitoring pipeline. Each row defines a pass standard, a failure signal, and a concrete test method.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Drift Score Range | Every drift score is a float between 0.0 and 1.0 inclusive. | Output contains non-numeric values, scores outside 0-1 range, or missing score fields. | Parse output JSON and assert all drift scores are numbers with 0.0 <= score <= 1.0. |
Turn Window Alignment | Drift scores are produced for every window of size [WINDOW_SIZE] with step [STEP_SIZE] across the full transcript. | Missing windows, overlapping windows, or windows that extend beyond the transcript length. | Count the number of windows in output and verify it equals floor((total_turns - [WINDOW_SIZE]) / [STEP_SIZE]) + 1. |
Drift Classification Accuracy | Windows with drift score >= [DRIFT_THRESHOLD] are labeled 'drifted' and those below are labeled 'on-track'. | Classification label contradicts the numeric score or labels are missing. | Run 10 hand-labeled transcripts with known drift points. Assert classification matches expected labels with >= 90% accuracy. |
Root Cause Attribution | Each drifted window includes a specific reason from the allowed enum: [DRIFT_REASON_ENUM]. | Generic reasons like 'drift detected', missing reason field, or reasons outside the allowed enum. | Validate reason field is non-null and present in [DRIFT_REASON_ENUM] for every window where classification is 'drifted'. |
Original Goal Preservation | The original user goal extracted from the first [N] turns is correctly identified and referenced in the output. | Original goal is hallucinated, missing, or contradicts the explicit user request in the first turns. | Compare extracted goal against a ground-truth goal label for 20 transcripts. Assert exact match or semantic equivalence >= 95%. |
False Positive Rate on On-Track Conversations | Conversations with no intentional drift produce zero drifted windows. | Stable, on-topic conversations are flagged with one or more drifted windows. | Run 15 hand-verified on-track transcripts through the prompt. Assert drifted window count equals 0 for all. |
False Negative Rate on Drifted Conversations | Conversations with known drift points produce drifted windows at the correct turn indices. | Known drift events are missed entirely or flagged at wrong turn indices. | Run 15 transcripts with injected drift at known turn indices. Assert drift is detected within ±1 window of the expected index. |
Output Schema Compliance | Output is valid JSON matching the [OUTPUT_SCHEMA] with all required fields present. | Malformed JSON, missing required fields, or extra unexpected fields that break downstream parsers. | Validate output against [OUTPUT_SCHEMA] using a JSON schema validator. Assert no validation errors. |
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 drift detection prompt and a small set of annotated chat logs. Use a single LLM call per conversation window without schema enforcement. Focus on getting drift scores that directionally match human judgment.
Simplify the output to a single drift score per window and a one-line justification. Skip threshold configuration—just collect raw scores and review them manually.
Watch for
- The model conflating legitimate topic shifts with problematic drift
- Inconsistent scoring when the same window is evaluated multiple times
- Missing turn-index references in justifications, making results hard to verify

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