Вакансии
Мы строим систему раннего предупреждения и ищем двух инженеров уровня senior. Ниже — что предстоит делать и чего мы ждём.
01Формат работы
- Формат: удалённо в часовых поясах Москва ±3 часа — либо офис в Москве, если так удобнее.
- Занятость: полная; рассмотрим частичную для сильного кандидата на старте.
- Вилка: обсуждается индивидуально по итогам технического разговора.
- Процесс: письмо → разговор о задачах (60 минут) → техническое обсуждение вашего опыта и наших задач (90 минут) → оффер. Тестовых заданий «в стол» не даём.
Продукт в начале пути: архитектура определена, комплекс строится. Это значит, что вы будете принимать решения, а не разбирать чужие тикеты, но и готовой инфраструктуры под рукой не будет — многое придётся поднимать с нуля.
02Senior Data / Backend Engineer
Вы отвечаете за контуры сбора и хранения: всё, что происходит между открытым источником и готовой к анализу записью.
Задачи
- проектировать и писать коннекторы к разнородным источникам: ленты, публичные API, государственные реестры, публичные каналы мессенджеров;
- держать расписание обхода тысяч источников: приоритеты, лимиты, ретраи, устойчивость к блокировкам;
- строить конвейер обработки на очереди: нормализация, дедупликация, доставка в хранилища;
- проектировать схему хранения под разные типы запросов — полнотекстовый поиск, граф связей, аналитика трендов;
- отвечать за наблюдаемость: метрики, алерты, поиск причин, когда источник тихо перестал отдавать данные.
Ожидаем
- 5+ лет коммерческой разработки на Python или Go, из них не менее двух — на конвейерах данных;
- боевой опыт с очередями (Kafka, NATS или аналоги) и оркестрацией задач (Temporal, Airflow);
- уверенное владение PostgreSQL и понимание, когда нужна колоночная база (ClickHouse) или поисковый индекс (OpenSearch, Elasticsearch);
- опыт промышленного парсинга: устойчивость к изменениям разметки, работа с прокси, честное отношение к robots.txt и условиям источников;
- Docker, CI, умение довести свой сервис до продакшена и потом его чинить.
Будет плюсом
- работа с графовыми базами (Neo4j, Apache AGE);
- опыт высоконагруженных потоковых систем;
- понимание правовой стороны сбора открытых данных.
03Senior ML / NLP Engineer
Вы отвечаете за контур осмысления: превращаете поток текстов на разных языках в связную картину событий, сущностей и сюжетов.
Задачи
- извлечение сущностей из русскоязычных текстов: компании, персоны, географии, суда, активы — с учётом склонений, сокращений и разнобоя в написании;
- связывание сущностей с государственными реестрами: разрешение омонимии, сопоставление по ИНН и ОГРН;
- кластеризация сообщений в сюжеты и отслеживание того, как сюжет развивается во времени;
- модели значимости и риска: отделить событие, которое реально касается клиента, от информационного шума;
- детекция аномалий — всплеск упоминаний там, где обычно тихо;
- вывод моделей в продакшен: инференс в реальном времени, контроль качества, переобучение на обратной связи аналитиков.
Ожидаем
- 5+ лет в ML, из них не менее трёх — в NLP на продакшене, а не в ноутбуках;
- предметный опыт с русским языком: NER, нормализация, кластеризация — знаете, почему англоязычные пайплайны на нём ломаются;
- уверенная работа с трансформерами и эмбеддингами, понимание компромисса между качеством и стоимостью инференса;
- опыт entity resolution или матчинга записей;
- Python, PyTorch, умение оптимизировать инференс (ONNX, квантизация, батчинг).
Будет плюсом
- опыт в медиа-аналитике, антифроде, комплаенсе или расследованиях;
- работа с векторными хранилищами и семантическим поиском;
- казахский, узбекский или другие языки региона.
04Как откликнуться
Напишите на hello@vezhalab.ru и укажите в теме письма название позиции. Перед откликом имеет смысл посмотреть схему комплекса — там видно, из чего состоит система и где в ней ваша часть.
Что стоит приложить:
- резюме или ссылку на профиль — в любом виде, оформление роли не играет;
- два-три примера задач, которые вы решали, с описанием: что было сложного и какое решение выбрали;
- ссылки на код, если есть возможность их показать.
Мы отвечаем на каждое письмо, в том числе отказом с объяснением причины. Обработка ваших данных описана в политике конфиденциальности: отклики храним не дольше года, если вы не попросите удалить их раньше.