↩️ Назад

Категории

Архитектура корпоративного антитоксичного ИИ анализатора

22.07.2026 | Статья из категории: Нейросети

⚙️ Архитектура пайплайна

Каждое сообщение проходит через 7 этапов менее чем за 300 мс. Исходный текст уничтожается после векторизации — хранятся только обезличенные метрики.

📥 Interceptor 🧹 Normalizer 🎭 Masking 🧬 Embedding 🎯 Classifier 📊 Context 🚦 Router
┌─────────────────────┐
│ ВХОДНОЙ ПОТОК │
│ (gRPC / WebSocket) │
└──────────┬──────────┘
┌─────────────────────┐
│ ПРЕДОБРАБОТКА │
│ regexp + spaCy │
└──────────┬──────────┘
┌─────────────────────┐
│ ВЕКТОРИЗАЦИЯ │
│ DistilBERT (ONNX) │
└──────────┬──────────┘
┌─────────────────────┐
│ КЛАССИФИКАТОР │
│ Dense слои (3) │
└──────────┬──────────┘
┌─────────────────────┐
│ КОНТЕКСТНЫЙ │
│ ENRICHER (Redis) │
└──────────┬──────────┘
┌─────────────────────┐
│ РОУТЕР │
│ threshold 0.85 │
└─────────────────────┘
🟢 < 0.85 → доставка в чат  |  🔴 ≥ 0.85 → блокировка + уведомление HR

🧪 Интерактивный прототип

Попробуй ввести любое сообщение — анализатор в реальном времени покажет: векторный эмбеддинг, вероятности классов и итоговый вердикт.
(В браузере используется упрощённая модель на TensorFlow.js)

Вердикт:
Скор токсичности: 0.00
😡 Агрессия
0%
🚫 Дискриминация
0%
⚠️ Угрозы
0%
💬 Пассивная агрессия
0%
Вектор (первые 8 измерений): [0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00...]

🐍 Реализация на Python (FastAPI + ONNX)

Вот как выглядит настоящий сервис-анализатор в продакшене. Обрати внимание на отсутствие сохранения текста — только векторы и метрики.

# main.py — Streaming токсичный анализатор
import numpy as np
from fastapi import FastAPI
from pydantic import BaseModel
import onnxruntime as ort
import redis
import re
import hashlib

app = FastAPI()
redis_client = redis.Redis(host='localhost', decode_responses=True)

# Загружаем модели (замороженные веса)
embedder = ort.InferenceSession('distilbert_embedding.onnx')
classifier = ort.InferenceSession('toxic_classifier.onnx')

class Message(BaseModel):
    text: str
    user_id: str
    channel: str

def preprocess(text: str) -> str:
    # Маскировка PII (имена, email, телефоны)
    text = re.sub(r'\b[A-Z][a-z]+ [A-Z][a-z]+\b', '[PERSON]', text)
    text = re.sub(r'\S+@\S+', '[EMAIL]', text)
    return text.lower().strip()

def get_user_context(user_id: str) -> dict:
    # Счетчики из Redis, а не из базы переписок
    return {
        'toxicity_history': float(redis_client.get(f'tox:{user_id}') or 0.0),
        'msg_count_hour': int(redis_client.get(f'msgs:{user_id}') or 0),
        'is_manager': redis_client.sismember('managers', user_id)
    }

@app.post('/analyze')
def analyze(msg: Message):
    # 1. Предобработка (текст уничтожается после этого этапа)
    clean_text = preprocess(msg.text)
    
    # 2. Векторизация → эмбеддинг (384 числа)
    embedding = embedder.run(None, {'input': np.array([clean_text])})[0]
    
    # 3. Классификация
    logits = classifier.run(None, {'embedding': embedding})[0]
    probs = np.exp(logits) / np.sum(np.exp(logits))  # softmax
    
    # 4. Контекстный корректировщик
    ctx = get_user_context(msg.user_id)
    # Если руководитель — снижаем порог чувствительности на 15%
    penalty = 0.85 if ctx['is_manager'] else 1.0
    toxic_score = float(probs[1] * penalty)  # индекс 1 = класс "токсично"
    
    # 5. Роутинг
    if toxic_score >= 0.85:
        verdict = 'BLOCKED'
        # Только в этом случае сохраняем хеш текста на 72 часа
        text_hash = hashlib.sha256(msg.text.encode()).hexdigest()
        redis_client.setex(f'blocked:{text_hash}', 259200, msg.text)
    else:
        verdict = 'ALLOWED'
    
    # 6. Обновляем счетчики в Redis (без текста)
    redis_client.incr(f'msgs:{msg.user_id}')
    redis_client.expire(f'msgs:{msg.user_id}', 3600)
    if toxic_score > 0.5:
        redis_client.incrbyfloat(f'tox:{msg.user_id}', 0.1)
    
    # 7. Логгируем только обезличенные метрики
    return {
        'verdict': verdict,
        'toxic_score': round(toxic_score, 4),
        'class_probs': {
            'safe': round(float(probs[0]), 4),
            'aggression': round(float(probs[1]), 4),
            'discrimination': round(float(probs[2]), 4),
            'threat': round(float(probs[3]), 4),
        },
        'embedding_preview': embedding[0][:8].tolist(),
        # текст НЕ возвращается и НЕ сохраняется
    }

