Вакансия: Fullstack AI инженер (Python, канонизация и матчинг товаров)
Описание вакансии
В связи с расширением команды в новый стартап проект ищем Fullstack AI инженера
О проекте
AI-ассистент для умных покупок, который помогает пользователям экономить время и деньги. Ассистент находит и сопоставляет товары из разных онлайн-магазинов и маркетплейсов и формирует оптимальную корзину с учётом множества параметров.
Ищем крепкого backend-инженера с опытом коммерческой разработки на Python, который уверенно владеет Python и PostgreSQL и имеет реальный прод-опыт в парсинге и работес данными.
Роль закрывает четыре направления: парсинг маркетплейсов, канонизация/матчинг товаров, хранилище и его масштабирование, AI/LLM для ассистента. Не требуется быть экспертом сразу во всех но нужен практический опыт минимум в двух (обязательно включая парсинг или данные) и готовность углубляться в остальные.
Требования:
- Создание собственных AI-инструментов для разработки (кастомные скиллы/агенты/пайплайны, автоматизация рутины)
- ВАЖНО! - опыт разработки, связанный с канонизацией / матчингом товаров + парсинг маркетплейсов
Базовый стек:
- Python 3.12+ : asyncio, типизация, управление зависимостями (uv/poetry).
- async FastAPI в проде: Pydantic v2, dependency injection, middleware; понимание, как не блокироватьevent loop синхронным кодом (asyncio.to thread).
- PostgreSQL на хорошем уровне: проектирование схем, транзакции, индексы, JSONB , EXPLAIN ANALYZE,оптимизация запросов.
- SQLAlchemy 2.0 (async) + Alembic : модели, сессии, миграции.
- Celery + Redis (или asyncio + APScheduler): очереди, ретраи, идемпотентность.
- Парсинг/скрапинг (ключевой навык роли): практический опыт с headless-браузерами Playwright ,антидетект-браузерами ( Camoufox ) и HTTP-клиентами ( curl cffi , httpx). Детали в 1.
- Docker + docker-compose , Linux + systemd , CI/CD (GitLab CI / GitHub Actions), аккуратная работа ссекретами.
Задачи:
1. Парсинг маркетплейсов
Реальный прод-опыт парсинга/скрапинга с обходом антибот-защиты не только API-интеграции.Конкретно ожидаем:
- Playwright (Python, async api): управление контекстами/страницами, перехват сети, запуск насервере без дисплея ( Xvfb ). Понимание, что чистый headless-браузер на защищённых сайтах ловит 403/капчу .
- Антидетект-браузеры Camoufox или аналоги (undetected-chromedriver, patchright, nodriver):понимание, что маскировка нужна на уровне движка, а не JS-инъекцией (stealth-плагины детектятся).
- Детекция headless-браузера : знает основные сигналы (navigator.webdriver, отсутствиеwindow.chrome, WebGL/canvas fingerprint, CDP-артефакты, поведенческие).
- HTTP/TLS-уровень : curl cffi с impersonate, понимание TLS-фингерпринта ( JA3/JA4 ) почемуrequests/httpx палятся даже с правильными заголовками. httpx, cookie/session-менеджмент.
- Данные из внутренних JSON-API магазинов (реверс запросов из DevTools) вместо парсинга HTML;поддержка при смене схемы.
- Сессии и прокси : warm-session (прогрев один раз, переиспользование куки), мобильные/резидентскиепрокси, ротация IP, SOCKS5 ; понимание бана по репутации IP (а не только по fingerprint) и что паузамион не лечится.
- Надёжность пайплайна : идемпотентный UPSERT, очередь задач с FOR UPDATE SKIP LOCKED, обработказависших задач (lease/timeout).
Будет плюсом: масштабирование парсинга (пул прокси/модемов с бюджетом запросов, авто-ротация ивосстановление при банах); реверс мобильных/приватных API (подпись запросов, антифрод-заголовки,токены); опыт с коммерческими WAF/антиботами (Cloudflare, Akamai, DataDome, PerimeterX) и решениемкапчи; устойчивая 24/7-эксплуатация парсеров (heartbeat, алерты, самовосстановление).
2. Канонизация и матчинг товаров
Сведение офферов из разных магазинов в единые канонические карточки (entity resolution /дедупликация).
- Многосигнальный матчинг , а не один порог по одному признаку: нормализация (бренд, вес граммы,тип упаковки) + нечёткое сравнение ( pg trgm , FTS tsvector ) + текстовые эмбеддинги и векторныйпоиск + штрихкод (GTIN/EAN) как точный сигнал, где он есть.
- Пороги калибруются по precision/recall , есть заданная метрика качества не магическое 0.85 .
- Краевые случаи : разные фасовки/вкусы одного товара это разные карточки (вес/упаковка частьключа); ложные слияния; дубликаты; аналоги/замены.
- Human-in-the-loop : очередь модерации (link/create/reject), накопление размеченных данных.
Будет плюсом: продовый entity resolution на больших каталогах (сотни тысяч миллионы SKU); гибридныйпоиск (BM25 + векторный) и ре-ранкинг (cross-encoder); подбор/дообучение эмбеддингов под домен ирусский язык (морфология, лемматизация); выстроенный цикл разметки и active learning с метрикамиprecision/recall; LLM-верификатор матчинга со structured output.
3. PostgreSQL и масштабирование данных
- Индексы : B-tree, GIN (в т.ч. jsonb path ops), pg trgm, FTS; чтение планов запросов.
- JSONB для гибких атрибутов товара: операторы (-> > , @> ), GIN-индексация, generated columns для горячих полей.
- История цен как быстрорастущая таблица: эффективные запросы (свежая цена ORDER BY ts DESCLIMIT 1; медиана за 30 дней через percentile cont).
- Партиционирование по времени (PARTITION BY RANGE, pg partman) и понимание разницы партиционирование шардинг : на рост таблицы правильный порядок партиции ретенция/агрегация read-реплика и только потом горизонтальный шардинг.
Будет плюсом: Citus (горизонтальный шардинг), read-реплики (потоковая репликация), PgBouncer ,нагрузочное тестирование (p50/p95/p99).
4. AI/LLM для ассистента
- RAG-пайплайны : чанкинг, эмбеддинги, векторный поиск, сборка контекста; понимание, как меритькачество и стоимость.
- Векторная БД Qdrant : коллекции, payload-фильтры, пороги, батч-upsert.
- Интеграция LLM (через OpenRouter Claude Haiku/Sonnet): structured output / JSON-schema , function-calling, prompt engineering, контроль токенов/стоимости.
- Диалог/агент : чат-онбординг (извлечение структурированных полей из свободного текста), сценариидействий ассистента; при опыте LangGraph/LangChain.
- Observability LLM : Langfuse (или LangSmith/Phoenix) трейсинг вызовов, стоимость/латентность,evals, LLM-as-judge. Понимание, зачем это нужно поверх обычных метрик.
- PII / 152-ФЗ : деперсонализация перед внешним LLM, резидентность данных в РФ, почему инструмент спромптами держат self-hosted.
Будет плюсом: self-hosted LLM (vLLM/TGI), STT/TTS для голоса (Whisper/GigaAM, Silero), fine-tuning(LoRA/QLoRA).
Помимо стека
- Работа в команде : внятная коммуникация, code review, ведение задач; комфортен в маленькойкоманде и self-hosted-окружении.
- Умеет аргументированно объяснять и защищать свои решения , честно обозначать ограничения;корректирует подход под уточняющими вопросами.
- Самостоятельность: владеет задачей от проектирования до эксплуатации, а не ждёт готовыхинструкций.
- Продуктивно использует ИИ-агентов (Claude Code и т.п.) для рутины , но это не чистый вайбкод :понимает, ревьюит и отвечает за сгенерированный код, держит инженерную планку.
Будет плюсом: создание собственных AI-инструментов для разработки (кастомные скиллы/агенты/пайплайны, автоматизация рутины), которые реально ускоряют работу команды при сохраненииконтроля качества, а не полный вайбкод.