Building an AI-Powered Help Desk with RAG and Model Evaluation
vimeo · Media & Entertainment · 2023 · source Agentic: no · promotional bias: low · source-backed · extracted with prompt 0.5.4 (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 support self-service
Vimeo wanted to prototype a generative AI help desk that could answer customer questions from existing Help Center content more directly than search, ticket submission, or an intent-based chatbot.
Constraints:
- The source corpus was Zendesk Help Center articles.
- The prototype needed to cite and retrieve relevant sections rather than rely on stale model memory.
- Model choice had to balance response quality, latency, cost, authentication, and provider redundancy.
- Quality assurance is difficult because support questions and generated responses vary widely.
Architecture
Vimeo scraped Zendesk Help Center articles, parsed and chunked the content, embedded the chunks, and indexed them in an HNSWLib vector store with metadata. A LangChain ConversationalRetrievalQAChain rewrites conversation context into a standalone question, embeds it, retrieves similar chunks, and sends those chunks to an LLM. Vimeo tested Google Vertex AI Chat Bison, OpenAI GPT-3.5, GPT-4, and Azure OpenAI before choosing Chat Bison for concise answers and GCP authentication.
Diagram confidence: explicit (topology described by the source).
flowchart LR zendesk-help-center[Zendesk Help Center] --> ingestion-pipeline[Ingestion Pipeline] ingestion-pipeline --> vector-store[Vector Store] documentation-webhook[Documentation Webhook] --> vector-store[Vector Store] help-desk-chat-ui[Help Desk Chat UI] --> retrieval-chain[Retrieval Chain] retrieval-chain --> vector-store[Vector Store] retrieval-chain --> llm-provider[LLM Provider] llm-provider --> retrieval-chain[Retrieval Chain]
Components
| Component | Role | Interacts with |
|---|---|---|
Zendesk Help Center |
Public support-article source corpus. | Ingestion Pipeline |
Ingestion Pipeline |
Scrapes, parses, chunks, embeds, and indexes help articles with metadata. | Zendesk Help Center, Vector Store |
Vector Store |
HNSWLib-backed embedding index for relevant article chunks. | Ingestion Pipeline, Retrieval Chain |
Help Desk Chat UI |
Customer-facing prototype surface for support questions. | Retrieval Chain |
Retrieval Chain |
LangChain conversational retrieval logic that rewrites questions, retrieves chunks, and calls the LLM. | Help Desk Chat UI, Vector Store, LLM Provider |
LLM Provider |
Configurable model provider such as Vertex AI Chat Bison, OpenAI GPT, or Azure OpenAI. | Retrieval Chain |
Documentation Webhook |
Updates, adds, or removes indexed documents when Zendesk content changes. | Vector Store |
Data flow
Published Zendesk articles are scraped, saved, split into chunks, embedded, and stored with metadata in a vector store. At chat time, the latest user question and chat history are rewritten into a standalone question, embedded, retrieved against the vector store, and passed with relevant documents to the selected LLM for the final answer.
Why this architecture
RAG lets Vimeo ground support answers in current Help Center content while keeping the prototype simple. LangChain gives a provider-agnostic retrieval QA chain, HNSWLib is enough for a sub-thousand-article prototype, and metadata links responses back to source documents.
Models used: Google Vertex AI Chat Bison · OpenAI GPT-3.5 Turbo · OpenAI GPT-4 · Azure OpenAI GPT-3.5 Turbo · OpenAI embeddings
Scale
- The initial prototype used a dataset of less than a thousand Help Center articles.“which served our purposes for the initial prototype with a dataset of less than a thousand articles. Using a local disk also keeps any sensitive information out of the hands of third parties, which”article, stated
- The retriever used five documents in the example LangChain code.“const chain = ConversationalRetrievalQAChain.fromLLM( aiModel, vectorstore.asRetriever(5), chainOptions ); const response = await chain.call({ question, chat_history }); console.log(response)”article, stated
- GPT-4 was more than twice GPT-3.5 Turbo's price per token and dramatically slower in Vimeo's comparison.“GPT 4 delivers stronger and more concise answers than ChatGPT 3.5 Turbo, but the response speed is dramatically reduced and the price per token is more than doubled.”article, stated
- Vertex AI Chat Bison pricing was $0.0005 per 1,000 input and output characters at the time of writing.“At the time of this writing, the Google Vertex AI Chat Bison model costs $0.0005 per 1,000 characters for both input and output, while OpenAI ChatGPT 3.5 Turbo charges $0.0015 per 1,000 tokens of input and $0.002 per 1,000 tokens of output.”article, stated
Alternatives considered (roads not taken)
Existing Help Center search, tickets, or intent chatbot.
Rejected because: They did not surface relevant domain-restrict embed information at a glance.
Larger OpenAI models as the default.
Rejected because: GPT-4 improved answer quality but had materially worse speed and token cost.
Ask the model to provide document links itself.
Rejected because: ChatGPT returned outdated or nonexistent links from stale training data.
Patterns
rag-retrieval (retrieval)
Vimeo grounds support answers in retrieved Help Center article chunks rather than model memory.
query-rewriting (retrieval)
Chat history and the latest user message are rewritten into a standalone question before retrieval.
model-routing (model-strategy)
The prototype can swap LLM and embedding APIs to compare providers and provide redundancy.
Tradeoffs
Initial vector store
Chose HNSWLib on local disk over External managed vector database.
Rationale: The dataset was small and local disk avoided sending sensitive data to third parties.
Model provider for now
Chose Google Vertex AI Chat Bison over OpenAI GPT-3.5, GPT-4, or Azure OpenAI as the default.
Rationale: Bison gave concise answers, efficient processing, cost benefits, and GCP-native authentication.
Provider abstraction
Chose LangChain with swappable providers over Single hard-coded model and vector backend.
Rationale: The team wanted comparison, redundancy, and the ability to tailor retrieval to different datasets.
Gotchas (what bit them)
Model training data can fight retrieved truth.
Root cause: ChatGPT had an old copy of Vimeo's Help Center and could invent stale links.
Resolution: Use metadata source URLs from retrieval instead of model-generated links.
Generated support quality is hard to verify exhaustively.
Root cause: There are unlimited possible customer questions and responses can vary drastically.
Resolution: Set temperature to zero and compare model behavior, while recognizing QA remains difficult.
Local vector stores are convenient but tied to prototype scale.
Root cause: HNSWLib worked because the initial public help corpus was small.
Resolution: Use the simplest local store for the prototype while keeping the retrieval abstraction swappable.
Evaluation
Vimeo compared Vertex AI Chat Bison, GPT-3.5 Turbo, GPT-4, and Azure OpenAI on response quality, concision, speed, cost, authentication, and operational fit for the help desk prototype.
Metrics: Response quality · Response concision · Response speed · Cost per token or character · Authentication complexity · Safety/moderation behavior
Outcomes
- The prototype could answer the domain-restrict embed query with actionable instructions.
- Vimeo chose Vertex AI Chat Bison for the current prototype.
- The project exposed stale training data and QA challenges as important production risks.
The prototype ran over less than a thousand Help Center articles and used model comparisons with concrete price, speed, and authentication tradeoffs.