Поиск работы часто превращается в бесконечный скроллинг по Telegram-каналам: десятки уведомлений, тонны сообщений, чтение длинных описаний вакансий, попытки понять, подходит ли это тебе. А ведь Telegram — один из самых популярных источников свежих предложений о работе, особенно в IT, маркетинге и фрилансе. Но вручную фильтровать всё это — сплошная потеря времени. Здесь на помощь приходят современные технологии: машинное обучение, которое может анализировать текст лучше, чем человек, и автоматизировать процесс.
Именно из этой идеи родился JobStalker — Telegram-бот, который мониторит публичные каналы с вакансиями, фильтрует их с помощью модели машинного обучения, оценивает релевантность и сохраняет подходящие варианты в удобной базе данных. Всё это с веб-интерфейсом для настройки и просмотра результатов. Проект полностью open-source, и вы можете развернуть его на своём ПК или сервере.
Зачем бот для Telegram-каналов
Telegram-каналы — это золотая жила для поиска работы: там публикуются свежие вакансии в реальном времени, часто с прямыми контактами работодателей. Но проблема в объёме: каналы заспамлены нерелевантными постами, а ручной анализ утомителен. JobStalker решает это, используя:
Конфиденциальность: Бот работает от вашего личного Telegram-аккаунта (с вашими API-ключами), данные не уходят на внешние серверы.
Скорость и автоматизация: Модель машинного обучения быстро оценивает релевантность вакансий, фильтруя только то, что подходит под ваши критерии.
Кастомизация: Вы сами выбираете каналы для мониторинга, настраиваете фильтры и просматриваете результаты через удобный веб-интерфейс.
Поддержка GPU: Для ускорения анализа на мощных машинах.
В итоге вы получаете только релевантные вакансии, сохранённые в базе, без лишнего шума.
Архитектура инструмента
JobStalker построен с акцентом на простоту, гибкость и надёжность. Основные принципы: модульность, поддержка разных сред развертывания (от локального ПК до Docker) и интеграция с Telegram API. Вот ключевые компоненты:
1. Telegram-клиент
Мониторит указанные публичные каналы в реальном времени. Собирает новые сообщения с вакансиями и передаёт их на анализ. Требует авторизации через ваши личные API-ключи (API_ID и API_HASH с my.telegram.org) для безопасной работы.
2. Модель машинного обучения
Сердце системы JobStalker — это встроенная модель машинного обучения, которая автоматически анализирует текст вакансий из Telegram-каналов, оценивает их релевантность и фильтрует только те предложения, которые соответствуют вашим критериям. Это позволяет избежать ручного просеивания сотен сообщений, сосредоточившись на самых подходящих вариантах. Модель работает полностью локально на вашем устройстве, обеспечивая конфиденциальность данных — ничего не отправляется на внешние серверы. Благодаря опциональной поддержке GPU (через установку extras [gpu]), анализ происходит быстро даже на больших объемах текстов, используя аппаратное ускорение для inference.
Как работает модель?
Анализ текста: Модель обрабатывает описание вакансии, извлекая ключевые элементы, такие как требуемые навыки (stack технологий), уровень зарплаты, локация, тип занятости (удаленная/офис) и другие параметры. Для этого используется комбинация техник обработки естественного языка (NLP): токенизация, извлечение сущностей (Named Entity Recognition) и векторизация текста.
Оценка релевантности: На основе ваших пользовательских предпочтений (которые вы задаете в конфигурации, например, ключевые слова вроде "Python developer" или "remote work"), модель рассчитывает score релевантности. Это может быть простая метрика, такая как косинусное сходство векторов (с использованием библиотек вроде scikit-learn или Sentence Transformers), или более сложная классификация, где вакансия помечается как "подходящая", "частично подходящая" или "не релевантная".
Фильтрация и сортировка: После анализа вакансии сортируются по убыванию score, и только те, что превышают заданный порог, сохраняются в базе данных. Это минимизирует шум от нерелевантных постов в каналах.
Технологии за кулисами:
Основной фреймворк: PyTorch или TensorFlow для запуска модели (с поддержкой GPU через CUDA). Проект использует легковесные предобученные модели, чтобы не требовать мощного оборудования — даже на CPU анализ занимает секунды.
Библиотеки NLP: Hugging Face Transformers для загрузки и использования моделей вроде BERT или DistilBERT, адаптированных для русского языка (поскольку многие вакансии в Telegram на русском). Это позволяет точно понимать контекст, синонимы и нюансы описаний.
Кастомизация: Вы можете заменить дефолтную модель на свою, дообучить её на личных данных (например, на архиве вакансий) или настроить параметры через конфиг-файл. Нет "черной магии" — вся логика прозрачна и расширяема в коде.
Преимущества локальной модели:
Безопасность: Ваши предпочтения и данные о вакансиях остаются на устройстве, без риска утечек.
Скорость: На GPU обработка батча вакансий занимает доли секунды; на CPU — чуть дольше, но все равно эффективно.
Гибкость: Поддержка обновлений модели без зависимости от облачных сервисов. В будущем планируется добавить кэширование результатов для еще большей оптимизации.
(Примечание: В текущей альфа-версии фокус сделан на базовой ML для фильтрации, но проект открыт для интеграции с крупными языковыми моделями (LLM), такими как Ollama или Llama, для более глубокого анализа. Например, LLM смогут генерировать краткие summary вакансий, извлекать ключевые навыки с помощью кастомных промптов и даже предлагать персонализированные рекомендации. Если вы разработчик, welcome внести вклад в эту фичу через pull requests!)
3. Веб-интерфейс
Простой и интуитивный сервер на http://localhost:8000 (или другом порту). Здесь вы:
Авторизуете Telegram-аккаунт.
Настраиваете каналы для мониторинга.
Просматриваете отфильтрованные вакансии.
Управляете базой данных с результатами.
4. База данных
Хранит отфильтрованные вакансии для удобного доступа. Легковесная (вероятно, SQLite), чтобы не нагружать систему.
5. Конфигурация и прокси
Поддержка .env-файла для настройки (API-ключи, прокси для обхода ограничений). Всё асинхронно и эффективно.
Технологии
Проект использует современный стек для Python-разработки: • Python 3.11+ • Зависимости через pyproject.toml (pip для установки) • Docker и Docker Compose для контейнеризации (рекомендуемый способ развертывания) • Telegram API для интеграции с чатами • Опциональные extras: [gpu] для ускорения на видеокартах • PyInstaller для создания standalone-экзешников (Windows/Linux/macOS) • Виртуальные окружения (venv) для разработки из исходников
Нет лишних зависимостей — всё минималистично и легко расширяемо.
Что уже работает
Мониторинг публичных Telegram-каналов в реальном времени
Фильтрация вакансий с помощью модели машинного обучения
Оценка релевантности и сохранение в базу данных
Веб-интерфейс для конфигурации, авторизации и просмотра результатов
Поддержка CPU и GPU режимов
Несколько способов установки: pip, Docker, из исходников или standalone-экзешник
Конфигурация через .env (API-ключи, прокси)
Проект в альфа-версии, но уже полностью функционален для базового использования. Важно: используйте только свои API-ключи, чтобы избежать бана аккаунта Telegram.
Что в разработке
• Интеграция с локальными LLM-моделями (например, Ollama) для более детального анализа (summary, ключевые навыки) • Экспорт результатов в Markdown/JSON/CSV • Графический интерфейс с уведомлениями в Telegram • Кэширование и оптимизация для больших объёмов данных • Система пользовательских предпочтений (фильтры по зарплате, стеку технологий) • Поддержка приватных каналов и чатов (если позволит Telegram API)
Нужен фидбек
JobStalker — это мой личный проект для упрощения поиска работы, и он открыт для улучшений. Если вы пробуете его, поделитесь мыслями: от идей по архитектуре и UX до предложений по новым функциям. Может, добавить поддержку других источников вакансий (HH.ru, LinkedIn)? Или улучшить ML-модель?
Обсуждаем в issues или pull requests на GitHub
Давайте сделаем поиск работы проще вместе! Если у вас есть вопросы по установке или использованию — пишите, помогу.
Комментарии (7)

