AI CRM

A voice agent and assistant for a US auto-dealership group. Callers ask for repair status, parts-delivery ETAs, vehicle availability and part compatibility — and book service appointments. The hard part here is not the conversation, it is retrieval: pulling the exact answer out of the dealer’s live systems — inventory, parts catalog, service schedule — from whatever a caller says out loud, inside a live-call latency budget.

  • A call → the exact answer from the dealer’s live systems, by voice.
  • Two surfaces on one retrieval engine: chat and phone.
  • Answers arrive at the pace of a live conversation.
Problem

Pull the exact answer from a live database, by voice.

Callers ask where their car is in service, when a part arrives, whether a part exists and fits, and how to book service. The answer lives in the dealer’s DMS — inventory, parts catalog, service schedule — and changes by the hour.

The phrasing is live and ambiguous: people mix up models, name a part their own way, dictate addresses with errors. Exact-string search returns noise, and voice adds a hard latency budget on top.

  • The answer must come from the dealer’s live database, not a static FAQ.
  • Queries are ambiguous: model, part, address — all spoken and approximate.
  • Voice does not forgive latency — the answer has to come back almost instantly.
Solution

Two surfaces over one retrieval engine.

One RAG engine over the dealer’s DMS serves two surfaces: async order and parts queries, and live voice over telephony. On top sits an agent that runs the dialog, calls tools, and writes back to the CRM.

The operator card on demo data: daily stats and a sales-chance prediction right in the call.
Live call transcription inside the operator interface, demo data.
  1. 01

    Understand the query

    A custom intent router and dialog state work out what the caller wants: status, availability, compatibility or a booking.

  2. 02

    Retrieve the exact fact

    Hybrid search, re-ranking and HyDE over inventory, parts and service slots. A deterministic pre-filter normalizes SKUs, matches the customer and resolves the address.

  3. 03

    Answer in budget, by voice

    Streaming STT, model routing with fallback to a cheaper model, and prompt caching on the static prefix — to stay inside the live-call latency budget.

  4. 04

    Coach the rep

    A real-time call-coach feeds suggestions to the sales rep mid-call.

  5. 05

    Write back and prioritize

    The agent writes the result back to the CRM, and a lead-ranking model prioritizes who to call first.

Technical

Retrieval that holds a live call.

Python/Django backend. Dialog on OpenAI, streaming STT on Deepgram, telephony on Twilio, speech synthesis under a tight latency budget. Model routing with fallback: when the top model is overkill, a cheaper one answers.

RAG over the dealer’s DMS: hybrid search with re-ranking and HyDE, an agentic loop with tool definitions and structured outputs, and a deterministic pre-filter — SKU normalization, customer matching, address resolution. Both surfaces are covered by eval sets, with prompt caching on the static prefix. Near the end we built our own lead review-and-scoring panel: an LLM council of several runs, a deterministic formula with per-factor reasons, and bulk rescoring across the base.

01

Hybrid search + re-ranking + HyDE over inventory, parts and service.

02

Deterministic pre-filter: SKU normalization, customer matching, address resolution.

03

Streaming STT (Deepgram) and telephony (Twilio) inside a latency budget.

04

Model routing with fallback and prompt caching on the static prefix.

05

Agentic loop: tool definitions, structured outputs, CRM write-back.

06

Eval sets on both surfaces — quality is measured, not promised.

Stack
Python / Django backend and the agentic loop
OpenAI dialog
Deepgram streaming STT
Twilio telephony
Hybrid search + HyDE exact facts from live systems
Eval sets quality on both surfaces
Our own review-and-scoring panel: an LLM council — several independent runs fold into one score.
Deterministic scoring: a weighted formula, a reason per factor, one-click rescore.
Bulk rescore: 1,140 leads across statuses and types — in 11 seconds.
Outcome

What changed

01

Calls close without an operator

Around a hundred calls a day in production: repair status, availability, compatibility, service booking — the agent answers by voice on its own.

02

Answers from the live database, not a FAQ

Hybrid search and the pre-filter pull the exact fact from the DMS by live phrasing, not exact string match.

03

Quality under control

Eval sets on both surfaces catch regressions before release — the model and prompts can change without fear.

Need an agent that pulls the exact answer from your live database?

We help teams put retrieval and voice into production: hybrid search, ranking, an agentic flow, and evals that hold quality.

Brief (optional)