Catalog Weaver
Настільний застосунок для збагачення Excel-каталогів автозапчастин: пошук зображень, сумісність з ТЗ та AI-контроль якості — ввічливий браузерний пошук, кешування й експорт назад у Excel.
Огляд
Catalog Weaver — це Windows-застосунок для структурованого збагачення Excel-каталогів автозапчастин.
Фокус — на керованих, відновлюваних процесах. Користувач може:
- імпортувати каталоги постачальників з Excel;
- шукати зображення товарів у джерелах EU aftermarket (браузер + HTTP);
- визначати сумісність (легкові та комерційні ТЗ);
- за потреби запускати AI consensus — ранжування кандидатів і відсів поганих зображень;
- кешувати результати за бренд + артикул і продовжувати перервані партії;
- експортувати збагачені дані в Excel із вбудованими зображеннями.
Система спроєктована з модульними search providers, профілями пошуку та headless CLI для демо та CI-тестів.
Контекст
Проєкт виник із потреби прискорити підготовку каталогів для дистриб’юторів автозапчастин: сотні чи тисячі рядків з брендом, артикулом і описом, але без надійних фото та списків застосування.
Цільовий процес мав забезпечувати:
- ненав’язливий краулінг (throttling, один рядок за раз, сесія Google);
- мапінг колонок для українських і латинських заголовків;
- оцінку впевненості та ручний перегляд сумнівних збігів;
- сумісність без ручного TecDoc на кожен рядок;
- відновлювані довгі запуски (кеш, пропуск оброблених, періодичне auto-save);
- експорт із збереженням усіх вихідних колонок і лише трьома новими: URL зображення, вбудоване фото, сумісність.
Ключова вимога — поєднати класичний скрапінг з рішеннями на LLM, не втрачаючи прозорість і не витрачаючи бюджет API на кожне зображення-кандидат.
Відповідальність
- архітектура рішення та поетапний план впровадження;
- WPF UI та налаштування;
- оркестрація пошуку (Playwright, DuckDuckGo/Bing HTTP, site-scoped providers);
- пайплайн AI consensus (Gemini pre-rank → фінальна модель → rule + vision якість зображення);
- шар сумісності (Google AI overview, OpenAI API fitment);
- кеш SQLite і файловий consensus-cache;
- імпорт/експорт Excel (ClosedXML);
- throttling, failsafe зупинка партії, логування (Serilog);
- CLI для headless batch і CI.
Рішення
Реалізація — .NET 8 WPF із шарами: Core, Search, Consensus, Compatibility, Cache, Export, Excel, Images, Infrastructure, App, Cli.
Користувач може:
- відкрити Excel-каталог і змапити колонки (Brand, Article, Description тощо);
- обрати search profile (наприклад, EU aftermarket suppliers, catalog-only);
- запустити пакетний пошук із прогресом і статусом по рядках;
- переглянути обране зображення, сумісність і попередження про watermark;
- експортувати
{catalog}_results.xlsxіз вихідними колонками + три нові поля; - очистити кеш і перезапустити окремі рядки після зміни профілю або ключів.
Режим AI consensus (опційно) поєднує Playwright discovery, Gemini pre-rank, фінальну модель, перевірку якості зображень і API-сумісність, коли браузерний шлях пропущено або порожній.
Окрема увага — ввічлива автоматизація: concurrency = 1 рядок, налаштовувані затримки, рання зупинка при Google CAPTCHA, failsafe при серії інфраструктурних збоїв.
Технічні деталі
Стек
- C# / .NET 8
- WPF
- Playwright (Chrome, persistent profile)
- AngleSharp / HTML-парсери
- ClosedXML (Excel, embedded images)
- SQLite (кеш пошуку)
- JSON file cache (consensus)
- Serilog
- HttpClient (Bing, DuckDuckGo, OpenAI-compatible APIs)
- Gemini + OpenAI-compatible chat/vision
Архітектура
- Search — провайдери, discovery, confidence scoring, visual verification;
- Consensus — збір кандидатів, two-stage evaluator, image quality;
- Compatibility — orchestrator, AI client, Google AI overview;
- Cache — SQLite + файловий consensus-cache;
- Export — slim Excel, CSV, manual review;
- App — UI, settings, profiles;
- Cli — headless batch.
Профілі пошуку (JSON у work folder) задають домени, catalog-only, ліміти сумісності без перекомпіляції.
Функціональність
Реалізовано:
- імпорт Excel і мапінг колонок (у т.ч. українські заголовки);
- пошук зображень (web, Playwright, image APIs);
- сумісність (браузер + API);
- AI consensus із two-stage ranking і image quality;
- локальне збереження зображень або лише URL;
- відновлення з кешу після повторного відкриття файлу;
- пропуск успішних рядків при повторному запуску;
- періодичне auto-save (інтервал + кількість рядків);
- auto-export після завершення;
- failsafe при серії збоїв;
- job CSV logs і manual-review export;
- переносимий work folder (БД, images, profiles, logs, settings).
Виклики
Основними викликами були:
- anti-bot — Google CAPTCHA, Cloudflare, блоки DuckDuckGo HTTP;
- формати артикулів — крапки, дужки, дефіси в SKU vs HTML сторінки;
- хибні зображення — watermark, категорійні сторінки замість карток товару;
- баланс LLM — pre-rank на всіх кандидатах, vision лише на топ;
- довгі запуски — кеш до запису на диск, auto-save на 100+ рядках;
- легкові + комерційні ТЗ — промпти для Volvo FH, Actros тощо;
- захищена гілка main у GitLab — feature branches і merge requests.
Також важливо було зберегти простий контракт експорту для ERP/marketplace: вихідні колонки без змін, лише три колонки збагачення.
Результат
Проєкт підтвердив:
- повний цикл збагачення каталогу Excel → обробка → Excel;
- модульну архітектуру search providers і profiles;
- AI consensus з fallback на rule-based scoring;
- відновлювані партії (SQLite + consensus cache);
- failsafe і auto-save для тривалих unattended-запусків;
- кодову базу для CLI, CI та майбутніх адаптерів постачальників.
Архітектура придатна для автоматизації aftermarket-каталогів, підготовки PIM і marketplace listings.
Примітки
- Зразки каталогів клієнта та API-ключі не публікуються.
- ID моделей AI змінюються; міграція defaults при завантаженні settings.
- Windows 10+; Playwright profile для входу в Google.
- Акцент на ввічливому краулінгу та ручному перегляді low-confidence рядків.