PunchFunke Akindele sparks online debate after missing Kamo’s movie premiereBollywood HungamaHanuman Ansh team meets Home Minister Amit Shah in New DelhiESPNTransfer rumors, news: Arsenal eye versatile Dortmund forwardDaily MaverickKremlin says AfD’s victory in Germany due in large part to lack of cheap Russian gasRTP DesportoFederação suíça castiga capitão Xhaka por falsificação de certificado covid-19ESPN DeportesMundial de Ciclismo: ¿Cómo llegan los favoritos al suéter arcoíris?The VergeiPhone owners can now submit a claim in Apple’s $250 million Siri AI lawsuitRolling StoneDolly Parton Day Declared in California, Nashville for September 25kickerLasso und die Goldfische: AFC Richmond feiert FC-27-RückkehrInquirerSurigao del Norte forest fire threatens Philippine eagle nests20 Minuten«Xhaka ist ein Spieler mit Charisma» – Knäbel nach der Impf-LügeEngadgetUSB-A vs. USB-C: What's the difference between them?
The Daily Newsstand · Free, Always
Monday, September 21, 2026

Почему regex больше не находит клиентов в Telegram: препарируем 12 081 сообщение с помощью каскадного AI-скоринга

Translate

Классический мониторинг Telegram-чатов по ключевым словам («ищу разработчика», «нужен сайт», «требуется подрядчик») в 2026 году технически мертв: регулярные выражения пропускают 79.5% целевых коммерческих заявок и одновременно генерируют более 60% ложноположительного шума (самореклама исполнителей, вакансии, взаимопиар).

В этой статье мы разбираем инженерную архитектуру трехуровневого каскадного пайплайна: от легковесных эвристик (2 мс) и мультиязычных эмбеддингов (15 мс) до LLM Decision Logic со строгой JSON-схемой. Все выводы подкреплены открытым бенчмарком на выборке из 12 081 реального сообщения из 40+ профильных IT- и digital-чатов.

## 1. Анатомия проблемы: почему ломаются регулярные выражения

Большинство самописных скриптов и коммерческих ботов-парсеров работают по примитивной логике:

```python

# Наивный подход 2018 года

KEYWORDS = [r"ищу\s+разработчик\w*", r"нужен\s+бот\w*", r"требуется\s+дизайн\w*"]

pattern = re.compile("|".join(KEYWORDS), re.IGNORECASE)

if pattern.search(message.text):

send_alert_to_crm(message)

```

На синтетических тестах это выглядит рабочим. Но когда скрипт подключается к живому потоку открытых профессиональных чатов с суммарным объемом 15 000+ сообщений в сутки, система мгновенно сталкивается с двумя фундаментальными проблемами NLP:

### Проблема 1. Ложноположительный шквал (False Positives)

Исполнители, веб-студии и фрилансеры используют ровно те же ключевые слова в своих офферах:

> «Привет! *Ищу** проекты на разработку. Наша команда делает сложных Telegram-ботов и web-сервисы под ключ. Кейсы в закрепе @agency_dev»*

Регулярка видит паттерн ищу + разработку и радостно рапортует в CRM: «Горячий лид!». В реальности менеджер продаж тратит 15 минут на то, чтобы связаться с коллегой-конкурентом. В нашем датасете 60.3% всех срабатываний чистого regex оказались исходящими предложениями исполнителей.

### Проблема 2. Катастрофический пропуск интента (False Negatives)

Реальные платежеспособные заказчики (особенно фаундеры и C-level) редко пишут шаблонными фразами из учебника SEO. Они формулируют задачу через бизнес-контекст:

> «Коллеги, посоветуйте, кто может быстро подружить amoCRM с самописным бэкендом на Go? Предыдущий подрядчик пропал, проект горит, оплата по безналу с юрлица»

