skip to content
projects

ai ticket triage

08.2026

A LangGraph agent that drafts a reply to every support ticket and decides who sees it.

The AI Ticket Triage review screen: a drafted reply beside the resolved tickets it was grounded in
The review lane: a drafted reply beside the resolved cases it cited.

An agent that drafts a reply to each support ticket and decides who sees it: classify the ticket, retrieve similar resolved cases, draft an answer, score that answer, then route it to auto-send, human review or escalation. Every draft is grounded in a case that already worked, and a ticket with no relevant precedent escalates instead of getting an invented answer.

architecture

A LangGraph pipeline that classifies an incoming ticket, retrieves similar resolved cases, drafts an answer, scores it, then routes it to auto-send, human review or escalation. Failures are recorded as state rather than thrown, so a ticket that cannot be classified stops early instead of paying for a draft nobody will use. Retrieval runs semantic and keyword search together over 3,400 previously resolved tickets, and a second model from a different vendor checks each draft against the cases it cited before anything is sent.

how i built it

  • Modelled every failure as state on the graph rather than an exception, so a ticket that cannot be classified exits before it costs a draft.
  • Ran vector and keyword search together over 3,400 resolved tickets, so each draft follows a case that already worked.
  • Made an empty retrieval an escalation path rather than a licence to invent an answer.
  • Put a second model from a different vendor in front of send, checking each draft against the cases it cited.
  • Hand-labelled the 60-ticket test set with 27% non-English and 5 deliberately adversarial tickets, rather than measuring on the easy ones.

results

  • 95% intent accuracy and 100% language accuracy across the 60 hand-labelled tickets, at 0.05 rupees per ticket.
  • The vendor-independent checker caught 3 fabricated claims during development.
  • Replaying all 60 recorded routes showed the checker on its own scored better than the shipped three-signal blend. That result is published on the repo rather than buried.
  • 120 tests, with strict typing and linting in CI.
The triage queues: tickets split across auto-send, human review and escalation
Tickets split across the three routes the agent can choose.

stack

langgraphagentic aifastapipydantic v2pgvectorhybrid searchllm-as-judgelangfusereactgcp cloud run