Город: Москва
Занятость: Полная, 5/2
Опыт работы: От 3 до 6 лет
В связи с расширением команды в новый стартап проект ищем 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-инструментов для разработки (кастомные скиллы/агенты/пайплайны, автоматизация рутины), которые реально ускоряют работу команды — при сохраненииконтроля качества, а не полный вайбкод.
Адрес: Москва, Замоскворецкая линия, метро Белорусская
Похожие вакансии