Внедрение платформы Retell AI для голосовых AI-агентов

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

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

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

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

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

Отметим: когда заказчик просит голосового агента, который не тупит на паузах и не ждёт три секунды перед ответом — стандартные IVR решения отпадают. Мы столкнулись с этим в проекте для финтех-компании: требовалось обрабатывать 500+ звонков в час с минимальной задержкой и возможностью прерывания. Retell AI оказался единственной платформой, где latency остаётся ниже 800 мс даже при кастомной LLM-логике. Мы внедрили его под ключ: настроили WebSocket стриминг, stateful-диалоги и интеграцию с CRM. Ниже — детали, как это работает и какие проблемы решает.

Проблемы, которые мы решаем

Разработка production-grade голосовых агентов — это не только про ASR и TTS. Основные технические сложности:

  • Высокая задержка (latency): готовые решения вроде VAPI или Play.ht дают 1.5–3 секунды, что убивает конверсию. Retell с WebSocket стримингом укладывается в 500–800 мс, а с настройками streaming буферизации — ещё быстрее.
  • Управление состоянием диалога: многоходовые сценарии (квалификация лида, запись на встречу, оплата) требуют хранения контекста. Retell позволяет держать stateful-сессию на вашем сервере, а не передавать историю с каждым запросом.
  • Прерывания и backchannel: в реальном разговоре пользователь может перебить агента. Retell поддерживает interruption sensitivity и автоматические backchannel'ы ("угу", "да") — имитация живого общения.
  • Интеграция с CRM и аналитикой: без webhook'ов и REST API агент слепой. Мы подключаем любые системы (Bitrix24, AmoCRM, Salesforce) и собираем полную аналитику звонков.

Снижение затрат на обработку звонков составляет 35-50% по сравнению с традиционным колл-центром, что подтверждают наши проекты.

Как мы добиваемся low-latency?

Ключевой элемент — двунаправленный WebSocket между инфраструктурой Retell и нашим LLM-сервером. В отличие от конкурентов, где запрос идёт через посредника, Retell передаёт голос напрямую, а текстовые транскрипты стримится в реальном времени. Согласно документации Retell AI, latency составляет 500-800 мс. Ниже — пример кастомного сервера на Python, который обрабатывает диалог через OpenAI gpt-4o:

import asyncio
import json
import websockets
from typing import AsyncGenerator

class RetellAgentServer:
    """
    Кастомный LLM сервер для Retell AI.
    Retell подключается по WebSocket и ожидает streaming ответы.
    """

    def __init__(self, openai_client, system_prompt: str):
        self.openai = openai_client
        self.system_prompt = system_prompt

    async def handle_connection(self, websocket, path):
        """Обработка WebSocket сессии от Retell"""
        async for message in websocket:
            data = json.loads(message)

            if data.get("interaction_type") == "call_details":
                # Начало звонка — получаем метаданные
                call_info = data.get("call", {})
                print(f"New call: {call_info.get('call_id')}")
                continue

            if data.get("interaction_type") in ("response_required", "reminder_required"):
                # Пользователь что-то сказал или наступил таймаут
                transcript = data.get("transcript", [])

                # Генерируем ответ через OpenAI streaming
                async for chunk in self._generate_response(transcript):
                    response_message = {
                        "response_id": data.get("response_id"),
                        "content": chunk,
                        "content_complete": False,
                        "end_call": False,
                    }
                    await websocket.send(json.dumps(response_message))

                # Финальный чанк
                await websocket.send(json.dumps({
                    "response_id": data.get("response_id"),
                    "content": "",
                    "content_complete": True,
                    "end_call": False,
                }))

    async def _generate_response(self, transcript: list) -> AsyncGenerator[str, None]:
        """Стриминг ответа через OpenAI"""
        messages = [{"role": "system", "content": self.system_prompt}]

        for turn in transcript:
            role = "assistant" if turn["role"] == "agent" else "user"
            messages.append({"role": role, "content": turn["content"]})

        stream = await self.openai.chat.completions.create(
            model="gpt-4o",
            messages=messages,
            stream=True,
            temperature=0.7,
        )

        async for chunk in stream:
            delta = chunk.choices[0].delta.content
            if delta:
                yield delta


class RetellAPIClient:
    """Управление агентами через Retell REST API"""

    def __init__(self, api_key: str):
        import requests
        self.api_key = api_key
        self.base_url = "https://api.retellai.com"
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        })

    def create_agent(self, agent_name: str,
                      llm_websocket_url: str,
                      voice_id: str = "11labs-Adrian",
                      language: str = "russian") -> dict:
        """
        Создание агента с кастомным LLM бэкендом.
        llm_websocket_url: ваш сервер для обработки диалога
        """
        payload = {
            "agent_name": agent_name,
            "llm_websocket_url": llm_websocket_url,
            "voice_id": voice_id,
            "language": language,
            "response_engine": {
                "type": "retell-llm",  # Или "custom-llm"
            },
            "responsiveness": 1.0,        # 0-1, насколько быстро реагирует
            "interruption_sensitivity": 1.0,
            "enable_backchannel": True,   # "угу", "да" во время пауз
            "backchannel_frequency": 0.9,
            "end_call_after_silence_ms": 600000,
            "max_call_duration_ms": 3600000,
        }

        return self.session.post(
            f"{self.base_url}/create-agent",
            json=payload
        ).json()

    def create_phone_call(self, from_number: str,
                           to_number: str,
                           agent_id: str,
                           retell_llm_dynamic_variables: dict = None) -> dict:
        """Инициирование исходящего звонка"""
        payload = {
            "from_number": from_number,
            "to_number": to_number,
            "agent_id": agent_id,
        }

        if retell_llm_dynamic_variables:
            payload["retell_llm_dynamic_variables"] = retell_llm_dynamic_variables

        return self.session.post(
            f"{self.base_url}/create-phone-call",
            json=payload
        ).json()