📊 Как строится аналитика без текста

Вместо сырых переписок мы агрегируем векторные кластеры и временные ряды скоров. Вот SQL-схема для дашборда HR:

-- Таблица агрегатов (хранится 90 дней)
CREATE TABLE daily_toxicity_metrics (
    date DATE,
    department VARCHAR(50),
    avg_toxic_score FLOAT,
    blocked_count INT,
    total_messages INT,
    -- Семантические кластеры токсичных тем (без текста!)
    top_embedding_centroids JSONB,  -- усреднённые векторы
    risk_trend FLOAT  -- скользящее среднее
);

-- Пример запроса для дашборда
SELECT date, department, avg_toxic_score,
       CASE WHEN avg_toxic_score > 0.6 THEN '⚠️ Требуется внимание'
            WHEN avg_toxic_score > 0.75 THEN '🚨 Критический уровень'
            ELSE '✅ Норма' END AS status
FROM daily_toxicity_metrics
WHERE date > NOW() - INTERVAL '7 days'
ORDER BY date DESC;
🧠 Ключевая идея: Мы храним не «Иванов написал мат», а «в отделе продаж за неделю средний скор вырос с 0.3 до 0.6, при этом 70% токсичных векторов лежат в кластере "сроки/дедлайны"». Это даёт HR пищу для размышлений, но не нарушает приватность.

🛡️ Почему это легально и этично

🔒

GDPR / 152-ФЗ

Текст не хранится → персональные данные не обрабатываются. Только хеши и агрегаты.

🎯

Minimal data collection

Модель не запоминает слова — только числовые паттерны. Переобучается на синтетике.

👤

Анонимность до порога

HR видит только ID, а не ФИО. Раскрытие — только при 3+ блокировках за день.

Автоудаление

Заблокированные сообщения живут 72 часа, потом шифруются и уничтожаются.

⚡ Построено на принципах Privacy by Design. Ни один токсичный анализатор не должен превращаться в «Большого брата». Цель — не наказать, а снизить уровень стресса в командах через раннее обнаружение конфликтных паттернов.

Где живут антитоксичные анализаторы

Разбираем на реальных примерах: что ставится на сервер, что — на компьютер сотрудника,
и как это всё работает вместе, как антивирус и антиспам.

📋 Матрица: какая задача — какая программа

Всё упирается в архитектуру: если нужно видеть текст — ставим на сервер (прокси). Если нужно видеть, как человек работает (паузы, клики, окна) — ставим агент на каждый ПК.

Задача Что мониторим Где ставится Примеры программ
Токсичность в переписке Текст чатов / почты Сервер (прокси) Aware, Teramind, кастомный BERT-анализатор
Продуктивность (активность) Паузы, нажатия клавиш, движение мыши, окна Агент на ПК ActivTrak, Time Doctor, Hubstaff, DeskTime
Учёт рабочего времени Время входа/выхода, активные приложения Агент на ПК Clockify, Toggl Track, Harvest
Скриншоты экрана Что видит сотрудник Агент на ПК Teramind, Veriato, Workpuls
Контроль ПО Какие программы установлены и запущены Агент на ПК Snipe-IT + агент, ManageEngine
Сетевой трафик (сайты) Куда ходят сотрудники Шлюз / прокси-сервер Zscaler, Forcepoint, Squid + анализ логов
Почта (спам / вирусы) Вложения, ссылки, тело письма Сервер почты Kaspersky Mail Gateway, Proofpoint, Mimecast, ClamAV

🏗️ Как это выглядит в реальной инфраструктуре

Все компоненты работают параллельно на разных уровнях. Один сервер видит только текст, агент на ПК видит только активность, а почтовый шлюз чистит вложения.

┌─────────────────────┐
│ ПК СОТРУДНИКА │
│ ┌───────────────┐ │
│ │ ActivTrak │ │
│ │ (считает │ │
│ │ паузы/клики) │ │
│ └───────────────┘ │
│ ┌───────────────┐ │
│ │ Slack / │ │
│ │ Teams / браузер│ │
│ └───────────────┘ │
└──────────┬──────────┘
┌─────────────────────┐
│ СЕРВЕР ЧАТА │
│ (Mattermost/Slack) │
└──────────┬──────────┘

┌─────────────────────┐
│ TOXIC ANALYZER │
│ (BERT + Redis) │
│ сканирует текст │
└──────────┬──────────┘

