Three things hide in every busy queue: duplicate tickets that are really one emerging incident, old tickets quietly aging toward embarrassment, and SLA breaches you will discover at the breach. Semantic search plus a ranking prompt surfaces all three in a ten-minute morning sweep.
Tier: Core · Workflow area: Ticket handling & triage · ~30 minutes
This is queue intelligence with tools you already have: a ticket export, a small embeddings script for duplicate detection, and an LLM pass that ranks the day's queue by risk. No ML platform purchase required.
Export the working set. Open tickets plus the last 7 days of closed ones (closed tickets are how you spot "this new ticket is yesterday's incident recurring"). From ServiceNow:
curl -s -u "$SN_USER:$SN_PASS" \
"https://yourinstance.service-now.com/api/now/table/incident?sysparm_query=active=true^ORclosed_atRELATIVEGT@dayofweek@ago@7&sysparm_fields=number,short_description,description,priority,sys_created_on,assignment_group,sla_due&sysparm_limit=500" \
| jq -r '.result' > queue.json
Freshservice: GET /api/v2/tickets?filter=...&per_page=100 paged into the same shape. CSV export from the UI works identically.
Run duplicate detection with local embeddings. A 20-line script, fully offline, no ticket data leaving the machine:
# pip install sentence-transformers pandas
import pandas as pd
from sentence_transformers import SentenceTransformer, util
df = pd.read_json("queue.json")
texts = (df.short_description.fillna("") + ". " + df.description.fillna("").str[:300]).tolist()
model = SentenceTransformer("all-MiniLM-L6-v2")
emb = model.encode(texts, normalize_embeddings=True)
pairs = util.paraphrase_mining_embeddings(emb, top_k=5)
for score, i, j in pairs:
if score >= 0.80:
print(f"{score:.2f} {df.number[i]} <-> {df.number[j]}")
print(f" {df.short_description[i][:70]}")
print(f" {df.short_description[j][:70]}\n")
Read the pairs, not just the scores: 0.85 between "VPN disconnects hourly" and "GlobalProtect drops every hour" is a duplicate; 0.85 between two different users' "laptop slow" tickets may be a cluster — or Monday.
Spot the emerging incident. Three-plus mutually similar tickets created within a short window is the signature. Add a time filter to the pair output, or just eyeball creation times on the clusters the script prints. When you find one: open a parent incident, link the children, and tell the desk before the tenth duplicate arrives.
Rank the queue by risk with an LLM pass. Feed the export (subjects, priority, age, SLA due, last-update timestamp — no full descriptions needed) to your assistant:
Here is my open ticket queue as CSV. Produce the morning risk list.
Rank by a combination of:
- SLA due within 8 business hours (highest weight)
- No agent update in > 2 business days ("aging silently")
- Priority P1/P2
- Reopened tickets (a reopen aging again is a complaint in progress)
Output: top 10 as a table — number | risk driver | recommended action today.
Then one line: any pattern you notice across the queue as a whole.
Do not invent tickets or fields not present in the data.
CSV:
[paste]
Sanity-check the ranking against the source of truth. Spot-check three of the top ten in the ITSM tool: is the SLA clock really where the export said? Exports lag and business-hour SLA math is subtle — the tool's SLA widget is authoritative, the LLM ranking is a lens. A good verified output for the sweep looks like:
1. INC0048201 | SLA breach in 3h, P2, no update 26h | assign now — owner OOO
2. INC0048166 | reopened, aging 4 days | call user, not email
3. CLUSTER (5 tickets, floor 3, created 08:12–08:44) | open parent incident
Pattern: 40% of aging tickets sit with one assignment group — check staffing.
Make it a rhythm. Same sweep, same time, every workday. The value compounds: yesterday's clusters and today's clusters connect, and the "pattern" line starts catching slow burns (a printer model failing across sites over weeks) that no single day reveals.
The embeddings step is deliberately local — ticket descriptions are one of the most personal-data-dense corpora in the company, and duplicate detection does not need them to leave your machine.
The cluster alarm is worth the whole recipe: institutionalize the rule "three similar tickets in an hour = tell the desk lead now", and this sweep becomes your cheapest early-warning system for major incidents.