This prompt is designed for NOC and SRE teams drowning in monitoring alerts where manual triage is no longer sustainable. The core job-to-be-done is reducing alert fatigue by automatically classifying incoming alerts into severity levels (P0-Critical through P4-Informational) using few-shot examples that encode your incident response policy. You should use this prompt when your alert volume exceeds what on-call engineers can reasonably triage, when alert descriptions vary in format across monitoring tools (Datadog, PagerDuty, Grafana, CloudWatch), and when you need consistent severity decisions that downstream automation—like paging, ticket creation, or suppression rules—can consume programmatically. The few-shot approach adapts faster to new alert patterns than brittle rule chains, and it handles the natural language variation that regex-based classifiers miss.
Prompt
On-Call Alert Severity Classification Prompt Template

When to Use This Prompt
Determine if example-based severity classification is the right fit for your on-call alert triage workflow.
The ideal user has access to a historical corpus of labeled alerts that reflect real severity decisions made by experienced on-call engineers. You need at least 10–20 representative examples per severity level, including edge cases where the severity is ambiguous. Required context includes your organization's severity definitions (what constitutes a P0 outage versus a P3 degradation), any suppression rules for known noisy alerts, and escalation criteria that trigger human review. The prompt expects structured input containing the alert title, description, affected service, and any available metadata like metric values or error counts. It produces a structured JSON output with the severity level, confidence score, and a brief justification that can be logged for auditability.
Do not use this prompt for real-time closed-loop remediation—it classifies alerts but does not act on them, execute runbooks, or restart services. It is also not a replacement for your alerting rules engine; use it to triage alerts that have already fired, not to decide whether an alert should fire in the first place. For high-stakes environments where a misclassification could delay response to a customer-impacting outage, always pair this prompt with a human review escalation path for low-confidence classifications (below 0.85 confidence) and for any P0 determination. The prompt works best as one component in a pipeline: classify, then route high-severity alerts to on-call engineers and suppress or batch low-severity alerts for later review. Before deploying, validate against a golden test set of at least 50 alerts with known severity labels, and monitor for severity drift as your services and failure modes evolve.
Use Case Fit
Where this prompt works and where it does not. Understand the operational boundaries before deploying an example-based alert classifier into production on-call workflows.
Good Fit: Structured Alert Payloads
Use when: Your monitoring system emits structured alerts with consistent fields like alert_name, service, and metrics. The prompt excels at classifying these into P0-P4 severity using few-shot examples that teach the difference between a full outage and a transient CPU spike. Guardrail: Validate that your alert schema hasn't drifted before feeding it to the classifier.
Bad Fit: Raw, Unstructured Logs
Avoid when: You're piping raw log streams or stack traces directly into the prompt without pre-processing. The model will struggle to separate signal from noise, leading to inconsistent severity scores. Guardrail: Use a log parser or extraction step to normalize the input into a structured alert object before classification.
Required Input: A Curated Example Set
Risk: Without a high-quality set of 5-10 labeled examples covering each severity tier, the model defaults to generic, often incorrect, severity assignments. Guardrail: Maintain a version-controlled example bank that includes edge cases like flapping alerts and maintenance windows. Test the prompt against this bank before any production change.
Operational Risk: Alert Fatigue Amplification
Risk: A poorly tuned classifier that over-classifies alerts as P0 or P1 will amplify alert fatigue, causing on-call engineers to ignore critical pages. Guardrail: Implement a suppression rule that caps the rate of high-severity classifications from the AI. Route a sample of AI-classified alerts for human review to measure precision drift.
Operational Risk: Silent Suppression of Real Outages
Risk: An overly aggressive suppression rule or a classifier biased toward P3/P4 can silently downgrade a real outage, delaying the response. Guardrail: Always pair the AI classifier with a deterministic, threshold-based rule for known critical metrics (e.g., error_rate > 10%). The deterministic rule acts as a safety net that bypasses the AI classification.
Copy-Ready Prompt Template
A production-ready prompt for classifying monitoring alerts by severity, with suppression rules and structured JSON output.
This prompt template is designed to be dropped directly into an AI gateway or model call. It uses few-shot examples to teach the model the difference between a critical outage (SEV0) and non-actionable noise (SEV3), and it enforces suppression rules for known maintenance windows. The template expects you to provide the raw alert payload, a set of labeled examples, and the current maintenance schedule. The model's only job is to return a single, valid JSON object that matches the output schema—no conversational preamble, no markdown fences.
textSystem: You are an on-call alert classifier for a production engineering team. Your task is to classify the provided monitoring alert into a severity level: SEV0, SEV1, SEV2, or SEV3. Use the provided examples to distinguish critical outages from noise. Apply suppression rules when the alert matches a known maintenance window or a non-actionable pattern. Return only a valid JSON object matching the output schema. Do not include any other text. [EXAMPLES] [SUPPRESSION_RULES] User: Classify the following alert: [ALERT_PAYLOAD] Assistant:
To adapt this template, replace the square-bracket placeholders with your actual data. [EXAMPLES] should contain 3-6 few-shot demonstrations of alerts and their correct severity classifications, formatted as clear input-output pairs. [SUPPRESSION_RULES] should list active maintenance windows and known non-actionable alert fingerprints (e.g., specific hostnames or error messages that are safe to ignore). [ALERT_PAYLOAD] is the raw JSON or text of the incoming alert. The [OUTPUT_SCHEMA] is implied by the examples, but for production use, you should validate the model's JSON output against a strict schema (e.g., {"severity": "string", "reasoning": "string", "suppressed": "boolean"}) in your application code before taking any action. If the output fails validation, retry once with the error message appended to the prompt. If it fails again, escalate to a human on-call engineer.
Prompt Variables
Inputs required for the On-Call Alert Severity Classification prompt. Each placeholder must be populated before the prompt is sent. Validation notes describe how to programmatically verify the input before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[ALERT_PAYLOAD] | The raw monitoring alert JSON or text body from the observability tool | {"alert_id": "cpu-001", "service": "payment-api", "metric": "cpu_usage", "value": 98, "threshold": 80, "labels": {"env": "prod", "region": "us-east-1"}} | Parse check: must be valid JSON or non-empty string. Reject null or empty payloads. If JSON, confirm required fields exist: alert_id, service, metric, value, threshold. |
[SEVERITY_EXAMPLES] | Few-shot examples demonstrating each severity level with clear rationale | SEV0: 'Payment API returning 500 errors for all requests, revenue impact active' | SEV1: 'Payment API latency >5s for 30% of requests, customer checkout degraded' | SEV2: 'Payment API CPU >90% on 2 of 5 nodes, no customer impact yet' | SEV3: 'Payment API memory usage trending up, within limits, informational' | Count check: at least one example per severity level (SEV0-SEV3). Format check: each example must include severity label and justification. Drift check: compare example distribution to last 30 days of production alerts quarterly. |
[SUPPRESSION_RULES] | Rules for when alerts should be suppressed or downgraded despite metric thresholds | Suppress if: alert is duplicate within 15 minutes, service is in maintenance window, alert is from decommissioned host. Downgrade if: metric recovered within 2 minutes, alert is from staging environment. | Parse check: rules must be structured as suppress/downgrade conditions. Null allowed if no suppression rules exist. Conflict check: ensure no rule contradicts another. Test against last 100 suppressed alerts for false negatives. |
[ESCALATION_POLICY] | Team routing and urgency rules that determine who gets paged at each severity | SEV0: page on-call SRE immediately, notify incident commander. SEV1: page on-call SRE, no incident commander. SEV2: create ticket in SRE queue, no page. SEV3: log only, weekly review. | Schema check: must map each severity level to an action. Required fields per level: notification_method, target_team, response_time_sla. Validate against PagerDuty or Opsgenie escalation policy export weekly. |
[SERVICE_CATALOG] | Known services with their criticality tier and owning team context | payment-api: tier-0, team: payments-sre, revenue-impacting: true. user-auth: tier-0, team: identity-sre, revenue-impacting: true. admin-dashboard: tier-2, team: internal-tools, revenue-impacting: false. | Schema check: each service entry must have name, tier, team, and revenue-impacting flag. Freshness check: catalog must be updated within 24 hours of service changes. Null not allowed; unknown services should trigger human review. |
[MAINTENANCE_WINDOWS] | Scheduled maintenance periods where alerts should be suppressed or reclassified | [{"service": "payment-api", "start": "2025-01-15T02:00:00Z", "end": "2025-01-15T04:00:00Z", "ticket": "CHG-1234"}] | Schema check: each window must have service, start, end, and change ticket ID. Time check: start must be before end. Null allowed if no active windows. Validate against change management system on each prompt execution. |
[HISTORICAL_PATTERNS] | Recent alert history for the affected service to detect flapping or chronic issues | payment-api: 12 alerts in last 24h, 8 self-resolved within 5min, 2 escalated to SEV1, 0 SEV0. Flapping score: 0.67. | Schema check: must include alert_count_24h, self_resolved_count, escalation_distribution, flapping_score. Null allowed for services with no history. Staleness check: data must be from last 24 hours. Source: query alerting database at prompt assembly time. |
[BUSINESS_HOURS_CONTEXT] | Whether the alert fired during business hours and any customer-impact modifiers | is_business_hours: false, current_time: 03:15 UTC, active_regions: [us-east-1, eu-west-1], peak_traffic: false, known_event: null | Schema check: must include is_business_hours boolean, current_time, and active_regions array. Null not allowed. Timezone check: confirm timezone offset matches service region. Event check: cross-reference with marketing or launch calendar for known traffic events. |
Implementation Harness Notes
How to wire the On-Call Alert Severity Classification prompt into a production incident management pipeline.
Integrating this prompt into an operational harness requires treating it as a deterministic classification step within a broader incident management workflow, not as a standalone chatbot. The prompt should be called by a service that receives raw alerts from monitoring systems like PagerDuty, Datadog, or Prometheus Alertmanager. Before the prompt is invoked, the harness must pre-process the alert payload to extract and normalize the fields required by the prompt's [ALERT_PAYLOAD] placeholder, such as alert_name, service, metrics, thresholds, and runbook_url. This ensures the model receives a clean, structured input regardless of the source monitoring tool's format.
The application layer must enforce a strict contract around the model's output. Configure your API call to request a JSON object matching the [OUTPUT_SCHEMA] defined in the prompt, using structured output features like OpenAI's response_format with a JSON schema or function calling with tool_choice: "required". After receiving the response, a validation layer must confirm the presence and type of critical fields: severity (must be one of CRITICAL, WARNING, NOISE), confidence (a float between 0.0 and 1.0), and rationale (a non-empty string). If validation fails, implement a retry loop with a maximum of two attempts, feeding the validation error message back into the model's context as a [CORRECTION] instruction. For any CRITICAL classification, the harness should bypass standard routing and immediately trigger the escalation policy via the incident management API, logging the full prompt, response, and validation result for post-incident review.
To prevent alert fatigue and ensure consistent behavior, you must build an evaluation harness that runs offline against a golden dataset of historical alerts. This dataset should contain 100-200 labeled examples covering clear CRITICAL outages, ambiguous WARNING states, and known NOISE patterns like transient CPU spikes. Use an LLM-as-judge or a simple script to compare the model's classification against the ground truth, measuring precision and recall for each severity class. Pay special attention to false negatives for CRITICAL alerts, as these represent missed outages. Run this evaluation suite before deploying any prompt changes and integrate it into your CI/CD pipeline as a release gate. Finally, log every classification to an observability platform, attaching the alert_id, model_version, prompt_version, and confidence score, so you can track drift in model behavior and identify new alert patterns that require updating the few-shot examples.
Expected Output Contract
Defines the exact JSON schema, field types, required elements, and validation rules for the alert severity classification output. Use this contract to build a parser that rejects malformed responses before they reach downstream routing or paging systems.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
severity | enum: P0 | P1 | P2 | P3 | SUPPRESSED | Must match exactly one of the five enum values. Reject any response containing a severity outside this set. | |
confidence | number (0.0 - 1.0) | Must be a float between 0.0 and 1.0 inclusive. If confidence < 0.7 and severity is P0 or P1, route to human review regardless of classification. | |
rationale | string | Must be non-empty and contain at least one explicit reference to a signal from the alert payload. Reject if rationale is generic or repeats the severity label without evidence. | |
suppression_reason | string | null | Required if severity is SUPPRESSED. Must cite a specific suppression rule from the provided rule list. If severity is not SUPPRESSED, this field must be null. | |
escalation_recommended | boolean | Must be true if severity is P0 or P1 and confidence >= 0.7. Must be false if severity is SUPPRESSED. For P2 or P3, value is contextual but must be explicitly set. | |
matched_example_id | string | null | If the classification was guided by a specific few-shot example, reference its ID. If no single example matched, set to null. Validate that the ID exists in the provided example set. | |
alert_fingerprint | string | Must match the alert_id or deduplication key from the input payload exactly. Reject if fingerprint does not correspond to the input alert being classified. | |
processing_timestamp | ISO 8601 UTC string | Must be a valid ISO 8601 datetime string in UTC. Reject if timestamp is in the future or unparseable. Used for latency tracking and SLA measurement. |
Common Failure Modes
What breaks first when classifying on-call alert severity and how to prevent alert fatigue, misclassification, and production blind spots.
Severity Inflation Under Pressure
What to watch: During major incidents, the model mirrors the panic in alert text and upgrades P2/P3 alerts to P0/P1, overwhelming responders. Guardrail: Anchor severity definitions with concrete examples of each level, include a 'downgrade justification' field in the output schema, and enforce a maximum P0/P1 count per time window.
Suppression Rule Bypass
What to watch: The model ignores suppression rules when alerts contain emotionally charged language like 'critical,' 'down,' or 'all users affected,' even when the underlying metric is within normal bounds. Guardrail: Require the model to extract and cite the specific metric value before assigning severity, and add a validation step that cross-checks assigned severity against suppression rule conditions.
Example Drift from Infrastructure Changes
What to watch: Few-shot examples become stale after service migrations, new monitoring tools, or team reorganizations, causing misclassification of alerts from new systems. Guardrail: Tag examples with source system and last-validated date, run weekly eval checks against recent production alerts, and trigger example refresh when classification confidence drops below threshold.
Ambiguous Alert Text Misclassification
What to watch: Alerts with vague descriptions like 'service slow' or 'errors increasing' get classified inconsistently because the model guesses severity without enough signal. Guardrail: Add a 'needs_investigation' severity tier for ambiguous alerts, require the model to flag missing context fields, and route these to a human triage queue rather than forcing a hard classification.
Escalation Criteria Conflict
What to watch: Alerts that match both P1 and P2 criteria get classified arbitrarily based on which example appears first in the prompt, causing inconsistent on-call response. Guardrail: Define explicit tie-breaking rules in the prompt (e.g., 'when criteria conflict, default to the higher severity and flag for review'), and test with synthetic alerts that deliberately trigger overlapping criteria.
Alert Fatigue from Over-Classification
What to watch: The model classifies too many alerts as actionable because it lacks confidence thresholds, flooding on-call engineers with low-priority noise. Guardrail: Require a confidence score with every classification, suppress alerts below a configurable threshold, and track the ratio of suppressed-to-escalated alerts as a production metric.
Evaluation Rubric
Use this rubric to test the On-Call Alert Severity Classification Prompt before shipping. Each criterion targets a specific failure mode that causes alert fatigue or missed escalations.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Severity classification accuracy | Correctly classifies P0, P1, P2, P3 for 10 golden alerts | P0 alert classified as P2 or lower; P3 noise classified as P1 or higher | Run prompt against 10 hand-labeled alerts spanning all severities; require 90% exact match |
Suppression rule adherence | Suppresses alerts matching [SUPPRESSION_RULES] with reason cited | Alert matching a suppression rule is escalated; no suppression reason provided | Inject 5 alerts that match defined suppression rules; verify all are suppressed with reason field populated |
Escalation criteria application | Applies [ESCALATION_CRITERIA] correctly when conditions are met | Escalation triggered without meeting criteria; criteria met but no escalation flag | Test 5 alerts with escalation conditions present and 5 without; verify flag accuracy |
Evidence grounding in alert payload | Every severity decision cites specific fields from [ALERT_PAYLOAD] | Severity assigned without citing payload evidence; hallucinated fields cited | Parse output for evidence citations; verify each citation maps to a real field in the input payload |
Confidence scoring calibration | Confidence score reflects classification ambiguity; low confidence triggers human-review flag | High confidence on ambiguous alerts; low confidence on clear-cut alerts | Test 5 ambiguous edge-case alerts; verify confidence < 0.8 and human_review flag is true |
Output schema compliance | Output matches [OUTPUT_SCHEMA] exactly with all required fields present | Missing required fields; extra fields not in schema; wrong types | Validate output against JSON schema; reject any output that fails structural validation |
Alert fatigue reduction signal | P3 and suppressed alerts include runbook link or auto-close recommendation | P3 alert generates same urgency language as P0; no differentiation in response guidance | Check that P3 outputs contain runbook_link or auto_close_recommendation field with non-null value |
Multi-alert correlation handling | When [RELATED_ALERTS] provided, output references correlation in severity decision | Related alerts ignored; severity assigned in isolation despite correlation context | Provide 3 alert groups with related alert context; verify output mentions correlation in evidence field |
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 3–5 severity-labeled examples. Use a simple output schema with severity and rationale fields. Skip suppression rules and escalation criteria initially. Test against 20–30 historical alerts to calibrate example quality.
codeClassify the alert below as SEV0, SEV1, SEV2, or SEV3. Examples: [EXAMPLE_1] [EXAMPLE_2] [EXAMPLE_3] Alert: [ALERT_PAYLOAD]
Watch for
- Over-classifying noise as SEV1 when examples are skewed toward high severity
- Missing schema validation causing downstream parse failures
- Examples that don't cover the alert sources in your environment

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