В этом сообщении нет ни одного триггерного слова («ищу подрядчика», «требуется интегратор»). Однако с коммерческой точки зрения это максимально горячий лид: есть жгучая боль («проект горит»), готовность платить («безнал, юрлицо») и конкретный стек. Регулярка его пропустила.

## 2. Экспериментальный стенд: 12 081 сообщение под микроскопом

Чтобы оцифровать масштабы проблемы, мы собрали контрольный датасет:

* Период сбора: 7 дней непрерывного стриминга через MTProto API.

* Источники: 42 открытых русскоязычных чата по темам: IT-разработка, системная интеграция, дизайн, веб-аналитика, digital-маркетинг.

* Общий объем: 12 081 уникальное текстовое сообщение (без медиа-файлов и стикеров).

* Разметка (Ground Truth): ручная двойная слепая верификация тремя асессорами с разрешением конфликтов.

### Результаты разметки датасета:

* Целевые коммерческие лиды (Покупка): 132 сообщения (1.09% от всего потока).

* Предложения услуг / Спам исполнителей (Продажа): 1 845 сообщений (15.27%).

* Вакансии и найм в штат: 612 сообщений (5.06%).

* Оффтоп, профессиональные дискуссии, флуд: 9 492 сообщения (78.58%).

```

┌─────────────────────────────────────────────────────────────────────────┐

│ СТРУКТУРА ПОТОКА 12 081 СООБЩЕНИЯ │

├─────────────────────────────────────────┬──────────────┬────────────────┤

│ Категория │ Количество │ Доля в потоке │

├─────────────────────────────────────────┼──────────────┼────────────────┤

│ 🟢 Реальный интент покупки (Лиды) │ 132 │ 1.09% │

│ 🔴 Самореклама исполнителей │ 1 845 │ 15.27% │

│ 💼 Вакансии / Поиск работы │ 612 │ 5.06% │

│ ⚪ Дискуссии, вопросы, флуд │ 9 492 │ 78.58% │

└─────────────────────────────────────────┴──────────────┴────────────────┘

```

Целевой сигнал составляет всего 1.09% от общего шума. Искать его «в лоб» — классическая задача поиска редкого класса (imbalanced classification).

## 3. Сравнение подходов: Regex vs Классический ML vs Каскадный AI

Мы прогнали датасет через три архитектурных подхода. Вот итоговая матрица метрик:

```

┌──────────────────────────────────────┬───────────┬────────┬────────────┬─────────────┐

│ Метод фильтрации │ Precision │ Recall │ F1-Score │ Стоимость/к │

├──────────────────────────────────────┼───────────┼────────┼────────────┼─────────────┤

│ 1. Regex (словарь из 45 паттернов) │ 39.7% │ 20.5% │ 0.27 │ ~0.0001 ₽ │

│ 2. Чистая LLM (GPT-4o-mini на всё) │ 93.1% │ 87.1% │ 0.90 │ ~45.00 ₽ │

│ 3. Трехуровневый каскад (Leadl) │ 94.2% │ 88.6% │ 0.91 │ ~2.80 ₽ │

└──────────────────────────────────────┴───────────┴────────┴────────────┴─────────────┘

```

### Разбор метрик:

1. Регулярные выражения: из 132 реальных лидов смогли обнаружить лишь 27 штук (Recall = 20.5%). Потери составили 79.5%. При этом было получено 41 ложное срабатывание на рекламных объявлениях коллег.

2. Прямой прогон через LLM: качество отличное (F1 = 0.90), но отправлять каждое из 12 000 сообщений (из которых 80% — «спасибо, помогло» или «какой фреймворк лучше») напрямую в API большой модели — экономическое безумие при масштабировании на 300+ чатов.

3. Каскадный подход: сохраняет точность топовой LLM, но снижает затраты на инференс более чем в 16 раз за счет агрессивного отсева на ранних стадиях.

## 4. Архитектура решения: Трехуровневый каскадный пайплайн

