Support Ticket Triage and Answer Suggestion

Every support queue does the same three things: understand the message, find who or what should handle it, and โ€” for the recurring questions โ€” answer it from a known-good template. Aito v2 does all three as queries over your ticket history: the incoming text is evidence, the historical resolutions are the training data, and there is no model to deploy between them.

Suggest an answer from resolved history

prompts is the message history; answered questions carry the resolved answer. The reliable way to suggest a reply is retrieval: rank the answered history by relevance to the incoming message with BM25 search, and surface the closest resolved tickets and the answer they were given.

{
  "from": "prompts",
  "search": { "field": "prompt", "text": "refund" },
  "select": ["prompt", "answer", "$highlight"],
  "limit": 3
}
{ "offset": 0, "total": 10, "hits": [
  { "answer": "40", "prompt": "What is the refund processing time?" },
  { "answer": "40", "prompt": "How long does it take to get a refund?" },
  { "answer": "39", "prompt": "Can I get a refund for a returned product?" } ] }

The top matches converge on the same resolved answer (40), so the suggestion is "answer 40" with the supporting tickets attached for the agent to confirm.

Retrieval is the right tool here rather than predict "answer". With dozens of distinct answers and only a few example questions each, direct classification has too little per-answer signal to beat the prior; ranked similarity over the resolved history does not need that per-class density. Use predict for the low-cardinality routing decisions below (type, category, assignee), and retrieval for the open-ended "which known answer".

Classify the message

Route by predicted type or category โ€” plain single-label classification from text:

{
  "from": "prompts",
  "where": { "prompt": { "$match": "the app crashes when I pay" } },
  "predict": "type",
  "select": ["$value", "$p", "$why"],
  "limit": 2
}

$why cites which tokens drove the classification โ€” visible reasoning for the agent who reviews the queue.

Search the history

The same text column is BM25-searchable for agent-assist ("show me similar past tickets"), with full boolean syntax:

{
  "from": "prompts",
  "where": { "prompt": { "$search": "(refund OR return) -subscription" } },
  "select": ["prompt", "type"],
  "limit": 5
}

Why Aito for this

  • Cold-start friendly. Answer suggestions come straight from the resolved history โ€” even a single similar past ticket is retrievable, and every new resolution improves the next suggestion without a retraining cycle.
  • Right tool per job. predict for the low-cardinality routing calls (type, category, assignee) where each class has plenty of examples; ranked search retrieval for the open-ended "which known answer" over a large, thinly-exemplified answer set.
  • Explainable classification โ€” $why on every predict, and $highlight on every retrieval, so the agent sees the tokens behind each suggestion.

Related: Query Reference ยท Inference guide ยท Full-text search

โ† All v2 use cases