Разработка AI-цифрового диспетчера (AI Dispatcher)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-цифрового диспетчера (AI Dispatcher)
Средняя
от 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

AI Диспетчер — цифровой сотрудник для координации задач

AI Диспетчер автоматически принимает входящие заявки, классифицирует их, назначает исполнителей с учётом загрузки и компетенций, отслеживает выполнение и эскалирует просроченные задачи. Применяется в службах технической поддержки, полевых операциях, транспортной диспетчеризации, управлении заявками на обслуживание.

Ядро: intake и маршрутизация заявок

from openai import AsyncOpenAI
from pydantic import BaseModel
from typing import Literal, Optional

client = AsyncOpenAI()

class TaskClassification(BaseModel):
    category: str
    priority: Literal["critical", "high", "normal", "low"]
    required_skill: str
    estimated_duration_minutes: int
    location: Optional[str]
    sla_hours: float             # SLA в часах
    special_requirements: list[str]

class DispatcherAgent:

    def __init__(self, team_db, task_db):
        self.team_db = team_db
        self.task_db = task_db

    async def process_incoming_request(self, request: dict) -> dict:
        """Принимает заявку и назначает исполнителя"""

        # Классификация
        classification = await client.beta.chat.completions.parse(
            model="gpt-4o",
            messages=[{
                "role": "system",
                "content": "Классифицируй входящую заявку для диспетчеризации. Определи приоритет, категорию, необходимые компетенции и ожидаемое время выполнения."
            }, {
                "role": "user",
                "content": f"Заявка: {request['description']}\nОт: {request['client']}\nКонтакт: {request['contact']}"
            }],
            response_format=TaskClassification,
            temperature=0,
        )

        task_class = classification.choices[0].message.parsed

        # Выбор исполнителя
        assignee = await self.select_best_assignee(task_class, request.get("location"))

        # Создание задачи
        task = await self.task_db.create({
            "title": request.get("title", f"Заявка от {request['client']}"),
            "description": request["description"],
            "category": task_class.category,
            "priority": task_class.priority,
            "required_skill": task_class.required_skill,
            "assignee_id": assignee["id"] if assignee else None,
            "sla_deadline": datetime.now() + timedelta(hours=task_class.sla_hours),
            "status": "assigned" if assignee else "pending",
        })

        # Уведомление исполнителя
        if assignee:
            await self.notify_assignee(assignee, task)

        return {"task_id": task["id"], "assignee": assignee, "sla": task["sla_deadline"]}

    async def select_best_assignee(
        self,
        task: TaskClassification,
        location: Optional[str],
    ) -> Optional[dict]:
        """Выбирает оптимального исполнителя"""

        available = await self.team_db.get_available(
            skill=task.required_skill,
            shift="current",
        )

        if not available:
            return None

        # Скоринг исполнителей
        scored = []
        for person in available:
            score = 100

            # Загрузка (меньше задач = выше приоритет)
            current_load = await self.task_db.count_active(person["id"])
            score -= current_load * 10

            # Близость к локации (для полевых задач)
            if location and person.get("current_location"):
                distance = calculate_distance(location, person["current_location"])
                score -= min(distance / 10, 30)  # Максимум -30 за дистанцию

            # Специализация
            if task.required_skill in person.get("specializations", []):
                score += 20

            scored.append({**person, "score": score})

        # Лучший кандидат
        return max(scored, key=lambda x: x["score"]) if scored else None

SLA-мониторинг и эскалации

class SLAMonitor:

    async def check_and_escalate(self):
        """Проверяет SLA каждые 15 минут"""

        tasks = await self.task_db.get_active_tasks()
        now = datetime.now()

        for task in tasks:
            sla_deadline = task["sla_deadline"]
            time_to_sla = (sla_deadline - now).total_seconds() / 3600

            if time_to_sla < 0:
                # SLA нарушен
                await self.handle_sla_breach(task)
            elif time_to_sla < 0.5:
                # До SLA < 30 минут
                await self.send_urgent_reminder(task)
            elif time_to_sla < 1 and task["status"] == "assigned":
                # До SLA < 1 час, задача не начата
                await self.escalate_to_supervisor(task, reason="task_not_started")

    async def handle_sla_breach(self, task: dict):
        """Обработка нарушения SLA"""

        breach_message = await client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{
                "role": "system",
                "content": "Создай сообщение об эскалации нарушения SLA для руководителя. Краткое, конкретное."
            }, {
                "role": "user",
                "content": f"Задача: {task['title']}, нарушение SLA на {abs(int((datetime.now() - task['sla_deadline']).total_seconds() / 60))} мин"
            }],
        )

        await slack_client.post_message(
            channel="#dispatcher-escalations",
            text=f"🚨 SLA нарушен:\n{breach_message.choices[0].message.content}",
        )
        await self.task_db.update(task["id"], {"sla_status": "breached"})

Практический кейс: телеком, 800 заявок/день

Компания: телеком с полевыми инженерами, 800 заявок на технические выезды в день.

AI Диспетчер:

  • Приём заявок через чат, email, API CRM
  • Классификация: 8 типов (подключение, ремонт, замена оборудования и др.)
  • Назначение инженера с учётом навыков, загрузки, геолокации
  • SLA-контроль: 4ч для критических, 24ч для стандартных
  • Автоматические напоминания инженерам
  • Эскалация просроченных руководителю

Результаты:

  • SLA compliance: 71% → 89%
  • Время назначения задачи: 12 мин → 45 сек
  • Перегрузка отдельных инженеров: -34% (равномерное распределение)

Сроки

  • Классификатор заявок: 1–2 недели
  • Алгоритм назначения исполнителей: 1–2 недели
  • SLA мониторинг и эскалации: 1 неделя
  • Интеграция с CRM и уведомлениями: 1–2 недели
  • Итого: 4–7 недель