Технологии

Что внутри голосового ИИ-агента Dialogist

Измеренные задержка, смена реплик, знания и тестирование.

Четверть секунды

От последнего слова звонящего до первого звука агента самому агенту нужно около четверти секунды.

≈ 0,27 с

232 мс, чтобы решить, что звонящий закончил, и ещё 35 мс до первого звука

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

Что мы измеряем

Отсчёт идёт от конца речи звонящего до первого звука ответа агента.

Решение, что звонящий закончил

Таймер тишины либо медлит, либо перебивает людей. Агент ждёт 192 мс, затем спрашивает у небольшой модели, закончено ли предложение. Модель отвечает примерно за 40 мс, поэтому реплика закрывается около 232 мс. Таймеру, который смотрит только на тишину, нужно 512 мс.

Начало ответа

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

Что остаётся после решения
ШагСтандартный режимРанний старт
Транскрипция (итоговый текст после паузы)0,5 мс0,5 мс
Первое предложение от языковой модели111 мс3 мс
Голос, до первого звука6 мс31 мс
От решения до первого звука117 мс35 мс

Транскрипция занимает 0,5 мс после решения, потому что распознавание идёт потоком, пока звонящий говорит, и делает пробный проход во время паузы. При раннем старте языковая модель начинает работу с этого пробного текста внутри паузы, поэтому после решения остаётся 3 мс её работы; в стандартном режиме все 111 мс приходятся на время после него. В нагрузочном тесте ранний запрос уходил до решения в 98% ответов, в среднем на 225 мс раньше при 50 разговорах и на 508 мс раньше при 128. Если звонящий продолжает говорить, агент отбрасывает подготовленный ответ и отвечает на всю фразу.

При 100 одновременных звонках на Server Unit тот же шаг занимает около 0,4 с в стандартном режиме и 0,25 с при раннем старте. Полная картина приведена в заметке о Server Unit. Server Unit под нагрузкой

  • 232 мсчтобы решить, что звонящий закончил (пауза 192 мс плюс 40 мс на модель); таймеру тишины нужно 512 мс
  • 35 мсот этого решения до первого звука при раннем старте; без него 117 мс
  • ≈ 0,3 сна каждой реплике звонящего возвращает в реальных звонках модель конца реплики, которая закрыла 87% реплик раньше срока

На 1468 репликах звонящих в реальных звонках модель конца реплики закрыла 87% реплик раньше срока, причём 95% из них при первой же проверке.

Куда ушли миллисекунды

Каждое изменение мы измеряли отдельно, прежде чем внедрить. Вместе они примерно вдвое увеличили число звонков, которое Server Unit несёт на уровне Standard.

  • выигрыш 89–235 мс

    Ранний старт

    Языковая модель начинает работу с распознанным текстом, пока агент ещё дожидается конца паузы. Выигрыш растёт с нагрузкой: 89 мс при одном звонке, 189 мс при 96 разговорах, 235 мс при 128.

  • 280 → 40 мс

    Тишина убрана из речи

    Синтезированные предложения начинаются с тишины; медиана в нашем кэше 280 мс. Агент обрезает её до 40 мс при воспроизведении клипа, и на линии ответ в одиночном звонке пошёл примерно на 200 мс раньше. Кэш хранит оригинал.

  • выигрыш ≈ 0,3 с

    Модель конца реплики

    После паузы в 192 мс небольшая модель по интонации определяет, закончена ли мысль. В реальных звонках она закрыла 87% реплик звонящих раньше срока и выждала 96% пауз посреди мысли. Сначала её можно запустить в режиме наблюдения, когда она только записывает, что сделала бы.

  • 94%

    Голосовой кэш

    Агент воспроизводит с диска фразы, которые уже говорил. Кэш переживает перезапуски, а в нерабочие часы агент перепроверяет кэшированные клипы, распознавая их, и заново генерирует те, что не прошли проверку.

  • Первое предложение идёт вне очереди

    Под нагрузкой начало ответа в одном звонке никогда не ждёт за хвостом ответа в другом. Пока играет первое предложение, агент синтезирует следующие.

  • Одни часы на все звонки

    Медиа всех звонков работает на одном общем такте в 20 мс вместо таймера на каждый звонок.

    Voicecore: медиабэкенд на Rust (EN)
  • 69 → 0,7 мкс

    Более дешёвые аудиокадры

    Передача кадра между телефонным стеком и агентом занимает меньше микросекунды вместо десятков.

    Voicecore: медиабэкенд на Rust (EN)

