[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-\u002Fru\u002Fblog\u002Fvoix-temps-reel-vs-batch":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"date":11,"tags":12,"body":16,"_type":513,"_id":514,"_source":515,"_file":516,"_stem":517,"_extension":518},"\u002Fru\u002Fblog\u002Fvoix-temps-reel-vs-batch","blog",false,"","ИИ-агент по телефону: реальное время или пакет?","Почему голосовой ассистент требует принципиально иной архитектуры, чем текстовый чат-бот, и что это означает для задержки, barge-in и выбора модели.","Équipe betool","2026-04-28",[13,14,15],"voice","architecture","latency",{"type":17,"children":18,"toc":504},"root",[19,40,45,52,71,84,89,95,105,124,129,200,205,210,244,250,262,274,285,308,313,319,324,329,382,388,393,436,441,447,452,492],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24,27,33,35],{"type":25,"value":26},"text","Когда поставщик предлагает вам ",{"type":20,"tag":28,"props":29,"children":30},"em",{},[31],{"type":25,"value":32},"«телефонного ИИ-агента»",{"type":25,"value":34},", задайте ему один вопрос: ",{"type":20,"tag":28,"props":36,"children":37},{},[38],{"type":25,"value":39},"«Какова ваша сквозная задержка между окончанием речи пользователя и началом ответа?»",{"type":20,"tag":21,"props":41,"children":42},{},[43],{"type":25,"value":44},"Если ответ превышает 1,5 секунды — это не телефонный агент. Это чат-бот с приклеенным спереди модулем ASR \u002F TTS.",{"type":20,"tag":46,"props":47,"children":49},"h2",{"id":48},"правило-800-мс",[50],{"type":25,"value":51},"Правило 800 мс",{"type":20,"tag":21,"props":53,"children":54},{},[55,57,62,64,69],{"type":25,"value":56},"Человек по телефону терпит паузу после своего вопроса. Но у этой паузы есть порог: свыше 800 мс собеседник кажется ",{"type":20,"tag":28,"props":58,"children":59},{},[60],{"type":25,"value":61},"«зависшим»",{"type":25,"value":63},". На 1 500 мс звонящий говорит ",{"type":20,"tag":28,"props":65,"children":66},{},[67],{"type":25,"value":68},"«алло?»",{"type":25,"value":70},". На 3 000 мс он вешает трубку, решив, что проблема со связью.",{"type":20,"tag":21,"props":72,"children":73},{},[74,76,82],{"type":25,"value":75},"Целевой показатель для серьёзного голосового агента, таким образом: ",{"type":20,"tag":77,"props":78,"children":79},"strong",{},[80],{"type":25,"value":81},"менее 800 мс",{"type":25,"value":83}," между окончанием речи и первым слышимым байтом ответа.",{"type":20,"tag":21,"props":85,"children":86},{},[87],{"type":25,"value":88},"Разложим это на составляющие.",{"type":20,"tag":46,"props":90,"children":92},{"id":91},"бюджет-времени-в-деталях",[93],{"type":25,"value":94},"Бюджет времени в деталях",{"type":20,"tag":96,"props":97,"children":99},"pre",{"code":98},"[речь пользователя]──▶[ASR streaming]──▶[LLM]──▶[TTS streaming]──▶[аудио на выход]\n      ~150ms                ~80ms        ~?       ~250ms                ~50ms\n",[100],{"type":20,"tag":101,"props":102,"children":103},"code",{"__ignoreMap":7},[104],{"type":25,"value":98},{"type":20,"tag":21,"props":106,"children":107},{},[108,110,115,117,122],{"type":25,"value":109},"Из ~800 мс доступного времени ",{"type":20,"tag":77,"props":111,"children":112},{},[113],{"type":25,"value":114},"около 270 мс расходуется на ASR + TTS + транспорт",{"type":25,"value":116},". Остаётся ",{"type":20,"tag":77,"props":118,"children":119},{},[120],{"type":25,"value":121},"530 мс для LLM",{"type":25,"value":123}," — включая время prefill, рассуждения и генерацию первого токена.",{"type":20,"tag":21,"props":125,"children":126},{},[127],{"type":25,"value":128},"Следствия:",{"type":20,"tag":130,"props":131,"children":132},"ul",{},[133,151,167,183],{"type":20,"tag":134,"props":135,"children":136},"li",{},[137,142,144,149],{"type":20,"tag":77,"props":138,"children":139},{},[140],{"type":25,"value":141},"Большая модель рассуждений без стриминга",{"type":25,"value":143},": несколько секунд до первого слышимого слова. ",{"type":20,"tag":77,"props":145,"children":146},{},[147],{"type":25,"value":148},"Исключено",{"type":25,"value":150},".",{"type":20,"tag":134,"props":152,"children":153},{},[154,159,161,166],{"type":20,"tag":77,"props":155,"children":156},{},[157],{"type":25,"value":158},"Модель высшего класса со стримингом",{"type":25,"value":160},": быстрый первый токен в удачные дни, гораздо медленнее в неудачные. ",{"type":20,"tag":77,"props":162,"children":163},{},[164],{"type":25,"value":165},"Приемлемо, но впритык",{"type":25,"value":150},{"type":20,"tag":134,"props":168,"children":169},{},[170,175,177,182],{"type":20,"tag":77,"props":171,"children":172},{},[173],{"type":25,"value":174},"Быстрая модель со стримингом",{"type":25,"value":176}," («лёгкие» линейки Claude, GPT и Gemini): ",{"type":20,"tag":77,"props":178,"children":179},{},[180],{"type":25,"value":181},"Комфортно",{"type":25,"value":150},{"type":20,"tag":134,"props":184,"children":185},{},[186,191,193,198],{"type":20,"tag":77,"props":187,"children":188},{},[189],{"type":25,"value":190},"Небольшая модель open-weight на вашем GPU (vLLM)",{"type":25,"value":192},": ",{"type":20,"tag":77,"props":194,"children":195},{},[196],{"type":25,"value":197},"Отлично",{"type":25,"value":199}," (и приватно).",{"type":20,"tag":21,"props":201,"children":202},{},[203],{"type":25,"value":204},"Измеряйте TTFT на собственном трафике: он зависит от поставщика, региона и времени суток.",{"type":20,"tag":21,"props":206,"children":207},{},[208],{"type":25,"value":209},"Серьёзная голосовая архитектура, следовательно, требует:",{"type":20,"tag":211,"props":212,"children":213},"ol",{},[214,224,234],{"type":20,"tag":134,"props":215,"children":216},{},[217,222],{"type":20,"tag":77,"props":218,"children":219},{},[220],{"type":25,"value":221},"Всё в режиме стриминга",{"type":25,"value":223}," — ASR, LLM, TTS. Ни одного звена в пакетном режиме.",{"type":20,"tag":134,"props":225,"children":226},{},[227,232],{"type":20,"tag":77,"props":228,"children":229},{},[230],{"type":25,"value":231},"Модель LLM выбирается по TTFT",{"type":25,"value":233}," (time to first token), а не по баллу MMLU.",{"type":20,"tag":134,"props":235,"children":236},{},[237,242],{"type":20,"tag":77,"props":238,"children":239},{},[240],{"type":25,"value":241},"TTS начинает говорить на первом полученном токене",{"type":25,"value":243},", а не после завершения полного ответа.",{"type":20,"tag":46,"props":245,"children":247},{"id":246},"barge-in",[248],{"type":25,"value":249},"Barge-in",{"type":20,"tag":21,"props":251,"children":252},{},[253,255,260],{"type":25,"value":254},"В текстовом канале пользователь ждёт, пока бот закончит. По телефону ",{"type":20,"tag":77,"props":256,"children":257},{},[258],{"type":25,"value":259},"он перебивает",{"type":25,"value":261},". Три раза из пяти в естественных разговорах.",{"type":20,"tag":21,"props":263,"children":264},{},[265,267,272],{"type":25,"value":266},"Голосовой агент, который не умеет обрабатывать прерывание, кажется ",{"type":20,"tag":28,"props":268,"children":269},{},[270],{"type":25,"value":271},"«роботизированным»",{"type":25,"value":273}," — он продолжает говорить, пока пользователь пытается его перебить. Это невыносимо и сразу же выдаёт плохо построенного бота.",{"type":20,"tag":21,"props":275,"children":276},{},[277,279,283],{"type":25,"value":278},"Технически ",{"type":20,"tag":77,"props":280,"children":281},{},[282],{"type":25,"value":246},{"type":25,"value":284}," требует:",{"type":20,"tag":130,"props":286,"children":287},{},[288,293,298,303],{"type":20,"tag":134,"props":289,"children":290},{},[291],{"type":25,"value":292},"TTS немедленно останавливается, когда ASR обнаруживает исходящий голосовой сигнал от пользователя.",{"type":20,"tag":134,"props":294,"children":295},{},[296],{"type":25,"value":297},"LLM отбрасывает незавершённый ответ (без возражений).",{"type":20,"tag":134,"props":299,"children":300},{},[301],{"type":25,"value":302},"Буфер исходящего аудио мгновенно очищается (иначе слышен остаточный полуслог).",{"type":20,"tag":134,"props":304,"children":305},{},[306],{"type":25,"value":307},"История разговора отмечает, что ответ не был услышан полностью, — чтобы случайно не повторить его.",{"type":20,"tag":21,"props":309,"children":310},{},[311],{"type":25,"value":312},"Это техническая деталь, которая меняет всё в ощущении от взаимодействия.",{"type":20,"tag":46,"props":314,"children":316},{"id":315},"работа-с-неопределённостью",[317],{"type":25,"value":318},"Работа с неопределённостью",{"type":20,"tag":21,"props":320,"children":321},{},[322],{"type":25,"value":323},"По телефону ASR регулярно ошибается. Там, где текстовый чат-бот всегда получает точный текст, набранный пользователем, голосовой агент получает часто несовершенную транскрипцию.",{"type":20,"tag":21,"props":325,"children":326},{},[327],{"type":25,"value":328},"Работающие стратегии:",{"type":20,"tag":130,"props":330,"children":331},{},[332,342,366],{"type":20,"tag":134,"props":333,"children":334},{},[335,340],{"type":20,"tag":77,"props":336,"children":337},{},[338],{"type":25,"value":339},"Запрашивать подтверждение",{"type":25,"value":341}," по критичным позициям (номер дела, сумма, необычная фамилия). Не систематически — это становится невыносимым.",{"type":20,"tag":134,"props":343,"children":344},{},[345,350,352,357,359,364],{"type":20,"tag":77,"props":346,"children":347},{},[348],{"type":25,"value":349},"Не доверять LLM слепо",{"type":25,"value":351},", когда ASR неоднозначен. Если полученная фраза — ",{"type":20,"tag":28,"props":353,"children":354},{},[355],{"type":25,"value":356},"«Я хочу расторгнуть договор»",{"type":25,"value":358}," с низким показателем уверенности, лучше спросить ",{"type":20,"tag":28,"props":360,"children":361},{},[362],{"type":25,"value":363},"«Вы имели в виду расторгнуть ваш договор?»",{"type":25,"value":365},", чем запускать процедуру расторжения.",{"type":20,"tag":134,"props":367,"children":368},{},[369,374,376,381],{"type":20,"tag":77,"props":370,"children":371},{},[372],{"type":25,"value":373},"Пресекать отклонения",{"type":25,"value":375}," — агента, уходящего от сценария, следует возвращать узлом condition \u002F operator, а не промптом, которого ",{"type":20,"tag":28,"props":377,"children":378},{},[379],{"type":25,"value":380},"«должно хватить»",{"type":25,"value":150},{"type":20,"tag":46,"props":383,"children":385},{"id":384},"телефон-это-тоже-стек",[386],{"type":25,"value":387},"Телефон — это тоже стек",{"type":20,"tag":21,"props":389,"children":390},{},[391],{"type":25,"value":392},"Помимо ИИ, телефонный агент требует:",{"type":20,"tag":130,"props":394,"children":395},{},[396,406,416,426],{"type":20,"tag":134,"props":397,"children":398},{},[399,404],{"type":20,"tag":77,"props":400,"children":401},{},[402],{"type":25,"value":403},"SIP-транка",{"type":25,"value":405}," от оператора связи (Twilio, Voxbone, OVH, Sewan…).",{"type":20,"tag":134,"props":407,"children":408},{},[409,414],{"type":20,"tag":77,"props":410,"children":411},{},[412],{"type":25,"value":413},"Медиашлюза",{"type":25,"value":415}," (LiveKit-SIP, FreeSWITCH, Asterisk), который говорит на SIP со стороны оператора и на WebRTC со стороны платформы.",{"type":20,"tag":134,"props":417,"children":418},{},[419,424],{"type":20,"tag":77,"props":420,"children":421},{},[422],{"type":25,"value":423},"Транскрайбера",{"type":25,"value":425},", устойчивого к шуму, акцентам и перекрывающимся голосам.",{"type":20,"tag":134,"props":427,"children":428},{},[429,434],{"type":20,"tag":77,"props":430,"children":431},{},[432],{"type":25,"value":433},"Синтезатора",{"type":25,"value":435},", корректно произносящего имена собственные, числа и даты.",{"type":20,"tag":21,"props":437,"children":438},{},[439],{"type":25,"value":440},"Ни один из этих элементов не тривиален. Все они взаимодействуют между собой.",{"type":20,"tag":46,"props":442,"children":444},{"id":443},"что-берёт-на-себя-betool",[445],{"type":25,"value":446},"Что берёт на себя betool",{"type":20,"tag":21,"props":448,"children":449},{},[450],{"type":25,"value":451},"Голосовая архитектура betool — LiveKit + LiveKit-SIP + выделенный worker + потоковый LLM, передающий текст в синтез речи — покрывает вышеперечисленные требования из коробки. Вы сохраняете контроль над:",{"type":20,"tag":130,"props":453,"children":454},{},[455,465,482],{"type":20,"tag":134,"props":456,"children":457},{},[458,463],{"type":20,"tag":77,"props":459,"children":460},{},[461],{"type":25,"value":462},"SIP-транком",{"type":25,"value":464}," (ваш оператор, ваши номера).",{"type":20,"tag":134,"props":466,"children":467},{},[468,473,475,480],{"type":20,"tag":77,"props":469,"children":470},{},[471],{"type":25,"value":472},"Моделями",{"type":25,"value":474}," (управляемые модели, BYOK или приватные модели) и ",{"type":20,"tag":77,"props":476,"children":477},{},[478],{"type":25,"value":479},"голосами",{"type":25,"value":481}," (транскрипция Deepgram или faster-whisper; синтез ElevenLabs, Cartesia, OpenAI или Deepgram Aura).",{"type":20,"tag":134,"props":483,"children":484},{},[485,490],{"type":20,"tag":77,"props":486,"children":487},{},[488],{"type":25,"value":489},"Параметрами",{"type":25,"value":491}," (чувствительность barge-in, определение конца хода, фразы ожидания, перевод на человека).",{"type":20,"tag":21,"props":493,"children":494},{},[495,497,502],{"type":25,"value":496},"Вы не настраиваете сантехнику реального времени — это задача платформы. Вы проектируете ",{"type":20,"tag":77,"props":498,"children":499},{},[500],{"type":25,"value":501},"разговор",{"type":25,"value":503},", что и является настоящей бизнес-задачей.",{"title":7,"searchDepth":505,"depth":505,"links":506},2,[507,508,509,510,511,512],{"id":48,"depth":505,"text":51},{"id":91,"depth":505,"text":94},{"id":246,"depth":505,"text":249},{"id":315,"depth":505,"text":318},{"id":384,"depth":505,"text":387},{"id":443,"depth":505,"text":446},"markdown","content:ru:blog:2.voix-temps-reel-vs-batch.md","content","ru\u002Fblog\u002F2.voix-temps-reel-vs-batch.md","ru\u002Fblog\u002F2.voix-temps-reel-vs-batch","md"]