Реализация Voice AI Agent (голосовой AI-агент для звонков)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация Voice AI Agent (голосовой AI-агент для звонков)
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Реализация Voice AI Agent (голосовой AI-агент для звонков)

Voice AI Agent — автономный агент, который ведёт полноценные телефонные переговоры: понимает контекст, задаёт уточняющие вопросы, принимает решения, вызывает инструменты (CRM, базы данных) и завершает диалог с результатом.

Архитектура 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

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

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

Интеграция с 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)

Метрики качества агента

  • Task Completion Rate (TCR): % звонков с решённой задачей
  • Containment Rate: % звонков без переключения на оператора
  • Average Handle Time (AHT)
  • False Transfer Rate: % некорректных переключений

Целевые показатели: TCR >70%, Containment >60%.

Сроки: MVP агента с базовыми сценариями — 3–4 недели. Production-система с мониторингом — 2–3 месяца.