До и после: тот же стенд, 20-минутный одиночный звонок и 50 разговоров, агент для подбора персонала. Кэш: 64 192 фразы в нагрузочном тесте. Передача кадра: замер отдельно, на телефонной библиотеке.

Слушает, пока говорит

Канал звонящего остаётся открытым. Пока агент говорит, по нему работают детектор голоса и распознавание, и агент действует по услышанному.

  • Перебивания, которые что-то значат

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

  • Голос отступает

    Когда звонящий начинает говорить, голос агента затихает и глохнет: громкость падает, высоких частот становится меньше. Если звонящий говорит что-то существенное, агент замолкает. После «угу» или кашля он возвращается: с ближайшей границы слога, с начала предложения или с того же места. Настраивается для каждого агента.

  • «Угу» в паузах

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

  • Говорит, когда не уверен

    Уверенность распознавания попадает в промпт агента. Агент видит, что транскрипция ненадёжна, и просит звонящего повторить, а не гадает имя или номер.

  • Тишина без неловкости

    Повторный вопрос, затем прощание; время отсчитывается от настоящего конца воспроизведения, а не от конца синтеза.

  • Комната вокруг голоса

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

  • Агент генерирует приветствие во время задержки на дозвон и передаёт его потоком, предложение за предложением.
  • Широкополосный G.722 там, где его поддерживает другая сторона. Сглаженная регулировка усиления подняла отношение сигнал/шум с 23 до 28,7 дБ на 11 размеченных реальных звонках.
  • «Угу» самого агента может вернуться эхом по линии из трубки звонящего. Распознавание убирает его из транскрипции, а агент не включает подтверждения в историю разговора.

Слушает, пока говорит: полная заметка

Голоса в потоке, ваши названия

Клонируйте голос или выберите из каталога и научите его произносить ваши названия.

  • Клонирование голоса

    Новый голос по образцу в 10–30 секунд и его расшифровке.

  • Словари произношения

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

  • Один голос на агента

    Из каталога или клонированный, с заданной вами скоростью.

  • Потоковый синтез

    Предложение за предложением: следующее готово до того, как закончится первое.

Atlas

Ваши документы, поиск в пределах бюджета задержки.

RAGKnowledge Hub

Atlas — наш центр знаний. Вы подключаете агента к одной или нескольким базам знаний, а Atlas возвращает фрагменты, которые отвечают на вопрос.

  • Поиск перед каждым ответом

    Быстрый поиск занимает около 150 мс на сервере. Если он не вернулся за 400 мс, агент отвечает без него.

  • Более глубокий поиск по запросу

    На сложные вопросы модель сама запрашивает более полный поиск. Он занимает от 0,7 до 1,2 с, и пока агент ждёт, он произносит заполняющую фразу, чтобы на линии не было тишины.

  • Гибридный поиск

    Поиск по смыслу и по ключевым словам, объединённый, в глубоком режиме с ранжировщиком.

  • Любой формат

    PDF, файлы Office, таблицы, веб-страницы и сканы с OCR. Atlas обходит источники заново по расписанию.

  • Видно, почему

    В Prompt Studio для каждого ответа видно, в каких базах знаний искал агент и что вернулось.

  • ≈ 150 мсбыстрый поиск, на стороне сервера
  • 0,7–1,2 сболее глубокий поиск
  • 400 мсбюджет, после которого агент продолжает без него

