Skip to content
PПромтбук
RUEN
03Создание агентов

Дизайн voice-агента

STT/TTS выбор, turn-taking, latency budget < 800ms, interruption handling, recovery от mishear, персона в голосе.

Спроектируй voice-агента {{agent_name}} для {{use_case}}, язык {{language}}. Голосовой UX — НЕ текстовый чат с TTS сверху. Это другой жанр.

Шаг 1 · Latency budget — главный constraint

Человеческий разговор: ~200ms между turns. Если агент молчит > 1 секунды — пользователь думает "висит" и начинает повторять.

Целевой end-to-end (от конца речи user до начала речи agent):

  • Conversational: < 800ms (премиум)
  • Acceptable: < 1500ms
  • Painful: > 2000ms — пользователи уходят

Разложение бюджета:

ЭтапБюджетЧто съедает
STT (audio → text)150-300msstreaming vs batch
LLM (text → text)200-500msTTFT, не TTL
TTS (text → audio)150-300msstreaming TTS
Network RTT50-100msedge proximity

Ключевой трюк: streaming на каждом этапе. Не ждать полного STT — слать частичные транскрипты в LLM. Не ждать полного LLM-ответа — слать первые слова в TTS как только сгенерировались.

Шаг 2 · STT — выбор

ПровайдерLatencyКачествоКогда
Deepgram Nova~150ms streamingвысокое, multi-langдефолт для real-time
Whisper (OpenAI)500-1500msтоп для accents, но batchnon-real-time, дешёвый offline
AssemblyAI Universal~200msвысокое, диаризацияесли нужны speaker labels
Native cloud (Azure / Google)200-400msхорошееесли уже в их стеке

Чек-лист STT:

  • Streaming mode (не batch)
  • VAD (voice activity detection) встроен или внешний
  • Endpointing — как агент понимает "user closed mouth"
  • Custom vocabulary для domain terms (бренды, аббревиатуры)

Шаг 3 · TTS — выбор

ПровайдерTTFBКачество голосаКогда
ElevenLabs Flash~75msпремиум, эмоциидефолт для UX-first
Cartesia Sonic~90msочень быстрый, хорошийlow-latency приоритет
OpenAI TTS-1 / TTS-HD300-800msхороший, но slow startnon-conversational
Native cloud200-500msсреднийбюджет, объём

Чек-лист TTS:

  • Streaming output (audio chunks по мере генерации)
  • Голос подходит к персоне ({{use_case}})
  • SSML support для пауз, акцентов
  • Multi-lang если нужно

Шаг 4 · Turn-taking

Кто говорит когда — это не таймер, это сигналы:

  • Endpoint detection: user закончил → ~500ms тишины + VAD. Слишком короткое окно → агент режет пользователя. Слишком длинное → "почему молчит?"
  • Barge-in: user заговорил поверх агента → агент немедленно прерывает TTS, начинает слушать. Без этого UX мёртв.
  • Filler turns: если LLM думает > 500ms — отыграть короткое "hm, let me check" чтобы не было тишины.

Шаг 5 · Mishear recovery

STT ошибается. Стратегии:

  • Confidence threshold: если transcript confidence < 0.7 → "Sorry, you said {{best_guess}}?" с просьбой подтвердить.
  • Numbers/dates fortification: "12" может быть "20". Для критичных данных — повторное подтверждение: "Confirming: twelve, one-two?"
  • Spell-out fallback: для имён, email, кодов — попросить произнести по буквам.
  • Context grounding: если user сказал что-то невозможное в контексте задачи — переспросить, не интерпретировать вслепую.

Шаг 6 · Interruption handling

User перебивает — это норма в voice. Состояния:

  1. Agent speaking → barge-in detected → stop TTS, clear audio buffer, listen.
  2. Сохрани partial output: что агент успел сказать — добавь в conversation log как "[partial]".
  3. Don't replay: не повторяй то что уже сказал, продолжи с того места где прервали (или измени курс если user сказал "stop", "no", "wait").

Шаг 7 · Персона в голосе

Voice = personality умножается на 10. Решения:

  • Tempo: warm-conversational (slower) vs efficient (faster). Match {{use_case}}.
  • Tone words в system prompt: "speak warmly, use contractions, vary sentence length". LLM генерирует текст под TTS.
  • No markdown / no lists в outputs: TTS читает звёздочки буквально. Промпт: "respond as natural speech, never use bullet points or markdown".
  • Sentence length: короткие, parsable on ear. Не > 20 слов в предложении.

Anti-patterns

  • Batch STT в real-time use case → 2s latency, разговор мёртв.
  • Markdown в TTS → "asterisk asterisk hello asterisk asterisk".
  • TTS целого ответа перед playback → user слышит первый звук через 3s.
  • No barge-in → user перебивает, агент продолжает 30 секунд в пустоту.
  • Длинные предложения с подчинениями → не parseable на слух, user теряется.
  • Тишина при thinking → "висит ли он? повторить?"
  • Игнорирование confidence от STT → агент уверенно отвечает на misheard query → wrong answer.
  • One-size persona → support и outbound sales требуют разных голосов и темпа.
  • No fallback на text/keypad → если voice фейлит подряд, дай escape.

Output

Voice agent spec:

  1. Latency budget table (каждый этап + общий target).
  2. Stack: STT / LLM / TTS с обоснованием.
  3. Turn-taking rules (endpoint, barge-in, fillers).
  4. Persona description (tempo, tone, voice ID).
  5. Recovery flows: mishear, low confidence, interruption.
  6. System prompt patterns для voice-friendly output.
  7. Метрики: time-to-first-audio, interruption rate, mishear rate, session length.
К подразделу «Создание агентов»
Похожие промты