AI Chatbots for Customer Service: Production Lessons from 90 Days

edsdev · Tech · 2026 · source Agentic: no · promotional bias: low · source-backed · extracted with prompt 0.5.2 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Customer-service chatbots

EdsDev found that demo-quality support bots degrade in production unless retrieval, escalation, scope, and review loops are operated carefully.

Constraints:

Architecture

The production customer-service bot architecture is deliberately ordinary: scoped RAG, semantically chunked knowledge, source URLs, a reranker before generation, conversation-history limits, real support tools, explicit human escalation, and weekly human review of failed conversations. The source argues that model choice matters less than retrieval quality, escalation quality, logs, and operational ownership over the first 60-90 production days.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  support-chat-interface["support chat interface"]
  vector-search["vector search"]
  semantic-chunks["semantic chunks"]
  reranker["reranker"]
  llm-answer-generator["LLM answer generator"]
  escalation-tool["escalation tool"]
  human-agent["human agent"]
  weekly-review-loop["weekly review loop"]
  support-chat-interface --> vector-search
  vector-search --> semantic-chunks
  vector-search --> reranker
  reranker --> llm-answer-generator
  llm-answer-generator --> support-chat-interface
  llm-answer-generator --> escalation-tool
  escalation-tool --> human-agent
  weekly-review-loop --> semantic-chunks
  weekly-review-loop --> support-chat-interface
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
support chat interface Customer-facing chat entry point for scoped support questions. vector search, LLM answer generator, escalation tool
vector search Retrieves top candidate documentation chunks for the customer query. support chat interface, semantic chunks, reranker
semantic chunks Knowledge-base chunks split by product/policy section and source URL rather than raw token counts. vector search, weekly review loop
reranker Cohere rerank pass that narrows retrieved chunks before generation. vector search, LLM answer generator
LLM answer generator Claude/GPT-style model that answers with retrieved context, recent conversation history, and tools. reranker, escalation tool, support chat interface
escalation tool Human handoff path with context, used for roughly one in five conversations in shipped bots. LLM answer generator, human agent
human agent Support staff receiving escalations with context handoff. escalation tool
weekly review loop Human review of failed/random conversations used to fix chunks, policies, links, and scope. semantic chunks, support chat interface

Data flow

A customer message enters the support chat, vector search retrieves candidate chunks, a reranker narrows them, and the LLM generates an answer from the support prompt, reranked context, recent history, and tools. If the bot lacks sufficient context or the situation requires a person, the escalation tool hands off to a human agent with context. Weekly review of failures feeds back into chunking, policies, and scope.

4 supporting quotes
“const chunks = await vectorSearch(query, { topK: 20 }); const reranked = await rerank(query, chunks, { topK: 5 });”article, stated
“A small reranker pass before the final generation. We’ve used Cohere’s rerank-3 for this. It’s cheap and it noticeably reduces “close but wrong” answers.”article, stated
“const answer = await generate({ system: SUPPORT_SYSTEM_PROMPT, context: reranked, history: conversation.slice(-6), tools: [lookupOrder, escalateToHuman, scheduleCallback] });”article, stated
“That escalateToHuman tool is not decoration. It gets called on roughly 1 in 5 conversations in the bots we’ve shipped”article, stated

Why this architecture

The design optimizes for production support reliability rather than demo impressiveness. The author reports that failures usually came from missing/bad retrieval context, policy contradictions, or weak escalation rather than the base model, so the architecture emphasizes chunk quality, reranking, scope discipline, escalation, monitoring, and weekly human review.

4 supporting quotes
“Retrieval quality matters more than model choice. Bad chunks beat a good model every time.”article, stated
“The model choice was almost a tiebreaker. We ran the same support bot on Claude 3.5 Sonnet and GPT-4o for a month on parallel traffic.”article, stated
“The conversations where the bot failed were failing for the same reason on both models: it didn’t have the right context, or the right context was buried in a 40-page PDF that got chunked badly.”article, stated
“Do you have someone who will own the retrieval layer and look at logs every week? If yes, build. If no, buy something with a managed knowledge base and a human in the dashboard”article, stated

Models used: Claude 3.5 Sonnet · GPT-4o · Cohere rerank-3

Scale

Alternatives considered (roads not taken)

Optimize only for deflection rate

Rejected because: The author says deflection alone can reward ignoring customers; they track resolution, escalation, response time, CSAT, and sampled human reads instead.

“We used to track deflection rate alone. Bad idea. A bot that confidently says “I can’t help with that, goodbye” has a 100% deflection rate and a 0% satisfaction rate.”article, stated

Choose model first and trust evals

Rejected because: Production failures came from retrieval/context problems and needed a 60-90 day improvement curve.

“The first two weeks are easy: connect docs, run evals, ship. The next eight are where you find the gaps.”article, implied

Build custom support AI without operational ownership

Rejected because: The build/buy decision hinges on owning retrieval and log review every week.

“Do you have someone who will own the retrieval layer and look at logs every week? If yes, build. If no, buy something with a managed knowledge base and a human in the dashboard”article, stated

Patterns

rag-retrieval (support)

The primary quality driver was retrieval and chunking, not model choice.

“* ↳The bot that works is boring: tight scope, real escalation, logs you actually read every Monday. * ↳Retrieval quality matters more than model choice.”article, stated

human-in-the-loop-gate (support)

A real escalation tool with context handoff is treated as core product behavior.

“PT, context: reranked, history: conversation.slice(-6), tools: [lookupOrder, escalateToHuman, scheduleCallback]”article, stated

Tradeoffs

Build versus buy support AI.

Chose build only when someone owns retrieval and logs over build for everyone by default.

Rationale: Without an owner for retrieval operations, a managed product may be safer.

“Do you have someone who will own the retrieval layer and look at logs every week? If yes, build.”article, stated

Gotchas (what bit them)

Pre-launch evals overstate production bot accuracy.

Root cause: Real conversations expose missing context, bad chunks, and stale support paths.

Resolution: Plan for weekly log review, retrieval fixes, and scope discipline after launch.

“What we found around day 20-30 across three deployments: the bot’s accuracy on real conversations is roughly 40-50% of its accuracy on the eval set you built before launch.”article, stated

Many apparent hallucinations were actually retrieval failures.

Root cause: The model answered from bad or missing chunks, so model swaps did not fix the underlying product problem.

Resolution: Own the retrieval layer, chunking, reranking, and weekly failed-conversation review.

“The boring truth: most “the AI hallucinated” complaints we investigated were retrieval failures, not generation failures.”article, stated

Evaluation

EdsDev measured deflection with CSAT and reviewed failed conversations weekly.

Metrics: 60% ticket handling · 30-40% to 60%+ resolution · 1 in 5 escalations

“Some are quietly handling 60% of tickets.”article, stated

Outcomes

Operational lessons post; marked non-agentic because this is primarily scoped RAG chatbot support.

“One we turned off after six weeks.”article, stated