Чтобы обрабатывать поток Telegram в реальном времени (SLA < 1 сек) с нулевым перерасходом бюджета, мы выстроили трехступенчатую систему фильтрации.

```mermaid

flowchart TD

A["Входящее сообщение Telegram"] --> B["УРОВЕНЬ 1: Эвристический фильтр (CPU, <2 мс)"]

B -- "Мусор / Спам-листы / <20 символов" --> Trash1["🗑️ Дроп (84.2% потока)"]

B -- "Потенциальный кандидат" --> C["УРОВЕНЬ 2: Векторный роутер интента (~15 мс)"]

C -- "Cosine sim < 0.42 к кластеру Покупка" --> Trash2["🗑️ Отсев (12.1% потока)"]

C -- "Cosine sim >= 0.42" --> D["УРОВЕНЬ 3: LLM Decision Logic со схемой (~450 мс)"]

D -- "Score < 7.0 / False flag" --> Trash3["🗑️ Отсев неликвида"]

D -- "Score >= 7.0 (Целевой лид)" --> E["🚀 Готовая карточка лида в Telegram / CRM"]

```

### Уровень 1: Детерминированные эвристики (Latency: ~1.8 мс)

Задача первого уровня — с нулевыми вычислительными затратами избавиться от очевидного шлака:

* Длина текста: отсечение сообщений короче 25 символов («ок», «спасибо», эмодзи-реакции, ссылки без описания).

* Специфика Telegram-сущностей: анализ служебных заголовков MTProto — форварды из каналов с меткой broadcast, системные сообщения о входе/выходе.

* Черный список триггеров явного шума: паттерны инфоцыганских воронок, крипто-ботов и рулеток.

Результат первого уровня: отсекается 84.2% входящего объема. В памяти остаются только связные сообщения с осмысленным текстом.

### Уровень 2: Семантический векторный роутер (Latency: ~14 мс)

Сообщения, прошедшие базовый фильтр, попадают на локальный эмбеддер.

Мы используем оптимизированную модель эмбеддингов (мультиязычный энкодер с дистилляцией), которая переводит текст сообщения в вектор фиксированной размерности и вычисляет косинусную близость с ядром целевых и антицелевых центроидов:

* Центроид «Коммерческий спрос»: векторы формулировок «ищем исполнителя», «нужен аутстафф», «сколько стоит внедрение», «требуется разработка под ключ».

* Центроид «Коммерческое предложение»: векторы офферов «предоставляем услуги», «наша команда специалистов», «скидки на разработку».

Если косинусное сходство с вектором спроса ниже порога отсечения ($\text{threshold} = 0.42$), сообщение отбрасывается без вызова тяжелых моделей.

Результат второго уровня: отсекается еще 12.1% потока. На финальную экспертизу доходит лишь ~3.7% сообщений, действительно содержащих признаки делового предложения.

### Уровень 3: LLM Decision Logic с JSON-валидацией (Latency: ~450 мс)

Финальный арбитр — компактная LLM, работающая в режиме Structured Outputs (гарантированная валидация схемы на уровне грамматики семплирования).

Системный промпт не просто спрашивает «лид это или нет», а заставляет модель разложить сообщение на предикаты:

```json

{

"name": "b2b_intent_verdict",

"strict": true,

"schema": {

"type": "object",

"properties": {

"is_commercial_lead": { "type": "boolean" },

"role": { "type": "string", "enum": ["buyer", "seller", "job_seeker", "other"] },

"intent_score": { "type": "number", "description": "Оценка от 0.0 до 10.0" },

"detected_budget": { "type": ["string", "null"] },

"tech_stack": { "type": "array", "items": { "type": "string" } },

"urgency_level": { "type": "string", "enum": ["high", "medium", "low", "none"] },

"explainable_verdict": { "type": "string", "description": "Почему это лид или почему отсеяно" }

},

"required": ["is_commercial_lead", "role", "intent_score", "detected_budget", "tech_stack", "urgency_level", "explainable_verdict"],

"additionalProperties": false

}

}

```

