Voice AI Agents in Production: Enterprise Architecture for Real-Time Voice-First Systems
Voice AI agents are the first genuinely new interface pattern in a decade — real-time, natural, and now finally responsive enough to feel like a conversation rather than a phone tree. The technology is here. The enterprise architecture that makes them reliable, observable, and safe is not obvious. This is a practical look at the components a voice agent stack actually needs, the vendor decisions that matter, and the deployment patterns we use when we build voice-first systems for enterprise customers.
TL;DR. A production voice AI agent is not one model; it is a real-time pipeline of five components — telephony ingress, speech-to-text, an LLM reasoning layer, text-to-speech, and turn-taking control — each of which has hard latency budgets and its own failure modes. Newer 'speech-in speech-out' models (OpenAI Realtime, Gemini Live, Sesame Maya) collapse the middle three into one, but do not remove the need for orchestration, tools, or observability. In enterprise settings the winning architecture is a voice-orchestrator layer (Retell, Vapi, LiveKit Agents, or a bespoke build on Pipecat) that owns the real-time transport, sitting between your telephony provider and the LLM stack you already run.
Why Voice Agents Are Different
Every other agent architecture we build has one property in common: latency does not have to be human. A chatbot that takes 8 seconds to respond is a slow chatbot; a document-extraction agent that takes 30 seconds is fine. Voice agents lose their reason for existing at 800 ms of end-to-end response latency. Above that number, people start talking over the agent, and the conversation breaks down.
That one number cascades through every architectural decision. You cannot spend 400 ms on a network round-trip to a slow reasoning model, then 300 ms on text-to-speech, then 200 ms on your telephony provider's buffer, and then hope. Every hop has a budget, every budget is small, and every budget is enforced by the physics of human conversation, not by an SLA you can renegotiate.
A production voice agent is therefore not a chat agent with a microphone bolted on. It is a real-time system with an LLM as one component, and everything else — turn-taking, interruption handling, background noise, telephony jitter — is engineering work that has nothing to do with prompting.
The Five-Layer Reference Architecture
The mental model we deploy has five layers, and understanding what belongs at each is most of the battle.
Telephony ingress. How the audio enters your system. For phone-based agents this is a SIP trunk from a provider (Twilio, Telnyx, Vonage, or an on-prem PBX). For web/mobile agents it is a WebRTC session, usually managed by a real-time transport service. This layer's job is to hand you an audio stream and take one back — nothing more.
Speech-to-Text (STT). Streaming transcription of the caller's audio into text, with word-level timestamps. Latency below 300 ms per utterance is the bar. Deepgram, AssemblyAI, and Speechmatics dominate the commercial market; OpenAI Whisper (fine-tuned) and NVIDIA Parakeet are the self-hostable options. Streaming (partial transcripts as words arrive) is table stakes; if your STT only returns full transcripts, your agent will feel a full turn slower than the competition.
Reasoning + tools. The LLM that decides what to say and when to invoke a tool (check calendar, look up order, escalate to human). This is the layer you already know how to build if you have built any other agent. For voice it needs one extra quality: streaming responses, so the TTS layer can start speaking before the model has finished generating.
Text-to-Speech (TTS). Streaming synthesis of the model's response back into audio. ElevenLabs, Cartesia, and Rime AI are the current commercial leaders on latency-plus-quality; Kokoro and XTTS are the self-hostable options. Streaming is again the bar — sub-300 ms time-to-first-audio-byte for a natural conversation.
Turn-taking and interruption control. This is what makes the difference between an agent that feels like a conversation and one that feels like walkie-talkies. Voice Activity Detection (VAD) decides when the caller has finished speaking; end-of-turn detection decides when to stop the agent's speech if the caller interrupts. Silero VAD is the default choice; the newer 'turn detection' models (LiveKit's turn-detection-v2, or the built-in end-pointing in the Realtime APIs) are what push the experience from acceptable to natural.
The Speech-In / Speech-Out Alternative
OpenAI Realtime API
OpenAI's Realtime API collapses STT, reasoning, and TTS into a single model that consumes and emits audio directly over a WebSocket or WebRTC session. Latency is best-in-class — 200-400 ms end-to-end — and the model handles turn-taking natively. The trade-offs are pricing (audio tokens are more expensive than text), less control over each stage (you cannot swap in a specialist STT for a heavy-accent use case), and observability that is less mature than the pipeline approach. Excellent for consumer or highest-quality enterprise use cases; expensive at scale.
Gemini Live API
Google's answer, similar architecture, similar latency. Strong on multilingual out of the box. Same trade-offs: less componentised, more expensive, and integrated with the broader Google Cloud ecosystem for tool use.
The five-layer pipeline
Slower — 500-800 ms end-to-end is the good case — but every layer is swappable, observable, and priced per stage. For high-volume production (contact-centre workloads) the pipeline approach almost always wins on unit economics; for latency-sensitive VIP flows the Realtime APIs win on quality. Many enterprises run both, routing high-value calls to the Realtime path and the volume tier to the pipeline.
Hybrid: pipeline + realtime as a fallback
A pattern we increasingly deploy — the pipeline handles most calls at commodity pricing, and specific triggers (VIP identifier, sentiment threshold, escalation) hot-swap the session onto a Realtime path mid-call. Harder to build, cheaper to run at scale, better UX where it matters.
The Voice Orchestrator Layer
Between telephony and the LLM sits the piece that ties everything together: the voice orchestrator. This layer owns the real-time session, dispatches audio to STT, tokens to the LLM, and audio back to telephony; runs the VAD; and handles interruptions. It is the one component you should not try to write from scratch on your first voice project.
Retell AI and Vapi are the leading managed platforms — you point them at your LLM (any provider, or a gateway), give them a system prompt and a set of function-callable tools, and they handle the pipeline. Both integrate with Twilio and Vonage for telephony out of the box, and both expose webhooks for post-call processing. Retell tends to have the edge on turn-taking naturalness in 2026; Vapi tends to have the edge on customisation and multi-language.
LiveKit Agents is the open-source alternative — a real-time media server plus a Python agents framework. It runs your own infrastructure, is provider-agnostic across STT / LLM / TTS choices, and integrates directly with LiveKit's WebRTC transport. If you already run LiveKit for video, or if regulatory requirements demand on-prem media, this is the natural fit.
Pipecat is the framework layer beneath many of the above — Python primitives for composing real-time voice pipelines, used by teams building their own orchestrator. Choose this when Retell or Vapi cannot accommodate a specific requirement (custom VAD, unusual telephony provider, exotic language support).
For a first enterprise deployment the pattern that almost always works is: Retell or Vapi as the orchestrator; your existing LLM gateway as the LLM; your existing observability platform receiving traces via webhook. The orchestrator becomes a boundary, not a lock-in.
Component Choices We See Working at Enterprise Scale
| Layer | Managed default | Self-hosted alternative | When to switch |
|---|---|---|---|
| Telephony | Twilio Voice / Vonage | On-prem PBX + Freeswitch | Existing SIP infrastructure, EU data residency |
| Orchestrator | Retell / Vapi | LiveKit Agents / Pipecat | Data residency, custom VAD, regulated workloads |
| STT | Deepgram Nova / AssemblyAI Universal | Fine-tuned Whisper / NVIDIA Parakeet | Heavy accents, domain jargon, data residency |
| LLM | Provider via AI gateway | vLLM-hosted open-weights model | Cost, latency SLA, or sovereignty |
| TTS | ElevenLabs / Cartesia / Rime | Kokoro / XTTS | Custom voice cloning, data residency |
| VAD / turn detection | LiveKit turn-detection-v2 / Realtime endpointing | Silero VAD | Baseline; upgrade for naturalness |
| Observability | Langfuse / Helicone with voice traces | Self-hosted Langfuse | Regulated data cannot leave VPC |
Tools, Function Calling, and Backends
The tool interface a voice agent needs is the same as any other agent — a set of typed functions the model can invoke — but with two additional constraints.
First, tool calls must be *fast*. A caller will not wait five seconds while your CRM API responds. Budget tools at 300-500 ms for the happy path; anything slower needs an async pattern where the agent says something like 'let me pull that up' while the tool runs in the background. This is not optional theatre — it is what preserves the conversation's rhythm.
Second, tool selection must be *cheap* to explain. In text agents the model can be verbose about why it chose a tool; in voice, the audible turn is the reasoning. Prefer few well-named tools over many finely-scoped ones. If the agent is picking between twenty tools per turn, the latency will suffer and the reasoning will be hard to audit.
The backend integration pattern that ages well: expose backend operations as MCP servers or a small internal API, and let the orchestrator's function-calling layer bind to them. Retell, Vapi, and LiveKit Agents all speak this pattern. Never let the voice agent talk directly to systems of record — always through a service layer that enforces auth, tenant isolation, and audit logging. Voice sessions are ephemeral; the audit trail must not be.
A Production-Shaped Voice Agent Configuration
# retell-agent.yaml — a Retell configuration wired to enterprise infrastructure
agent_name: support_triage_voice
voice_id: 11labs-adrian # ElevenLabs voice, sub-300ms TTFB
# ---- Model routed through the enterprise AI gateway ----
response_engine:
type: custom_llm
llm_websocket_url: wss://gateway.internal.example.com/voice/v1/agent/support
# gateway handles: key mgmt, budget, provider fallback (Claude -> GPT),
# cost accounting per tenant, prompt versioning
# ---- Telephony ----
telephony:
provider: twilio
numbers: ['+1-555-01234']
webhook_url: https://api.example.com/voice/inbound
# ---- Turn-taking calibrated for enterprise callers ----
interruption_sensitivity: 0.6 # allow the agent to be interrupted mid-sentence
end_call_after_silence_ms: 4000
backchannel_frequency: 0.3 # 'mm-hmm' at natural moments
responsiveness: 1.0 # start speaking as soon as the model streams
# ---- Tools available to the agent ----
functions:
- name: lookup_order
description: 'Look up an order by ID. Read-only.'
url: https://api.example.com/tools/orders/lookup
speak_during_execution: 'Let me pull that up for you.'
- name: propose_refund
description: 'Propose a refund up to $200. Requires supervisor approval before it is executed.'
url: https://api.example.com/tools/refunds/propose
speak_during_execution: 'One moment while I check what we can do.'
- name: transfer_to_human
description: 'Transfer the call to a human agent when the caller is upset or the case is out of scope.'
url: https://api.example.com/tools/telephony/transfer
# ---- Post-call ----
post_call_analysis:
webhook_url: https://api.example.com/voice/post-call
# We forward the transcript + tool trace to Langfuse from this webhook,
# then run a scored evaluation against the golden set nightly.
data_retention:
transcripts_days: 90 # regulated workloads may cap this at 30
recordings_days: 30
pii_redaction: on # Retell can redact PII before storing
Latency Engineering: Where the Milliseconds Go
Enterprise voice quality is decided in the latency budget, and the budget is unforgiving. A rough breakdown of where 800 ms of end-to-end latency spends itself in a healthy pipeline: 100 ms of telephony transport (SIP jitter buffer, WebRTC packetisation), 200 ms of STT (streaming, so this is time from utterance-end to final transcript), 200 ms of LLM time-to-first-token (streaming), 200 ms of TTS time-to-first-audio-byte, 100 ms of VAD + turn-taking overhead.
The first optimisation most teams reach for is a faster LLM, and it is usually the right one — a small model streaming from the same region as your orchestrator will save 300 ms compared to a large model called via a distant region. The second is co-location: run the orchestrator, the LLM (if self-hosted), and the STT / TTS in the same cloud region as your telephony provider's media servers. A 40 ms cross-region hop, multiplied by every turn, is what makes the difference between 'natural' and 'a bit slow.' The third is streaming end-to-end: any component that returns a full response only after producing all of it is quietly killing your latency budget.
The pattern we run for critical paths: LLM behind vLLM in the same region as the orchestrator, Deepgram or fine-tuned Whisper for STT, Cartesia for TTS (competitive latency and quality), and a health-check webhook every 30 seconds that pages if any component's p95 latency crosses its budget.
Regulated voice data has stricter rules than text. Call recordings and transcripts often contain PII, health information, or financial data — and unlike a chat transcript, the recording of a voice is itself biometric data under some regulatory frameworks. Wire PII redaction into your STT provider (Deepgram supports this natively), define retention with your compliance team before you launch, and never let the raw audio touch any system that is not covered by your DPA. Consent messaging at call start is not optional in most jurisdictions.
Observability, Evaluation, and the Reality of Voice Failures
Voice failures are qualitatively different from text failures. In a text agent the failure mode is a bad answer; in a voice agent the failure mode is often a bad *conversation* — the agent talked over the caller, missed an interruption, mispronounced the customer's name, misinterpreted a heavily accented word, or produced audio that sounded correct but did not land.
The observability stack that works has three layers. Structured traces per turn — STT confidence, LLM prompt / output, tool calls, TTS voice ID, timings for every stage — forwarded to your Langfuse or LangSmith instance from the orchestrator webhook. Post-call analysis — a slower job (LLM-as-judge, or a fine-tuned classifier) that scores the whole conversation against a rubric (task success, sentiment shift, containment rate) and files the score in your dashboard. Sampled human review — every dashboard we build for a voice agent has a 'listen to 20 random calls this week' widget for the operations owner, because there is no substitute for listening.
The evaluation metrics that actually track quality: containment (percentage of calls resolved without human transfer), latency p95 by turn, interruption recovery rate (did the agent recognise and adapt to the interruption), tool-call success rate, and post-call CSAT if you can collect it. Do not deploy a voice agent without at least the first three.
Where Voice AI Agents Tend To Be the Right Choice
High-volume, structured conversations
Appointment scheduling, order status, account balance, symptom triage, delivery updates — bounded conversations where the same handful of intents cover most calls are ideal. Voice agents handle these at unit economics text bots cannot match, because no one has to open an app or a browser.
After-hours coverage without human agents
A voice agent that handles 40% of after-hours calls end-to-end and captures a callback intent for the rest converts a cost centre into a service you can keep open. This is where most enterprise voice ROI comes from.
Regions and demographics where voice remains the default channel
India, most of Latin America, most of Africa, older demographics everywhere. Voice is the front door for a much larger share of enterprise interactions than western SaaS discourse tends to assume.
Outbound reminders and confirmations
Appointment reminders, delivery windows, prescription pickups, payment confirmations. Voice agents handling these free human agents for inbound conversations that actually need judgment.
Where It Is Not the Right Choice
Voice is a terrible medium for anything that needs a form, a document, or a table — the caller has no place to see it. Complex authentication flows, most B2B configuration work, and anything requiring the caller to compare options are all better served by chat or a screen. Voice agents also do not solve for emotionally difficult conversations — cancellations, complaints, bereavement services — where the point of the call is human contact, not throughput. And in regulated flows where every word must be exact (financial advice, medical diagnosis, legal advice), the risk profile of a generative voice agent is currently unacceptable without a human in the loop; the agent's role there is intake and routing, not decision-making.
Seven Decisions Worth Making Before Your First Deploy
- Pipeline versus Realtime. Decide based on latency requirements and per-minute economics. Pipeline for volume, Realtime for VIP, hybrid for both. Do not default to Realtime just because it is newest.
- Managed orchestrator versus self-hosted. Retell or Vapi for the first deployment. LiveKit Agents or Pipecat only if data residency, custom telephony, or exotic language support demands it.
- LLM routed through your gateway. Voice agents should not have their own model contracts. Point the orchestrator at your existing AI gateway so budgets, keys, and provider fallbacks apply here as everywhere else.
- Consent and recording policy. Decide with legal and compliance *before* build. Retention periods, PII redaction, opt-out flow — these are launch blockers if not resolved.
- Fewer, larger tools. Voice does not tolerate long tool-selection reasoning. Aim for four to six tools per agent, each covering a coherent capability.
- Post-call evaluation as a build step. Nightly LLM-as-judge scoring against a rubric, plus weekly human review of a sample. Voice quality drifts silently without this.
- Latency SLOs per component. Publish and alert on them: STT p95 300 ms, LLM TTFT 400 ms, TTS TTFB 300 ms, telephony 100 ms. If any single component blows its budget, users notice within minutes.
How To Approach a Voice AI Pilot
The pilot shape that works: pick one narrow inbound use case — appointment scheduling, order status, IVR replacement — with real call volume. Deploy Retell or Vapi as the orchestrator; point it at your existing LLM gateway; wire four tools (lookup, action, transfer-to-human, no-op fallback). Consent messaging on connect; PII redaction at STT; 30-day recording retention. Run shadow mode for a week (agent runs but a human agent picks up in parallel; you compare). Move to autonomous for a bounded subset (specific tenants, off-peak hours), monitor for two weeks, then expand.
By the end you have concrete data on containment rate, per-call cost, p95 latency, tool success rate, and the failure modes specific to your caller distribution. That is what you need to decide whether to scale to more use cases, invest in a self-hosted stack for cost or data-residency reasons, or refine the tool set.
If you would like help with the architecture — the orchestrator choice, the STT / LLM / TTS component decisions, wiring voice traces into your existing observability platform, integrating with an existing governance framework, or building the post-call evaluation pipeline — talk to us. We have deployed voice agents across contact centres, healthcare intake, field service dispatch, and B2C support in India and internationally, and the architecture patterns are much more consistent than first-time voice teams typically expect.
Frequently Asked Questions
Which is better for enterprise — the pipeline architecture or a Realtime API?
Should we use Retell, Vapi, LiveKit, or build on Pipecat directly?
How do we handle heavy accents or domain-specific vocabulary?
What about interruptions — how do we make the agent stop talking when the caller cuts in?
How do we handle PII and call recordings under regulation?
What does a voice agent cost per minute in production?
How do we evaluate voice agent quality — you cannot A/B test a phone call the way you A/B test a webpage?
Written By
Inductivee Team
AuthorAgentic AI Engineering Team
The Inductivee engineering team — a remote-first group of multi-agent orchestration specialists, RAG pipeline architects, and data liquidity engineers who have shipped 40+ agentic deployments across 25+ enterprises since 2012. Our writing is grounded in what we actually build, break, and operate in production.
Inductivee is a remote-first agentic AI engineering firm with 40+ production deployments across 25+ enterprises since 2012. Our engineering content is written by active practitioners and technically reviewed before publication. Compliance: SOC2 Type II, HIPAA, GDPR, ISO 27001.
Engineer This With Inductivee
The engineering patterns in this article are what our team builds into production every day. Explore the related service to see how we deliver this capability at enterprise scale.
Related Articles
Multi-Agent Orchestration: LangChain vs CrewAI vs AutoGen for Enterprise Deployments
LiteLLM in Production: The Enterprise AI Gateway Pattern for Multi-Provider LLM Architecture
Langfuse in Production: Enterprise LLM Observability Architecture for Multi-Model AI Systems
Ready to Build This Into Your Enterprise?
Inductivee engineers agentic systems, RAG pipelines, and enterprise data liquidity solutions. Let's scope your project.
Start a Project