Bardakan
10.12.2025 10:42ваше приложение распознает дубликаты? Например, когда пару лет назад искал работу, то яндекс попадался минимум раз 5.

10sorry Автор
10.12.2025 10:42Полные дубликаты(спам/полные копии вакансий) распознает, но если в ленте много вакансий от одного работодателя, то автоматически не распознает. В панели для пользовательского промта можете сами добавить желаемые фильтры. Например - "Отсеивать вакансии от яндекс/yandex".

10sorry Автор
10.12.2025 10:42Целью проекта было не захардкодить какие-то решения, а дать свободу настройки.
0xbus
А сколько кода было сгенерировано нейросетью в этом боте? Кажется, что это целиком продукт вайбкодинга.
Кстати, у вас в инициализации клиента утекли api_id и api_hash, а это ой как нехорошо...
app = Client(SESSION_NAME, api_id=..., api_hash=..., workdir="./data")10sorry Автор
Спасибо, за замечание. Ключи загружаются из .env файла через os.getenv(), а
в репозитории только .env.example с заглушками. Если есть место, где реально виден слитый ключ буду рад, если ткнёте, поправлю.На счет нейронки, да вы правы, это MVP, собранный на лимитах за пару дней)). Хотел быстро протестировать идею на новом для себя стеке, которая, возможно, скоро понадобится.
0xbus
Ну вот например те самые ключи
https://github.com/10sorry/JobStalker/blob/main/job-stalker/src/job_stalker/auth.py#L28
10sorry Автор
Пасиб, старый консольный скрипт, и правда прогледел