Разработка Voice AI Agent для обработки звонков

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Разработка Voice AI Agent для обработки звонков
Сложный
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Разработка Voice AI Agent для обработки звонков

Ручная обработка повторяющихся звонков — проверка статуса заказа, запись на приём, перенос доставки — забивает каналы и увеличивает AHT до 8 минут. Операторы выгорают, клиенты уходят к конкурентам после 3 минут ожидания. Voice AI Agent берёт на себя до 80% таких диалогов, работая в реальном времени с LLM, STT/TTS и инструментами.

Мы создаём голосового ассистента, который ведёт полноценные переговоры: понимает контекст, задаёт уточняющие вопросы, принимает решения, вызывает CRM и базы данных, завершает диалог результатом. Наш опыт — 5+ лет в NLP и более 30 внедрений в ритейле, логистике и телемедицине.

Главная боль бизнеса — низкая пропускная способность колл-центра в пиковые часы. Voice AI Agent обрабатывает звонки без участия человека, сокращая нагрузку на операторов и уменьшая время ожидания клиента. При этом диалоговая система не следует жёсткому скрипту, а адаптируется к запросу: например, при звонке о задержке доставки агент проверит статус в CRM, предложит перенести дату и создаст задачу курьеру — всё в одном разговоре. В результате Containment Rate вырастает с типичных 20–30% до 55–65%, а среднее время обработки сокращается на 60%.

В одном из проектов для логистической компании агент обрабатывал 1500 звонков в день, из которых 68% завершились без переключения на оператора, а среднее время обработки сократилось с 6 до 2 минут. Средняя экономия на одном звонке достигает ₽35, а при нагрузке 10 000 звонков в месяц — ₽350 000 по сравнению с традиционным контакт-центром.

Архитектура Voice AI Agent

Telephony (Twilio/Voximplant)
         ↓
   WebSocket Bridge
         ↓
   STT (Deepgram/Whisper)
         ↓
   Conversation Manager
    ├── State Machine
    ├── LLM (GPT-4o)
    ├── Tool Registry (CRM, DB, APIs)
    └── Context Window
         ↓
   TTS (ElevenLabs/OpenAI)
         ↓
   Audio Back to Call
Детали компонентовWebSocket Bridge конвертирует аудиопоток в текст и обратно, поддерживая до 100 одновременных звонков на одной инстанции. Conversation Manager управляет state machine с переходами на основе интентов, а Tool Registry регистрирует внешние функции, доступные LLM для вызова.

Почему GPT-4o, а не открытая модель?

GPT-4 обеспечивает естественность диалога и низкий уровень галлюцинаций. При тестах на наборе из 500 звонков она показала Containment Rate на 18% выше, чем LLaMA 3. Для сценариев с высокой вариативностью запросов (например, техподдержка) это критично. Открытые модели уместны для узких сценариев с жёстким скриптом — тогда используем fine-tuned Mistral или Qwen с квантизацией INT4. По нашим замерам, GPT-4o лучше open-source моделей в сценариях с нестандартными запросами — False Transfer Rate ниже в 2 раза.

Как мы реализуем интеграцию с телефонией?

Базовый связующий слой — WebSocket Bridge между провайдером телефонии (Twilio/Voximplant) и Conversation Manager. На этом этапе происходит конвертация аудиопотока в текст (STT) и обратно. Пример интеграции с Twilio:

from twilio.rest import Client
from twilio.twiml.voice_response import VoiceResponse, Start, Stream

twilio_client = Client(TWILIO_SID, TWILIO_AUTH)

def handle_incoming_call(call_sid: str, ws_url: str) -> str:
    response = VoiceResponse()
    start = Start()
    start.stream(url=f'wss://api.example.com/stream/{call_sid}')
    response.append(start)
    response.say("Добро пожаловать! Как я могу помочь?",
                  voice="alice", language="ru-RU")
    response.pause(length=60)
    return str(response)

Conversation Manager с инструментами

Это сердце агента. Он управляет состоянием диалога, вызывает LLM и выполняет внешние инструменты по запросу модели. Пример реализации на Python:

from openai import AsyncOpenAI
from dataclasses import dataclass, field
import json

client = AsyncOpenAI()

@dataclass
class AgentState:
    call_id: str
    history: list = field(default_factory=list)
    collected_data: dict = field(default_factory=dict)
    current_intent: str = None

class VoiceAgent:
    def __init__(self):
        self.tools = [
            {
                "type": "function",
                "function": {
                    "name": "lookup_order",
                    "description": "Найти заказ клиента по номеру телефона или ID заказа",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "phone": {"type": "string"},
                            "order_id": {"type": "string"}
                        }
                    }
                }
            },
            {
                "type": "function",
                "function": {
                    "name": "reschedule_delivery",
                    "description": "Перенести доставку на другую дату",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "order_id": {"type": "string"},
                            "new_date": {"type": "string", "description": "YYYY-MM-DD"}
                        },
                        "required": ["order_id", "new_date"]
                    }
                }
            }
        ]

    async def process_turn(self, state: AgentState, user_text: str) -> str:
        state.history.append({"role": "user", "content": user_text})

        response = await client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": self._get_system_prompt()},
                *state.history
            ],
            tools=self.tools,
            tool_choice="auto"
        )

        message = response.choices[0].message

        # Обработка function calls
        if message.tool_calls:
            tool_results = await self._execute_tools(message.tool_calls)
            state.history.append(message)
            state.history.extend(tool_results)

            # Повторный вызов для финального ответа
            final = await client.chat.completions.create(
                model="gpt-4o",
                messages=[{"role": "system", "content": self._get_system_prompt()}]
                          + state.history
            )
            reply = final.choices[0].message.content
        else:
            reply = message.content

        state.history.append({"role": "assistant", "content": reply})
        return reply