┌─────────────────────┐
│ HR-дашборд │
│ (агрегаты, без │
│ текста) │
└─────────────────────┘
┌─────────────────────┐
│ ПОЧТОВЫЙ СЕРВЕР │
│ (Exchange/Postfix) │
└──────────┬──────────┘

┌─────────────────────┐
│ MAIL GATEWAY │
│ (ClamAV / Proof- │
│ point) │
│ сканирует влож. │
└──────────┬──────────┘

┌─────────────────────┐
│ Карантин │
│ (подозрительные │
│ письма) │
└─────────────────────┘
Агент на ПК (активность)  |  Серверный анализ текста  |  Почтовый шлюз (вложения)

📦 Программы для каждой задачи

Вот готовые решения, которые реально используются в компаниях. Я разбил их по группам, чтобы ты сразу понимал, что подойдёт для твоего случая.

📊 Анализ продуктивности (клиентские агенты)

ActivTrak бесплатно до 5
Скриншоты, сайты, приложения, паузы. Лучший бесплатный тариф для старта.
от $7/мес
Time Doctor интеграция с Jira
Показывает «окна-пустышки», клавиатурную активность, скриншоты.
от $7/мес
Hubstaff GPS + фото
Для выездных сотрудников: трекинг по GPS + фото с веб-камеры.
от $7/мес
DeskTime авто-категоризация
Сама делит приложения на «продуктивные» и «непродуктивные».
от $6/мес

⚠️ Контроль токсичности (серверные / API)

Aware Slack + Teams
Анализирует тональность, стресс, выгорание через OAuth-интеграцию.
по запросу
Teramind DLP + токсичность
Единый флагман: агенты на ПК + серверный анализ текста и экрана.
по запросу
Verint контакт-центры
AI-анализ тональности в звонках и корпоративных чатах.
по запросу
Textio HR-переписка
Специализируется на токсичности в вакансиях и отзывах.
по запросу

🛡️ Антивирусы и антиспам (серверные шлюзы)

Kaspersky Mail Gateway Exchange/Postfix
Антивирус + антиспам + DLP на почтовом сервере.
по запросу
Proofpoint облачный
Защита от фишинга, спама и вредоносных вложений через MX-запись.
по запросу
Mimecast SaaS
Облачный карантин с возможностью ручной разблокировки.
по запросу
ClamAV open-source
Бесплатный антивирус с сигнатурным анализом. Ставится в контейнер.
бесплатно

🚀 Умный гибрид: Teramind как пример

Teramind — единственная система, которая одновременно:

🖥️ Агент на ПК 📊 Продуктивность (паузы, окна, клики) 📈 Дашборд HR
📨 Серверный прокси 🔍 Токсичность текста (BERT) 📈 Дашборд HR
⚡ Оба потока сливаются в единый профиль сотрудника
«У Елены падает продуктивность + растёт токсичность → возможен конфликт»

🇷🇺 Российские аналоги (с ФСТЭК)

Для госорганов и банков обязательна сертификация ФСТЭК. Вот проверенные варианты:

Название Западный аналог Сертификация
StaffCop Teramind ФСТЭК (можно в госорганы)
InfoWatch Traffic Monitor Forcepoint ФСТЭК, сертифицирован
Solar Dozor Proofpoint ФСТЭК, используется в банках
Kaspersky Endpoint CrowdStrike + ActivTrak ФСТЭК

🎯 Как выбрать под свой бюджет

🚀 Стартап (20 сотрудников, $200/мес):
• Токсичность в чате → кастомный Python-анализатор на Webhook (бесплатно)
• Продуктивность → ActivTrak (20 пользователей = $140/мес)
• Антивирус на почте → ClamAV в контейнере (бесплатно)
• Антиспам → встроенный фильтр Gmail/Exchange Online
Итого: $140/мес + 2 дня на настройку
🏦 Банк / финансы (500+ сотрудников):
• Токсичность + DLP → Teramind Enterprise (агенты + серверный анализ)
• Почтовый шлюз → Kaspersky Mail Gateway + Proofpoint
• Контроль трафика → Zscaler + Forcepoint
Итого: от $15 000/мес + внедрение 3 месяца

🧠 Простая аналогия для понимания

Система Что делает Где стоит Какую проблему решает
ActivTrak Считает шаги сотрудника в офисе Шагомер на ноге «Сотрудник мало двигается»
Time Doctor Засекает, сколько сидит за столом Камера у стола «Сотрудник уходит в туалет на час»
Toxic Analyzer Слушает, как сотрудник говорит с коллегами Диктофон в переговорной «Сотрудник оскорбляет коллег»

Всё вместе — это тотальный контроль, но GDPR разрешает только анонимизированные данные, кроме случаев явного нарушения (карантин).

👍 Оцените статью
Всего голосов: 0



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA