惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Heimdal Security Blog
A
Arctic Wolf
K
Kaspersky official blog
V
Vulnerabilities – Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
L
LINUX DO - 热门话题
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs
D
Docker
爱范儿
爱范儿
T
Tenable Blog
C
Check Point Blog
B
Blog
C
Cisco Blogs
Vercel News
Vercel News
The Cloudflare Blog
T
Threatpost
NISL@THU
NISL@THU
T
Tor Project blog
V2EX - 技术
V2EX - 技术
P
Palo Alto Networks Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
博客园 - 司徒正美
S
Security @ Cisco Blogs
GbyAI
GbyAI
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
The Register - Security
The Register - Security
Recorded Future
Recorded Future
Cloudbric
Cloudbric
Webroot Blog
Webroot Blog
N
News and Events Feed by Topic
Y
Y Combinator Blog
博客园_首页
T
Troy Hunt's Blog
The Hacker News
The Hacker News
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
U
Unit 42
AWS News Blog
AWS News Blog
PCI Perspectives
PCI Perspectives
V
Visual Studio Blog
博客园 - 聂微东
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Голосовой агент — это не чатбот с телефоном: 40 часов экономии и $100, сожженные на ботах
cskeleto · 2026-05-04 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели2.5K

Кейс

Я однажды примерно за сутки сжег около $100 на голосовом агенте.

Не на большом запуске. Не на огромной базе. Не на хитрой рекламной кампании. Просто на небольшом пуле холодных контактов, где агент периодически попадал на voicemail, IVR, секретарей и других ботов.

В какой-то момент два не очень умных голосовых процесса могли довольно долго вежливо говорить друг другу что-то в духе:

  • Здравствуйте.

  • Здравствуйте, чем могу помочь?

  • Я звоню, чтобы…

  • Здравствуйте, чем могу помочь?

  • Конечно, подскажите, пожалуйста…

И пока это происходит, у тебя капает телефония, STT, TTS, модель, инфраструктура. В чате такой баг выглядел бы глупо. В звонке он еще и стоит денег.

Снаружи кажется, что задача простая. Есть Twilio, есть ElevenLabs, есть OpenClaw или любой другой агентный слой. Склеил, дал промпт, сказал “позвони человеку и поговори с ним на тему” - и вроде бы готово.

На практике голосовой агент - это не чатбот, к которому прикрутили телефон.

Это realtime-система, где у каждой лишней секунды, каждого лишнего tool call и каждого кривого перехода есть цена.

TL;DR

Если коротко:

  • В чате модель может думать. В звонке пауза в 2-3 секунды уже звучит как поломка.

  • Большой промпт и много инструментов в голосе часто не делают агента умнее, а размазывают разговор.

  • Рабочий голосовой агент - это не один “супер-промпт”, а граф стадий: что спросить, куда перейти, когда закончить.

  • Cold outbound намного сложнее inbound-квалификации или напоминаний, потому что мир снаружи не подчиняется вашему flow.

  • Retell/ElevenLabs-подобные платформы ценны не только тем, что “умеют звонить”, а тем, что закрывают скучную realtime-механику: interruptions, streaming STT/TTS, лимиты, тесты, post-call extraction.

  • Главный вопрос не “как позвонить”, а “как не дать агенту продолжать звонить, когда он уже заблудился”.

Наивная архитектура, которая выглядит слишком просто

Первая версия в голове обычно выглядит так:

Twilio call  
  -> streaming speech-to-text  
  -> LLM / OpenClaw agent  
  -> tools: CRM, calendar, email, database  
  -> text-to-speech  
-> Twilio call

Выглядит логично.

Пользователь что-то сказал. Мы распознали речь. Отдали текст агенту. Агент подумал, вызвал инструменты, сформулировал ответ. Мы озвучили ответ. Все счастливы.

В текстовом чате эта схема в целом терпима. Хочешь качества - берешь что-нибудь тяжелое типа Opus, даешь длинный системный промпт, пачку тулов, разрешаешь модели несколько секунд или даже минут собирать хороший ответ. Пользователь подождет.

В звонке эта логика ломается почти сразу.

Latency в чате и latency в звонке - это разные сущности

В звонке пауза в 2-3 секунды уже ощущается как странность.

Если агент в этот момент:

  • дергает CRM;

  • проверяет календарь;

  • зовет OpenClaw;

  • ждет модель;

  • получает tool result;

  • генерирует ответ;

  • отправляет его в TTS;

  • начинает стримить аудио обратно;

то разговор начинает звучать не как “умный AI”, а как зависший оператор.

При этом человек на той стороне не обязан сидеть молча. Он перебивает, уточняет, говорит “алло?”, начинает повторять вопрос, комментирует паузу. Все это попадает в streaming-транскрипт, модель пытается ответить уже на новые куски, контекст засоряется, и через несколько реплик у тебя не диалог, а суп.

