Skip to content
All work

02 · AI Engineering

Grounded Voice Agent

The founder had spent years answering the same questions on camera. Hundreds of hours of it, sitting in a content library nobody could query. Meanwhile the audience kept asking, and one person cannot scale a conversation. The obvious move — put a chatbot on it — produces a model that sounds like every other model. That was the thing to avoid.

Client
An online coaching business with a large recorded content library
Sector
Creator Economy / Applied AI
Engagement
Prototype to working agent
Year
2026

Full-duplex

Real-time voice, interruptible

384-dim

Local embedding index, no vector vendor

4

Tools available to the agent

100%

Answers preceded by retrieval

01

Build the corpus before the agent

An agent is only as good as what it is allowed to read. We built the ingestion side first: a pipeline that pulls transcripts from the client’s public and unlisted video catalogue and short-form social content, normalizes them into a timestamped JSONL corpus, and keeps source URLs and offsets attached to every segment.

Keeping the timestamps mattered. It means an answer can point back at the exact moment in the exact video it came from — the difference between a plausible response and a citable one.

02

Retrieval that runs on one machine

We did not reach for a hosted vector database. The corpus is chunked into semantic units, encoded with a compact sentence-transformer model, and searched with nearest-neighbour cosine similarity. It loads in seconds, runs on the same box as the agent, costs nothing per query, and has no network hop in the latency budget.

For a corpus this size that is not a compromise — it is the correct engineering answer. Infrastructure you do not add is infrastructure you never have to pay for, secure, or explain.

03

Grounding is a rule, not a hint

The failure mode for this product is an agent that answers from the model’s general knowledge and sounds like generic advice. So retrieval is not optional. The agent is instructed to call content search on every question before it speaks, to answer from what comes back, and never to claim it has no information when the retriever returned results.

Around that core, it carries a small set of tools with clear boundaries: semantic search over the library, live web search for current facts outside the corpus, and email for follow-up. Each one exists because a real conversation needed it.

04

Make the voice feel like a conversation

Text-in, text-out was never the product. The agent runs on a real-time agents framework with a streaming multimodal model, cloud noise cancellation, and optional video input. It can be interrupted mid-sentence, which is the single feature that separates a voice agent from a phone tree.

Responses are held short and direct by design. Spoken answers have a different length budget than written ones, and most voice assistants fail by ignoring that.

Outcome

The client has an assistant that answers in their own framing and vocabulary, sourced from their own material, available at any hour and at any scale.

The corpus is theirs, the index is theirs, and adding new content is a re-run of the ingestion script rather than a new engagement.

Built with

PythonLiveKit AgentsGemini Realtimesentence-transformersscikit-learnJSONL corpusTool calling

Next case study

Smart Glasses Field Assistant

Hands-busy work, answered out loud. Live camera and voice from wearable hardware into a multimodal model.