AI · SupportIn productionNDA

A support agent that could read the catalog and touch real orders.

The client sold technical products with a large, messy catalog. Support answered the same questions all day: is this in stock, what does it cost to ship, where is my order, can I get a quote for twelve of these.

Category
AI · Customer support
Result
−72% median ticket time
Runtime
Self-hosted · Ollama
Status
In production

The problem

The same four questions, all day.

The support inbox was dominated by a handful of repeated questions — stock, shipping cost, order status, and bulk quotes — each of which required someone to look something up in a different system.

Off-the-shelf chatbots could not answer them, because the answers lived in the product catalog and the order database, not in a set of canned FAQ responses.

Agents spent their day copying data between tabs instead of handling the genuinely hard cases that actually needed a human.

The hard parts

Why it was not a chatbot job.

  • The catalog was large, inconsistent and full of technical attributes that had to be retrieved accurately
  • Answers about orders and stock had to be live, not trained into the model months ago
  • Quoting required real arithmetic over real prices, not a plausible-sounding guess
  • Customer data could not be sent to a third-party API, so the model had to be self-hosted
  • A wrong but confident answer about stock or price was worse than no answer at all

Architecture

Retrieval, then constrained action.

  1. 01ingestProduct catalog and documentation are pulled in and chunked for retrieval
  2. 02embedChunks are embedded and stored so the model can find the right passage
  3. 03retrieveEach question retrieves the relevant catalog and policy context first
  4. 04reasonA self-hosted model reasons over the retrieved context, not its training data
  5. 05actTool calls hit live systems for stock, order status and shipping math
  6. 06verifyPrices and quotes are computed from real data, then checked before sending
  7. 07escalateAnything outside policy or confidence is handed to a human with context
  8. 08logEvery exchange is logged for review, correction and future improvement

Stack

  • Laravel
  • Python
  • Ollama
  • DeepSeek
  • Whisper
  • RAG
  • Embeddings
  • MongoDB
  • n8n

What shipped

What the system does.

  • Answers product questions from the actual catalog, with sources it can point to
  • Checks live stock and order status through tool calls, not stale data
  • Drafts quotations with real prices and shipping math a human can approve
  • Takes spoken questions through a Whisper voice layer and answers them
  • Escalates cleanly to a human with the full conversation and context attached
  • Runs entirely self-hosted, so no customer data leaves the client's infrastructure
  • Logs every interaction so the team can review and improve answers over time

Result

−72%

Median ticket resolution time

Support stopped being the bottleneck.

Median ticket resolution time fell by 72%, because the repetitive lookups that used to eat the day are now handled the moment a customer asks.

Agents were freed to work the genuinely difficult cases, and the quality of those answers went up because nobody was drowning in routine ones.

Because everything runs self-hosted and every exchange is logged, the client keeps full control of both their data and the system's behaviour.

Next step

What does your support team answer every single day?