В чате можно попросить пользователя подождать. В звонке ожидание само становится частью разговора.

И это важное отличие.

Быстрая модель лучше медленной умной? Не совсем

На одном из проектов у нас работала Gemini 2.5 Flash.

Это была нормальная для realtime модель: она могла начать отвечать быстро, могла сказать “сейчас проверю календарь”, пока дергает инструмент, могла не оставлять человека в полной тишине.

Но у нее была другая проблема. Если дать большой развесистый промпт, длинный flow и пачку инструкций на весь звонок, она быстро терялась. Буквально через несколько реплик начинал расползаться смысл:

  • зачем мы вообще звоним;

  • что уже спросили;

  • что еще надо спросить;

  • какой сейчас этап;

  • можно ли уже завершать;

  • какой инструмент дергать дальше.

То есть “быстрая модель” сама по себе не решает задачу. Она просто переносит проблему из latency в управляемость.

В чате можно жить с большим промптом. В голосе большой промпт часто превращается в мешок инструкций, из которого модель на пятой реплике достает не ту бумажку.

Рабочий голосовой агент - это граф, а не простыня

Хороший голосовой агент обычно выглядит не как один большой промпт “будь полезным и поговори с человеком”.

Он больше похож на управляемый граф разговора.

В Retell или ElevenLabs это видно прямо в интерфейсе. Например, в шаблоне patient screening нет магической простыни “поговори с пациентом”. Там есть узлы:

  • greeting;

  • identity check;

  • consent;

  • screening questions;

  • closing;

  • transfer call;

  • end call;

  • technical issue fallback.

У каждого узла короткая инструкция. У переходов есть условия. Отдельно настраиваются interruption sensitivity, лимит длительности звонка, post-call extraction, тесты.

Примерно так:

[Greeting]  
  if confirmed identity  
      v
[Identity check]  
  if data matches  
      v
[Consent]  
  if agreed  
      v
[Question 1] -> [Question 2] -> [Question 3]  
      v
[Closing]  
      v
[End call]

-----------

Fallbacks:  

wrong person 
  -> apologize 
  -> end call  

transfer needed 
  -> transfer call  technical issue 
  -> say we'll call back 
  -> end call

И вот это уже ближе к реальности.

Не:

“Ты умный агент, помоги человеку.”

А:

  • сейчас поздоровайся;

  • проверь, с тем ли человеком говоришь;

  • если не тот человек - извинись и заверши;

  • если тот - получи consent;

  • задай ровно этот вопрос;

  • после ответа перейди к следующему;

  • если сломались - скажи, что перезвоним;

  • после звонка вытащи вот эти поля.

Это звучит скучно. Но в голосовых агентах скучная инженерия обычно и спасает.

Где у нас это сработало

Первый успешный кейс был с inbound-квалификацией лидов.

Компания продавала курсы программирования на немецком рынке, в том числе людям, которым обучение могло оплачиваться через биржу труда. Маркетинг экспериментировал с аудиториями, и в заявки часто прилетали люди, которые вообще не понимали, куда они оставили форму.

Сейлзы жаловались, что тратят время на мусорные лиды. Поэтому мы посадили голосового агента прозванивать входящие заявки и выяснять базовые вещи:

  • понял ли человек оффер;

  • откуда узнал о программе;

  • что его интересует;

  • какая цель;

  • может ли заниматься на английском;

  • какой бюджет;

  • какие сроки.

На выходе агент заполнял короткий опросник, считался скор, теплые лиды уходили живым сейлзам, мусор отсеивался. Живые сейлзы периодически проверяли качество фильтрации.

На команду из 4 сейлзов это освободило примерно 40 часов в неделю.

Ключевой момент: агент не “продавал все всем”. Он делал узкую работу в понятном процессе.

Второй успешный кейс был с вебинарами.

Люди записывались через форму, но доходило около 10%. Мы поставили агента, который звонил за 30, 10 или 5 минут до старта:

“Привет, у нас скоро начинается вебинар, приходите.”

Звучит тупо просто. Но люди реально отвечали “да, спасибо, сейчас зайду” и заходили. Доходимость выросла примерно до 30%, местами около x2.5.

Если человек спрашивал “а кто вы и что там будет?”, агент мог человеческим голосом нормально объяснить. Не идеально продавать, не вести сложную дискуссию, а просто закрыть пару типовых вопросов.

Почему это работало? Потому что задача была узкая:

  • понятная цель;

  • короткий разговор;

  • мало ветвлений;

  • простые исходы;

  • понятный критерий успеха.

Где у нас это не сработало

Холодный outbound нормально не взлетел.

