Building Enterprise AI Customer Support
A full walkthrough of a multi-agent customer support system — architecture, data layer, RAG, orchestration and testing — built end to end for a fictional UK rail operator. It's a build project, not a client deployment: the domain is synthetic, so there are no real customers and no measured savings behind any of it.
- Part 1
I built a customer support agent as a team, not one bot
One coordinator, two specialists, and why I didn't build it as one big agent. The architecture the rest of the series sits on.
- Part 2
The data layer: a database and a vector store
The data layer: a relational database for bookings and customers, and a vector store for the policies customers never phrase the way they're written.
- Part 3
The Policy Agent: RAG that answers from real documents
The Policy Agent — RAG that answers refund and fare questions grounded in the company's real documents, with a citation, not the model's memory.
- Part 4
The Ticket Agent: books, changes and refunds
The Ticket Agent — the one that actually changes things. Search, book, modify, cancel, refund, built from tools instead of free-form SQL.
- Part 5
The Master Agent: routing and context
The Master Agent — the piece that decides which specialist handles a message, holds context across hand-offs, and synthesises one clean reply.
- Part 6
Location intelligence: 'the London train' into a station
Customers say 'the London train', not a station code. Resolving the places people actually type into the stations the system knows.
- Part 7
Testing an LLM system you can't unit-test
You can't unit-test an LLM by matching strings. Ordinary tests for the deterministic tools, 15 end-to-end scenarios, and an LLM-as-a-judge for the rest.
- Part 8
The honest part: it's a project, not a case study
UKConnect is fictional, so there's no real ROI — and I'm not inventing one. What I can actually stand behind, what I won't claim, and how you'd find the real number yourself.
ADK vs LangGraph: the same system, two frameworks
The whole system rebuilt on LangGraph, compared with the ADK original — routing, retrieval, state and how to choose, with both architectures diagrammed.