Модель обязана четко классифицировать роль автора (buyer vs seller). Если автор продает — флаг is_commercial_lead принудительно выставляется в false, каким бы профессиональным ни казался текст.

## 5. Разбор боевых кейсов: на чем ломаются парсеры

Давайте посмотрим на реальные примеры из датасета и сравним, как с ними справляются regex и каскадный AI.

### Кейс 1. Сложная формулировка без ключевых слов

> Текст: «Кто свободен на этой неделе поднять дашборд на Metabase с выгрузкой из ClickHouse? Данные уже агрегированы, ТЗ скину в ЛС. Бюджет 80к.»

* Regex:Пропуск. Нет ни слова «ищу», ни «нужен разработчик».

* Leadl Cascade:

* Скор: 9.2 / 10

* Роль: buyer

* Бюджет: 80 000 ₽

* Стек: ['Metabase', 'ClickHouse']

Обоснование: Прямой интент заказчика на реализацию конкретной инженерной задачи с готовыми вводными данными и бюджетом.*

### Кейс 2. Замаскированная самореклама

> Текст: «Ищем сложные задачи по доработке 1С:УТ и интеграции с маркетплейсами. Готовы подключиться от 2 часов в день, оплата поэтапная.»

* Regex: 🚨 Ложное срабатывание. Найдено ключевое слово Ищем.

* Leadl Cascade:

* Скор: 1.0 / 10

* Роль: seller

Обоснование: Глагол «ищем» использован исполнителем для поиска заказов («ищем задачи»). Это исходящий оффер агентства/фрилансера.*

### Кейс 3. Косвенный спам в виде вопроса

> Текст: «А вы знали, что Telegram-боты могут поднимать конверсию на 40%? Мы внедрили такое решение для логистической компании, делимся кейсом...»

* Regex: 🚨 Ложное срабатывание при наличии в словаре триггера Telegram-боты.

* Leadl Cascade:

* Скор: 0.3 / 10

* Роль: seller / marketing_bait

Обоснование: Прогрев через кейс. Коммерческий интент на покупку отсутствует.*

## 6. Скорость реакции: фактор Speed-to-Lead

Точность скоринга — лишь половина уравнения. Вторая половина — задержка доставки.

В открытых Telegram-чатах действует жесткое правило первой руки:

Если вы связались с клиентом в течение *первых 10–15 минут** после публикации сообщения — конверсия в содержательный диалог составляет 38–45%.

Через *2 часа** заказчик уже получил 15–20 откликов в личку, выбрал топ-3 собеседников и закрыл диалоги. Конверсия падает ниже 7%.

Через *сутки** конверсия стремится к нулю.

Благодаря каскаду общее время от момента отправки сообщения пользователем в чат до появления карточки лида у сейлз-менеджера в Telegram составляет менее 2.5 секунд (включая сетевые задержки MTProto).

## 7. Выводы

1. Регулярные выражения в 2026 году экономически вредны. Потеря 80% горячих заявок обходится бизнесу в разы дороже, чем аренда интеллектуального пайплайна.

2. Прогон всего трафика через сырые LLM — путь к сжиганию денег. Единственно жизнеспособная архитектура для обработки больших объемов — многоуровневый каскад (эвристика $\to$ эмбеддинги $\to$ LLM со строгой схемой).

3. Объяснимость скоринга (Explainable AI) критична для доверия сейлзов. Менеджер продаж должен в первые 3 секунды понимать, почему сообщение признано лидом, какой там бюджет и какой рекомендован первый шаг в диалоге.

Для тех, кто хочет протестировать, как этот скоринг работает вживую на ваших текстах без регистрации, мы развернули открытый песочный демо-виджет на [странице парсера Leadl](https://leadl.ai/parser-telegram).

Буду рад ответить на технические вопросы по архитектуре пайплайна и бенчмаркам в комментариях!

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.