Потому что холодный звонок - это открытый мир.

Там voicemail, IVR с клавиатурой, секретарь, гейткипер, другой бот, “перезвоните позже”, “отправьте на почту”, “я не принимаю такие решения”, “а кто вам дал мой номер”.

И на каждый такой кейс нужен не абзац в промпте, а отдельное поведение:

  • что считать voicemail;

  • когда класть трубку;

  • что делать с IVR;

  • как не застрять на секретаре;

  • когда просить правильный контакт;

  • когда предложить перезвонить;

  • когда отправлять follow-up;

  • когда перестать тратить деньги.

Плохая новость: все эти ветки легко нарисовать в голове.

Еще более плохая новость: в реальном звонке они будут смешиваться, ломаться, перебиваться и попадать в кривые транскрипты.

Почему готовые voice-agent платформы не просто “обертка над Twilio”

Можно ли собрать все самому?

Можно.

Но “самому” довольно быстро превращается не в один Twilio webhook, а в маленькую realtime-платформу.

Нужно думать про:

  • streaming STT;

  • streaming TTS;

  • interruption handling;

  • state machine;

  • tool orchestration;

  • latency budget;

  • post-call analysis;

  • лимиты длительности;

  • защиту от бесконечных звонков;

  • fallback-сценарии;

  • regression tests для промптов и тулов.

И вот поэтому Retell/ElevenLabs-подобные платформы привлекательны не только тем, что “умеют звонить”. Звонить как раз можно собрать.

Они привлекательны тем, что продуктово закрывают скучные куски, которые в проде оказываются не скучными, а критичными.

Например, interruption handling.

Если человек перебил агента, агент должен не просто продолжать договаривать свой старый ответ. Он должен понять, что его перебили, остановить текущий TTS, принять новый input и решить, остался ли он в той же стадии или надо перейти в другую.

Например, тесты.

Ты постоянно меняешь промпты, переходы, инструменты, формулировки. И очень легко сделать так, что один сценарий стал лучше, а другой, который раньше работал, внезапно отвалился.

Поэтому возможность сохранить диалог как тест - ожидали такой ответ, такой tool call, такой outcome - это не приятная мелочь. Это способ не развалить прод очередной правкой промпта.

Таблица граблей

Проблема

В чате

В звонке

Модель думает 5 секунд

Пользователь подождет

Пользователь говорит “алло?”

Большой промпт

Дороже и медленнее

Агент теряет цель разговора

Много tool calls

Терпимо

Длинные паузы и странный UX

Кривой input

Можно перечитать

Streaming transcript уже уехал в контекст

Бесконечный цикл

Плохой UX

Счет за телефонию и модели

Нет stop condition

Чат завис

Агент продолжает звонить

Нет regression tests

Сломали один сценарий

Сломали звонки живым людям

Что я бы проверял перед запуском

Если бы я сейчас запускал голосового агента, я бы начинал не с выбора модели и не со связки Twilio + ElevenLabs.

Я бы сначала ответил на такие вопросы:

  1. Из каких стадий состоит звонок?

  2. Какая цель у каждой стадии?

  3. Какие данные нужны модели именно на этой стадии?

  4. Какие инструменты доступны именно на этой стадии?

  5. Какие переходы разрешены?

  6. Какие переходы запрещены?

  7. Что считается успешным исходом?

  8. Что считается тупиком?

  9. Когда агент обязан завершить звонок?

  10. Что делать с voicemail?

  11. Что делать с IVR?

  12. Что делать, если человека перебили или он перебил агента?

  13. Какой latency budget допустим?

  14. Какие диалоги сохраняем как regression tests?

  15. Сколько денег можно сжечь до auto-stop?

Последний пункт не шутка.

“We need stop conditions” - “Best I can do is system prompt”

“We need stop conditions” - “Best I can do is system prompt”

Если агент может попасть в цикл, у него должен быть не только промпт “не попадай в цикл”, а технический лимит, который его остановит.

Вывод

Голосовые агенты уже могут звонить.

Это не самая интересная часть.

Интересная часть - сделать так, чтобы они:

  • отвечали быстро;

  • не теряли цель;

  • не тащили весь playbook в каждую реплику;

  • нормально переживали перебивания;

  • не путали voicemail с человеком;

  • не болтали с другим ботом полтора часа;

  • не ломались от каждой правки промпта;

  • и умели вовремя остановиться.

Поэтому начинать надо не с вопроса:

«Как склеить Twilio, ElevenLabs и OpenClaw?»

Начинать надо с другого:

«Из каких состояний состоит звонок, кто управляет переходами, и сколько стоит ошибка в каждом состоянии?»

Потому что позвонить агент уже может.

А вот вовремя заткнуться — это уже engineering.