--- theme: seriph title: "Lesson 35 — Why Does a Voice Agent Feel Slow?" info: "English video course for AI Agents in Depth" author: Bojie Li transition: slide-left mdc: true lineNumbers: false monaco: false aspectRatio: 16/9 canvasWidth: 980 layout: cover class: cover ---
Expand · Chapter 9 · Multimodal Interaction
# Why Does a Voice Agent Feel Slow?

Cascaded pipelines, latency waterfalls, streaming, and turn detection

Lesson 35 of 42 · 18 minutes · Voice; Cascaded Pipeline; Full-Chain Streaming; Streaming Voice Perception
---
Expand · Chapter 9 · Multimodal Interaction
# Problems this chapter will solve

Lesson 35

Why Does a Voice Agent Feel Slow?

Lesson 36

When Should Voice Stop Taking Turns?

Lesson 37

How Does an Agent Act Through Pixels?

Lesson 38

How Does an Agent Turn Plans into Physical Actions?

--- # Why this problem matters

Turn detection

VAD waits for silence and can cut off a thinking pause.

Serial work

ASR, LLM, and TTS latency accumulate when stages wait.

Queueing

High utilization amplifies latency nonlinearly.

--- # Three ideas to keep in view

Cascaded

VAD → ASR → LLM → TTS

Streaming

Emit partial transcripts, tokens, and audio chunks early

Convergence

Early recognition is fast but may change as context arrives

--- # The book's visual model Latency waterfall for a serial voice pipeline
Latency waterfall for a serial voice pipeline
--- # Wait for completion vs. Stream the chain

Wait for completion

Stream the chain

Streaming changes when information becomes available—not the component boundaries.
--- # Pipeline stages should overlap ~~~python async for partial_text in asr.stream(audio): llm.update(partial_text) async for sentence in llm.sentences(): tts.enqueue(sentence) if user_interrupts(): cancel_output() ~~~ --- # Test the claim
9-11 min

Preflight a cascaded voice Agent

Observe: VAD model, ASR/LLM/TTS provider configuration, and missing runtime prerequisites

9-22 min

Generate controlled streaming-ASR scenarios

Observe: Normal speech, a 900 ms pause, and background noise under identical source content

Demo budget: 3 minutes · one contiguous terminal block
--- class: course-terminal ---
Live demo
# Switching to the terminal ~~~bash $ cd chapter9/live-audio/backend && npm run check $ cd chapter9/streaming-speech && python prepare_scenarios.py audio/sentence.wav validation/course-scenarios ~~~
Run the command(s), narrate decisions, and point to the observation—not just the output.
--- # What the evidence supports

Finding 1

The silence threshold is both a latency control and a turn-taking assumption.

Finding 2

Streaming hides work behind speech but introduces unstable partial hypotheses.

Finding 3

Time to first useful audio matters more than full-response completion time.

--- layout: center ---
Where the claim stops
# Boundary condition
A setup check or generated audio scenario verifies wiring and controls—not human conversational quality.
--- layout: center ---
Engineering takeaway
# Design rule
Instrument the latency of every boundary, then stream and overlap only where cancellation and correction are designed.
--- # Continue the experiment
Add-on (historical 9-2): browser WebRTC phone Agent chapter9/phone-agent/ Streaming-speech official runner chapter9/streaming-speech/run_official_experiment.py Serial voice architecture book-en/images/fig9-1.svg Queueing latency book-en/images/fig9-3.svg
--- layout: center class: text-center ---
Pause and apply
# Your turn
Which latency number would best predict whether a user interrupts or abandons your voice Agent?
--- layout: center class: text-center ---
Next · Lesson 36
Remove more boundaries—and decide what fast interaction should do while slow reasoning continues.