Какие бизнес-метрики улучшает агент?

Метрика Типичный контакт-центр С Voice AI Agent Улучшение
Containment Rate 20–30% 55–65% +35%
Среднее время обработки (AHT) 5–8 мин 2–3 мин -60%
Стоимость звонка ₽30–50 ₽5–10 -80%
Ошибки при сборе данных 5–8% <2% -75%

Сравнение моделей для разных сценариев

Модель Применение Латенция (p95) Containment
GPT-4o Техподдержка, сложные контексты <1.5 сек 65%
Mistral fine-tune Узкие сценарии (запись, статус) <0.8 сек 55%
Qwen INT4 Высоконагруженные кампании <0.5 сек 50%

Процесс работы

  1. Анализ сценариев: собираем типовые диалоги, определяем до 5 ключевых сценариев (запись, статус заказа, перенос, жалоба, консультация).
  2. Проектирование диалога: создаём state machine, прописываем переходы и требуемые инструменты.
  3. Реализация: пишем код агента, интеграцию с телефонией и CRM, настраиваем модели.
  4. Тестирование: прогоняем 100+ тестовых звонков, измеряем TCR, Containment, False Transfer.
  5. Запуск: развёртывание на production, настройка мониторинга (Weights & Biases, MLflow).

Что входит в работу

  • Документация архитектуры и API агента
  • Исходный код с комментариями (репозиторий Git)
  • Доступ к дашборду мониторинга метрик
  • Обучение команды клиента (2–3 сессии по 1 часу)
  • Поддержка в течение 1 месяца после запуска

Сроки и как начать

MVP агента с базовыми сценариями — 3–4 недели. Production-система с мониторингом — 2–3 месяца. Стоимость рассчитывается индивидуально в зависимости от количества сценариев и интеграций. Получите оценку вашего сценария — пришлём план внедрения в течение 2 рабочих дней. Закажите демонстрацию агента на ваших данных. Свяжитесь с нами для технического аудита ваших сценариев.

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный ASR (Google Speech-to-Text) выдаёт WER 28% на отраслевой лексике и стоит ощутимо дорого при таких объёмах. Задача — снизить WER ниже 10% и перейти на self-hosted инференс.

Типовые проблемы, с которыми приходят

WER не сходится к нужной метрике. Чаще всего виновата не архитектура, а данные: шумные аудио без нормализации уровня (-23 LUFS вместо стандарта), смешанные языки в одном канале, акцент, специфическая доменная лексика. Whisper large-v3 из коробки даёт WER 8–12% на чистом русском и проваливается до 25–35% на записях с PSTN-артефактами и узкополосным кодеком G.711.

Диаризация ломается при больше двух спикеров. pyannote/speaker-diarization-3.1 работает стабильно при 2–3 говорящих, но DER (Diarization Error Rate) растёт с 6% до 18–22% при 5+ участниках конференции. Проблема усугубляется перекрёстными репликами: по умолчанию min_duration_on=0.1 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 12 000 звонков/день. Исходный WER на русском с банковской лексикой — 22% (Google STT). После fine-tuning whisper-medium на 200 часах размеченных записей через Hugging Face transformers + Seq2SeqTrainer с learning_rate=1e-5, warmup_steps=500 — WER упал до 7.3%. Инференс на одной A10G через faster-whisper с compute_type=float16 обрабатывает 40-минутный звонок за 55 секунд. Итоговая стоимость инференса — $0.0008/мин против $0.016/мин у облачного провайдера.

Дообучение Whisper на доменных данных

Когда общая модель не справляется, fine-tuning — первый инструмент. Минимальный датасет для заметного улучшения — 20–30 часов размеченного аудио в целевом домене. Разметку можно получить через итеративный процесс: прогнать через базовую модель → вручную исправить 10–15% ошибок → переобучить → повторить.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

Важно: при fine-tuning Whisper нужно замораживать encoder первые 1000 шагов (model.freeze_encoder()), иначе акустические признаки разъедутся раньше, чем decoder адаптируется к новой лексике.

Синтез речи: выбор под задачу

Модель Латентность (TTFB) Натуральность MOS Клонирование Языки
XTTS v2 1.2–2.0 с 4.1–4.3 Да, 3 с референса 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Да, требует адаптации en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Нет en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Нет ru, en, de, и др.
Edge-TTS ~0.4 с (cloud) 4.0 Нет 100+

Для интерактивных ботов с требованием TTFB < 300 мс — Silero или Kokoro. Для озвучки контента, где важна натуральность — XTTS v2 с потоковой отдачей через WebSocket.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.