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.
- 01ingestProduct catalog and documentation are pulled in and chunked for retrieval
- 02embedChunks are embedded and stored so the model can find the right passage
- 03retrieveEach question retrieves the relevant catalog and policy context first
- 04reasonA self-hosted model reasons over the retrieved context, not its training data
- 05actTool calls hit live systems for stock, order status and shipping math
- 06verifyPrices and quotes are computed from real data, then checked before sending
- 07escalateAnything outside policy or confidence is handed to a human with context
- 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