Разработка AI-системы классификации и маршрутизации обращений граждан

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-системы классификации и маршрутизации обращений граждан
Средняя
~1-2 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Разработка AI-системы классификации и маршрутизации обращений граждан

Поступающие в государственные органы обращения часто направляются не в то подразделение с первого раза — ответственный исполнитель теряет время, заявитель получает отказ «не в нашей компетенции», сроки рассмотрения срываются. AI-классификатор решает задачу маршрутизации с точностью 92–95% на первом направлении.

Многоуровневая классификация

Рубрикаторы государственных органов имеют иерархическую структуру: федеральный рубрикатор, ведомственный, территориальный. Обращение нужно отнести к правильному уровню иерархии и конкретному исполнителю.

class RequestClassification(BaseModel):
    federal_rubric: str           # рубрика федерального классификатора
    department_rubric: str        # рубрика ведомственного классификатора
    responsible_unit: str         # подразделение-ответчик
    responsible_officer: str | None  # конкретный исполнитель (если однозначно)
    territorial_scope: str        # федеральный / региональный / муниципальный
    subject_area: str             # краткая тема для регистрации
    requires_field_inspection: bool  # нужен ли выезд на место
    other_agencies: list[str]     # другие ведомства, которых нужно привлечь
    confidence: float

def classify_request(text: str, attachments: list) -> RequestClassification:
    # Семантический поиск по базе прецедентов
    precedents = precedent_db.search(text, top_k=10)

    # Мультимодальная классификация при наличии вложений (фото, документы)
    if attachments:
        attachment_context = analyze_attachments(attachments)
    else:
        attachment_context = ""

    return llm.parse(
        build_routing_prompt(text, attachment_context, precedents),
        response_format=RequestClassification
    )

Обучение классификатора

Основа — исторические данные: тысячи обращений с разметкой «тематика → исполнитель». Проблема: разметка историческая нередко ошибочна (именно потому и нужна автоматизация). Очистка данных критична.

Стратегия обучения:

  • Исключить обращения с перенаправлением (признак неправильной первичной маршрутизации)
  • Оставить только те, где первый назначенный исполнитель дал окончательный ответ
  • Дополнить данными из аналогичных органов (с анонимизацией)
  • Active learning: эксперты размечают сложные кейсы, модель обучается итерационно

Метрики качества:

  • Accuracy@1: правильное подразделение с первой попытки — цель 92%+
  • Accuracy@3: правильное подразделение в топ-3 — цель 99%+
  • False routing rate: % обращений перенаправленных повторно — цель < 5%

Территориальная маршрутизация

Обращения по вопросам инфраструктуры (ямы, фонари, мусор) требуют определения территориальной принадлежности объекта:

def extract_and_geolocate(text: str) -> GeoContext:
    # Извлечение адресов через NER
    addresses = ner_model.extract(text, entity_type="ADDRESS")

    located_objects = []
    for addr in addresses:
        # Геокодирование через Яндекс.Геокодер или Nominatim
        coords = geocoder.geocode(addr)
        if coords:
            # Определение муниципального образования, района
            admin_unit = geodata.get_admin_unit(coords)
            responsible = routing_matrix.get_responsible(
                issue_category=...,
                admin_unit=admin_unit
            )
            located_objects.append(GeoObject(
                address=addr,
                coords=coords,
                responsible_org=responsible
            ))

    return GeoContext(objects=located_objects)

Обработка смешанных обращений

Одно обращение нередко содержит несколько независимых вопросов разной тематики. Система разбивает такие обращения на части:

  • «Прошу разобраться с шумными соседями и починить лифт» → два подобращения: участковый + УК
  • Каждая часть маршрутизируется отдельно, ответы консолидируются в единый ответ заявителю
  • Сроки считаются по максимальному из частей

Дашборд маршрутизации

Руководитель видит в реальном времени: очередь необработанных обращений, распределение нагрузки по исполнителям, обращения с истекающим сроком, топ-10 тематик за период. Цветовая индикация: зелёный (в срок), жёлтый (менее 5 дней), красный (просрочено).

Интеграция с системами документооборота

Поддерживаемые СЭД: ДЕЛО, DIRECTUM, Docsvision, 1С:Документооборот. Система передаёт обращение уже с заполненными карточками регистрации — исполнитель получает не «входящий email», а структурированную задачу с установленным сроком.