An LLM will happily summarize forty alerts into a tidy verdict in seconds. The danger is that the tidy verdict is almost right — the field that flips a true positive into "benign" is exactly the field the model is most likely to gloss over.
Tier: Foundation · Workflow area: AI-assisted SOC & detection
This playbook uses AI to compress a noisy queue, but forces every verdict through a citation gate so an unsupported claim never becomes an escalation decision.
Skip AI when a single alert already carries an obvious, high-confidence kill-chain signature — reading it yourself is faster than reviewing a generated summary.
Export the queue as evidence, not as a prompt. Pull the alerts to a local file with the raw fields intact (rule_name, src_ip, dst_ip, user, process, timestamp, raw_log). The model must cite these fields, so they have to survive the export.
Prompt for ranking plus mandatory citations.
You are triaging a SOC alert queue. Below is a JSON array of alerts from
our SIEM (sample/redacted data). For EACH alert:
- Assign a priority: P1 / P2 / P3 / benign.
- Give a one-sentence rationale.
- Cite the EXACT field name(s) and value(s) from the alert that justify the
priority. If you cannot ground a claim in a field that is present, write
"UNSUPPORTED" instead of guessing.
Do not invent fields. Do not infer values that are not in the data.
Output a table: alert_id | priority | rationale | cited_fields.
<<<ALERTS>>>
Expected output: a table where every rationale points at a field you can re-open in the raw alert. Any row tagged UNSUPPORTED is the model telling you it guessed — those go to the top of your manual pile.
Spot-check the top of the ranking by hand. Open the raw log for every P1 and a random 20% of the rest. Confirm the cited field exists and actually holds the value the model quoted. This is the whole point: you are verifying citations, not re-reading everything.
Feed disagreements back for a second pass. When your read differs from the model's, paste the raw alert back with "You rated this P3 citing process=svchost.exe; the parent process is winword.exe — re-rate." Scoped corrections beat regenerating the queue.
Record the override log. Keep a running note of every place you overrode the AI and why. This log is your evidence that a human made the call, and it is the artifact that trains your own skepticism.
The model ranks and drafts rationales; you verify citations and own every escalation. An ungrounded rationale is a hypothesis, never a verdict.
cited_fields against the actual keys in your export. If it cites mfa_status and no alert contains that key, the whole row is suspect — the model reasoned from a field it imagined.In a managed-SOC or services engagement you usually cannot paste a client's alerts into a public model. Run the entire flow on a local Ollama model inside the approved environment, or on the client's own sanctioned AI endpoint — never a personal account. Before prompting, redact IOCs, internal hostnames, usernames, and any PII down to placeholders (HOST-A, USER-1, 10.x.x.x); the ranking logic works on structure and field names, not on the literal values. Keep the override log inside the case-management system so the verification trail lives with the client's record, not on your laptop.