Розробка AI-системи для автоматизації обробки звернень громадян
Звернення громадян до органів влади — високонавантажений та суворо регламентований процес. Федеральний закон № 59-ФЗ встановлює строки: письмові звернення — 30 днів, окремі категорії — 10–15 днів. Порушення строків тягне адміністративну відповідальність. AI-система дозволяє автоматизувати приймання, класифікацію, маршрутизацію та підготовку відповідей при дотриманні всіх нормативних вимог.
Архітектура системи
Система складається з кількох незалежних модулів, кожен з яких може впроваджуватися окремо:
Модуль приймання — інтеграція з каналами надходження звернень: портал державних послуг (ЕСІА), офіційний сайт відомства, електронна пошта, МФЦ (СМЕВ), приймальні. Нормалізація вхідних даних у єдиний формат.
Модуль класифікації — визначення тематики звернення за класифікатором відомства, профільного органу, терміновості. Виявлення повторних звернень та скарг на порушення строків.
Модуль маршрутизації — автоматичне визначення відповідального підрозділу та виконавця на основі тематики, територіальної приналежності та навантаження.
Модуль підготовки відповідей — генерація проекту відповіді на типові звернення, пошук за базою нормативних актів та попередніх відповідей.
Модуль контролю строків — SLA-трекінг з урахуванням святкових днів, ескалація при наближенні дедлайну.
Класифікація та видобування даних
from pydantic import BaseModel
from enum import Enum
class RequestCategory(str, Enum):
HOUSING = "житлові питання"
UTILITIES = "ЖКХ"
LAND = "земельні відносини"
SOCIAL = "соціальний захист"
TRANSPORT = "транспорт та дороги"
ECOLOGY = "екологія"
PERMISSIONS = "дозволи та ліцензії"
COMPLAINT = "скарга на дії посадових осіб"
OTHER = "інше"
class CitizenRequest(BaseModel):
applicant_name: str
applicant_contact: str
request_text: str
attachments: list[str]
class ProcessedRequest(BaseModel):
category: RequestCategory
subcategory: str
subject_summary: str # короткий виклад у 1-2 реченнях
responsible_department: str
priority: str # routine / urgent / special_control
deadline_days: int # розраховане терміном відповіді за законом 59-ФЗ
requires_interdepartmental: bool # потрібен міжвідомчий запит
extracted_addresses: list[str] # адреси з тексту звернення
extracted_organizations: list[str]
is_repeat: bool # повторне звернення
related_request_ids: list[str]
def process_citizen_request(request: CitizenRequest, db) -> ProcessedRequest:
# Пошук подібних попередніх звернень
similar = db.semantic_search(request.request_text, top_k=5)
context = build_context(similar)
return llm.parse(
build_classification_prompt(request, context),
response_format=ProcessedRequest
)
Визначення строків за законом 59-ФЗ
Розрахунок строку не є тривіальним: базовий термін 30 днів, але є винятки — звернення у сфері ЖКХ можуть потребувати відповіді в 10 днів за регіональними актами, терміні звернення — 15 днів. Міжвідомчий запит продовжує термін на 30 днів з повідомленням заявника.
def calculate_deadline(
request: ProcessedRequest,
received_date: date,
holiday_calendar: HolidayCalendar
) -> DeadlineInfo:
base_days = 30 # базовий термін за законом 59-ФЗ ст. 12
if request.priority == "urgent":
base_days = 15
elif request.category == RequestCategory.UTILITIES:
base_days = 10 # регіональні вимоги
if request.requires_interdepartmental:
base_days += 30 # ст. 10 ч. 2 закону 59-ФЗ
# Робочі дні з урахуванням виробничого календаря
deadline = holiday_calendar.add_working_days(received_date, base_days)
return DeadlineInfo(
deadline=deadline,
warning_date=holiday_calendar.add_working_days(received_date, base_days - 5),
escalation_date=holiday_calendar.add_working_days(received_date, base_days - 2)
)
Підготовка проектів відповідей
Для типових звернень (80–90% вхідного потоку) система генерує проект відповіді автоматично. Відповідь повинна містити посилання на НПА та конкретні розъяснення, а не загальні фрази.
def generate_draft_response(
request: ProcessedRequest,
original_text: str,
knowledge_base: KnowledgeBase
) -> DraftResponse:
# Пошук релевантних НПА, постанов, регламентів
relevant_docs = knowledge_base.search(
query=original_text,
doc_types=["law", "regulation", "instruction", "precedent"],
top_k=10
)
# Генерація відповіді з посиланнями
prompt = f"""Підготуй офіційну відповідь на звернення громадянина.
Звернення: {original_text}
Тематика: {request.category}
Релевантні НПА:
{format_documents(relevant_docs)}
Вимоги:
- Офіційний діловий стиль
- Конкретні посилання на статті нормативних актів
- Опис порядку дій для заявника
- Без загальних фраз та стереотипних відповідей"""
draft = llm.generate(prompt, max_tokens=800)
return DraftResponse(
text=draft,
referenced_documents=[d.id for d in relevant_docs[:5]],
confidence=estimate_confidence(request, relevant_docs),
requires_human_review=request.priority == "urgent" or request.category == RequestCategory.COMPLAINT
)
Робота з ЕСІА та СМЕВ
Інтеграція з федеральною інфраструктурою:
ЕСІА (Єдина система ідентифікації та аутентифікації): аутентифікація заявника, отримання верифікованих персональних даних — ПІБ, СНІЛС, адреса. Дозволяє не запитувати документи повторно.
СМЕВ (Система міжвідомчої електронної взаємодії): міжвідомчі запити в автоматичному режимі. Наприклад, для відповіді на звернення про земельну ділянку система автоматично запитує відомості з Рославітацю.
ГІС ЖКХ API: для звернень з комунальних послуг — перевірка нарахувань, аварійних заявок, стану дому.
ЕПГУ (державні послуги): отримання звернень через API державних послуг, публікація статусів розгляду.
Виявлення системних проблем
Агрегований аналіз звернень виявляє повторюючі проблеми:
def detect_systemic_issues(
requests: list[ProcessedRequest],
period_days: int = 30
) -> list[SystemicIssue]:
# Кластеризація за тематикою та адресами
clusterer = HDBSCANClusterer(min_cluster_size=10)
clusters = clusterer.fit(requests)
issues = []
for cluster in clusters:
if cluster.growth_rate > 2.0: # зростання числа звернень у 2+ рази
issues.append(SystemicIssue(
category=cluster.dominant_category,
location=cluster.most_common_address,
request_count=len(cluster.requests),
sample_texts=cluster.get_samples(n=3),
trend="growing",
recommended_action=generate_action_recommendation(cluster)
))
return sorted(issues, key=lambda x: x.request_count, reverse=True)
Антифрод та захист від зловживань
Система виявляє: координовані кампанії звернень за одним шаблоном, звернення з ознаками маніпуляції, безмістні звернення. Не блокує — маркує для окремого розгляду. Кожне звернення має бути розглянуте відповідно до закону 59-ФЗ.
Строки впровадження
Місяць 1–2: Модуль приймання (email, веб-форма), базова класифікація за класифікатором, SLA-трекінг
Місяць 3–4: Інтеграція з ЕСІА, модуль маршрутизації, дашборд для керівників
Місяць 5–6: Генерація проектів відповідей, інтеграція з базою НПА
Місяць 7–8: СМЕВ-інтеграція, аналітика системних проблем, пілот на 3 підрозділах
Місяць 9–10: Масштабування, навчання співробітників, оцінка ефективності