Сравнение Retell AI с альтернативами

Сравните с типовым Twilio Autopilot или Dialogflow CX: у них latency 1.5–3 сек, нет встроенного прерывания, stateful-диалоги строятся через context — медленно и с ограничениями. Retell AI даёт выигрыш в 3–5 раз по скорости отклика и в 10 раз по гибкости сценариев. Например, в проекте для логистики мы внедрили агента, который в реальном времени сверяет статус заказа по API — time-to-response на запрос клиента снизился с 4 секунд до 700 мс.

Как работает управление прерываниями?

Механизм interruption sensitivity в Retell настраивается от 0 до 1. При значении 1.0 агент замолкает мгновенно, как только пользователь начинает говорить. Это критично для сценариев, где клиент хочет поправить ответ или задать уточняющий вопрос. В наших проектах мы дополнительно настраиваем backchannel'ы — короткие "угу" и "да" во время пауз, чтобы диалог звучал естественно. Без этого агент выглядит как робот, который ждёт полную тишину перед ответом.

Что такое stateful-диалог в Retell?

Это возможность хранить историю разговора на вашем сервере, а не передавать весь контекст с каждым запросом к LLM. Например, в сценарии квалификации лида агент может помнить, что клиент уже назвал бюджет и сроки, и не переспрашивать заново. Ниже — упрощённая реализация state-менеджера:

class ConversationStateManager:
    """Управление состоянием разговора для Retell"""

    def __init__(self, call_id: str, customer_id: str):
        self.call_id = call_id
        self.customer_id = customer_id
        self.state = "greeting"
        self.collected_data = {}
        self.escalation_triggers = ["оператор", "жалоба", "претензия", "руководитель"]

    def should_escalate(self, user_message: str) -> bool:
        """Определяем нужна ли передача живому оператору"""
        msg_lower = user_message.lower()
        return any(trigger in msg_lower for trigger in self.escalation_triggers)

    def get_context_prompt(self) -> str:
        """Динамический промпт на основе текущего состояния"""
        base = f"Текущий шаг: {self.state}. Уже собрано: {self.collected_data}."

        if self.state == "qualification":
            base += " Узнай: есть ли бюджет, сроки принятия решения, лицо принимающее решение."
        elif self.state == "scheduling":
            base += " Предложи 3 слота для встречи на следующей неделе."

        return base
Пример настройки агента для обработки заказов Кейс: для интернет-магазина мы настроили агента, который проверяет статус заказа по API, уточняет адрес доставки и предлагает товары-компаньоны. Использовали модель GPT-4o с кастомным промптом и state-машиной на 10 состояний. Экономия на операционных расходах составила 40%.

Как мы внедряем Retell AI: пошаговая инструкция

  1. Аналитика и проектирование: разбираем сценарии, пишем decision tree, определяем точки эскалации.
  2. Настройка инфраструктуры: разворачиваем WebSocket сервер, подключаем модель (GPT-4o, Claude, YaGPT), настраиваем MLOps (MLflow, Weights & Biases).
  3. Разработка логики: пишем state machine, интеграции с CRM, динамические промпты.
  4. Тестирование: симуляция звонков, замеры latency, A/B тесты ответов.
  5. Деплой и мониторинг: запуск в production, настройка алертов по p99 latency и rate limit'ам.

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

  • Документация: архитектурная схема, описание webhook'ов, инструкция по обслуживанию агента.
  • Интеграция: подключение CRM, базы знаний, внешних API через webhook и REST.
  • Обучение: передача скриптов и регламентов для поддержки агента.
  • Поддержка: гарантия 30 дней после внедрения, дальше — SLA.

Платформа идеальна для сложных сценариев: квалификация лидов с динамическим скорингом, запись на встречи с интеграцией календаря, обработка заказов с проверкой статуса по API. Прототип — 3-4 дня, production с интеграциями — 4-6 недель.

Метрики Retell AI

Параметр Значение
End-to-end latency 500-800ms
Одновременных звонков масштабируется горизонтально
WebSocket reconnect автоматически
Webhook события call_started, call_ended, call_analyzed
Русский TTS (ElevenLabs) хорошее качество

Сравнение Retell AI с альтернативами

Критерий Retell AI Twilio Autopilot/ Dialogflow CX
Latency (p99) <1.2 сек 2-4 сек
Поддержка прерываний встроенная (interruption sensitivity) нет
Кастомный LLM-сервер WebSocket стриминг REST с пайплайнами
Stateful-диалоги на вашем сервере через context (ограниченно)
Backchannel'ы настраиваемые отсутствуют

Закажите внедрение Retell AI в вашу инфраструктуру. Получите консультацию по вашему проекту — оценим feasibility и сроки бесплатно. Свяжитесь с нами для детального обсуждения вашего проекта. Мы гарантируем, что внедрённый агент будет работать с latency < 1 сек и обрабатывать до 1000 одновременных звонков.

Распознавание и синтез речи: 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 месяца.