Тестовая область Atlas: от 144 до 156 мс на стороне сервера в быстром режиме; от 636 до 1090 мс в глубоком режиме, от 0,73 до 1,20 с по часам.

Polygon

Тестовый стенд для голосовых агентов. Он имитирует звонящих, оценивает каждый разговор и показывает, где две версии агента начинают различаться. В тарифе Pro это симуляция диалогов.

  1. Сценарий
  2. Имитируемый звонящий
  3. Разговор
  4. Детерминированные проверки
  5. Судья
  6. Пробы поведения
  7. Сравнение

Одна оценка, восемь критериев

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

  1. Выполнение цели25
  2. Следование инструкциям15
  3. Качество работы с инструментами15
  4. Фактическая точность10
  5. Качество диалога10
  6. Устойчивость10
  7. Соблюдение требований безопасности10
  8. Образ и тон5

От 0 до 100: зачёт от 75, предупреждение от 50

Провал при любой оценке

  • Запрещённая фраза в речи агента
  • Нарушение безопасности
  • Некорректный вызов инструмента, о котором узнал звонящий

Где две версии расходятся

  1. ЗвонящийМне нужно перенести запись.

    Версия A: Конечно. Назовите номер вашей записи.

    Версия B: Конечно. Назовите номер вашей записи.

  2. ЗвонящийЧетыре четыре один семь.

    Версия A: Спасибо. Четверг в десять или пятница в два?

    Версия B: Спасибо. Четверг в десять или пятница в два?

  3. Точка расхождения · реплика 3

    ЗвонящийПятница.

    Версия A: Готово: пятница, в два. Вам придёт SMS.

    Версия B: Извините, повторите, пожалуйста, номер?

Иллюстрация: один и тот же имитируемый звонящий и две версии агента. Polygon выравнивает разговоры по репликам и отмечает первую реплику, где они различаются.

  1. Звонящие, которые возражают

    Имитируемые звонящие с известной истиной
    Шесть типов звонящих (сотрудничающий, занятой, недоверчивый, растерянный, агрессивный, болтливый), четыре ожидаемых исхода и пять уровней сложности. У каждого звонящего свои факты, поэтому судья знает, достиг ли агент цели и не выдумал ли что-нибудь.
    Создаются по вашему агенту
    Polygon пишет звонящих по промпту самого агента и пересоздаёт их при изменении промпта.
    Жёсткая линия намеренно
    Шум распознавания (пропущенные слова, цифры по одной, созвучные слова), медленные или отказывающие инструменты, звонящие, которые перебивают и уходят в сторону. С фиксированным зерном, поэтому проваленный разговор воспроизводится реплика в реплику.
  2. Оценка, у которой есть смысл

    Восемь критериев с весами для телефонного агента
    Достижение цели весит в пять раз больше, чем тон. Оценка от 0 до 100: зачёт, предупреждение или провал.
    Жёсткие условия
    Запрещённая фраза, нарушение безопасности или некорректный вызов инструмента, о котором узнал звонящий, проваливают разговор при любой оценке.
    Судья, который не гадает
    Судья цитирует из расшифровки доказательства для каждой оценки, повторные прогоны объединяются по медиане, а непоставленная оценка по критерию считается минимальной.
  3. Поведение, по одному вопросу

    Пробы
    Проверки «да/нет», например «переспросил ли агент после странного ответа?», с 95-процентным доверительным интервалом, чтобы никто не принял «3 из 4» за 75%.
    Детерминированные метрики
    Считаются по каждой расшифровке, с определением зацикливания, которое завершает разговор, идущий по кругу.
  4. Две версии рядом

    Матрица «сценарий × версия»
    Отсортирована по тому, где версии расходятся сильнее всего.
    Точка расхождения
    Первая реплика, в которой два разговора расходятся, с расшифровками, выровненными рядом.
    Перебор параметров
    По моделям и настройкам, по одному фактору, по сетке или случайно, с ранжированием по оценке, затем по стабильности, затем по скорости.
  5. До первого звонка и после последнего

    Анализ промпта
    Ещё до запуска любого разговора Polygon читает промпт и подсвечивает перегруженные инструкции, спрятанные правила, противоречия, неоднозначность и повторы.
    Реальные звонки
    Импортируйте расшифровки из продакшена и оценивайте их по тем же критериям и пробам, чтобы увидеть, лучше ли новая версия справляется со звонками прошлого месяца.
    Хранится каждая версия
    Промпты, звонящие, заглушки инструментов, критерии и пробы хранятся как неизменяемые версии, которые можно сравнивать.
  • 8оцениваемых критериев
  • 3жёстких условия
  • 6типов звонящих
  • 5уровней сложности

Собственная инфраструктура

Наши собственные модели и модели с открытыми весами на серверах, которые мы эксплуатируем в ЕС, или на ваших. Ни звук, ни текст звонков не уходит стороннему поставщику ИИ.

Языковая модель
Языковая модель с открытыми весами на наших собственных GPU
Распознавание речи
Oasis Speech, наш собственный сервис распознавания; понимает 48 языков → Oasis Speech 2
Синтез речи
Потоковые нейросетевые голоса: стандартные или клонированные по вашему образцу
Смена реплик
Детектор голосовой активности и модель конца реплики
Знания
Atlas, наш центр знаний, с эмбеддингами и ранжировщиком
Тестирование
Polygon, наш стенд для тестирования разговоров → Как мы оцениваем разговор
Обучение
Cadence, рабочая среда, в которой мы обучаем Oasis Speech. Публичный репозиторий — форк нашей производственной системы под лицензией MIT → Cadence
Телефония
SIP с G.722 и G.711, на телефонии Incoplax

В варианте on-premise весь стек устанавливается на ваши серверы через Docker, при необходимости офлайн. Server Unit обслуживает 100 одновременных звонков, и мы проверили его нагрузкой до 176% от этого значения. Server Unit под нагрузкой

100 звонков на Server Unit, проверено нагрузкой до 176%

Server Unit несёт весь голосовой стек до 100 одновременных звонков. Мы повышали нагрузку от одного звонка до 176% номинальной ёмкости и следили за временем ответа, долей обработанных реплик и самими звонками. Затем мы оптимизировали стек под высокую нагрузку и повторили тест: ёмкость на уровне Standard выросла примерно вдвое, а на верхней ступени все звонки соединились и ни один не оборвался.

Измерено на одном Server Unit.

Server Unit под нагрузкой

В цифрах

Измерено на стенде нагрузочного тестирования с агентом для подбора персонала, если не указано иное.

  • ≈ 0,27 ссобственное время агента от последнего слова звонящего до первого звука
  • 35 мсот решения, что звонящий закончил, до первого звука, с ранним стартом
  • 96%реплик имеют готовый распознанный текст в пределах 10 мс от этого решения
  • ≈ 100 мсдо первого звука заново синтезированного предложения (медиана)
  • ≈ 1 мсна воспроизведение фразы, которая уже есть в голосовом кэше
  • 5–8×быстрее реального времени: так быстро синтезируется голос
  • 94%первых фраз берутся из голосового кэша
  • 98%ответов запускают языковую модель до конца паузы
  • > 99%реплик звонящих получили ответ при 176% номинальной ёмкости
  • ≈ 150 мсна быстрый поиск по знаниям на сервере

Готовность распознавания: от 96 до 97% из 58 000 реплик при всех нагрузках. Скорость голоса: медиана от 5,0 до 6,5× на разных уровнях нагрузки, только промахи кэша. Первый звук нового предложения: медиана от 76 до 106 мс на разных уровнях нагрузки.

Следующий шаг

Услышьте эту четверть секунды сами: на главной странице есть живой звонок с одним из наших агентов.

Попробовать вживую

Лист ожидания

Мы подключаем команды постепенно. Напишем вам, когда подойдёт ваша очередь.